Skip to content
Navigation Menu
Sign in
Appearance settings
Platform
AI CODE CREATION
GitHub Copilot
Write better code with AI
GitHub Copilot app
Direct agents from issue to merge
MCP Registry
Integrate external tools
DEVELOPER WORKFLOWS
Actions
Automate any workflow
Codespaces
Instant dev environments
Issues
Plan and track work
Code Review
Manage code changes
Code Quality
Enforce quality at merge
APPLICATION SECURITY
GitHub Advanced Security
Find and fix vulnerabilities
Code security
Secure your code as you build
Secret protection
Stop leaks before they start
EXPLORE
Why GitHub
Documentation
Blog
Changelog
Marketplace
View all features
Solutions
BY COMPANY SIZE
Enterprises
Small and medium teams
Startups
Nonprofits
BY USE CASE
App Modernization
DevSecOps
DevOps
CI/CD
View all use cases
BY INDUSTRY
Healthcare
Financial services
Manufacturing
Government
View all industries
View all solutions
Resources
EXPLORE BY TOPIC
AI
Software Development
DevOps
Security
View all topics
EXPLORE BY TYPE
Customer stories
Events & webinars
Ebooks & reports
Business insights
GitHub Skills
SUPPORT & SERVICES
Documentation
Customer support
Community forum
Trust center
Partners
View all resources
Open Source
COMMUNITY
GitHub Sponsors
Fund open source developers
PROGRAMS
Security Lab
Maintainer Community
Accelerator
GitHub Stars
Archive Program
REPOSITORIES
Topics
Trending
Collections
Enterprise
ENTERPRISE SOLUTIONS
Enterprise platform
AI-powered developer platform
AVAILABLE ADD-ONS
GitHub Advanced Security
Enterprise-grade security features
Copilot for Business
Enterprise-grade AI features
Premium Support
Enterprise-grade 24/7 support
Pricing
Search
/
Sign in
Sign up
Appearance settings
You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
Dismiss alert
{{ message }}
Uh oh!
There was an error while loading.
Please reload this page
.
APIJSON
/
APIJSON-GoFrame
Public
forked from
glennliao/apijson-go
Notifications
You must be signed in to change notification settings
Fork
0
Star
1
Code
Pull requests
0
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Security and quality
Insights
Files
Expand file tree
main
Breadcrumbs
APIJSON-GoFrame
/
config
/
functions.go
Copy path
Blame
More file actions
Blame
More file actions
Latest commit
History
History
History
executable file
·
63 lines (50 loc) · 2.13 KB
main
Breadcrumbs
APIJSON-GoFrame
/
config
/
functions.go
Copy path
Top
File metadata and controls
Code
Blame
executable file
·
63 lines (50 loc) · 2.13 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package config
import (
"context"
"fmt"
"github.com/glennliao/apijson-go/model"
"github.com/gogf/gf/v2/container/gvar"
"github.com/gogf/gf/v2/frame/g"
)
const (
ParamTypeInt = "int"
ParamTypeString = "string"
FromRes = "res" // 只从响应的数据字段中取, 不从用户传递的数据取
)
type ParamItem struct {
Type string
Name string
Desc string
Default any
From string // 指定参数从何处取值
V string // 参数校验规则
}
type Func struct {
Desc string // 描述
// 参数可直接读取函数参数传递过来的, ''括起来
ParamList []ParamItem // 参数列表 // fixme 限制参数来源,强制用户传递的无法覆盖内部的,减免权限的重复判断, 参数校验限制 , v (最大值,最小值,默认值, 自定义校验。 使用gvaild)
Batch bool // 是否为批量处理, 例如在获取列表后一次性将id传入, 然后按照传入的参数数组返回结果数组
Handler func(ctx context.Context, param model.FuncParam) (res any, err error)
}
type functions struct {
funcMap map[string]*Func
}
func (f *functions) Bind(name string, _func Func) {
if _, exists := f.funcMap[name]; exists {
panic(fmt.Errorf(" function %s has exists", name))
}
f.funcMap[name] = &_func
}
func (f *functions) Call(ctx context.Context, name string, param g.Map) (any, error) {
params := map[string]model.Var{}
for k, v := range param {
params[k] = gvar.New(v)
}
return f.funcMap[name].Handler(ctx, params)
}
// functions 可能提供的功能
// 1. 增加响应字段 -> 该字段需要与系统中别的数据结合处理,如果只是静态处理(去空格,与常量拼接等可直接前端处理即可) 目前会不受_access_ext 中field_get控制, 需处理. 响应字段修改(脱敏、加密、字典转换) 不提供前端控制, 由_access_ext处理
// 2. 通过func节点获取一些系统信息
// 3. actions 中 自定义校验参数、自定义校验权限, 请求体修改(批量字段替换处理?)
// 4. 其他需要自定义的地方 (在action中可看成是hook的替代)
// functions 可用于 field_get 使用, 用于修改请求、响应
You can’t perform that action at this time.