优化requestContext数据结构定义

This commit is contained in:
白茶清欢 2024-11-13 11:24:42 +08:00
parent 45d4b08ed3
commit 376976b8af

View File

@ -23,34 +23,50 @@ import (
type RequestContext struct { type RequestContext struct {
ctx context.Context `json:"-"` // gin 上下文 ctx context.Context `json:"-"` // gin 上下文
runtimeInstance *trace.Runtime `json:"-"` // 链路统一追踪实例 runtimeInstance *trace.Runtime `json:"-"` // 链路统一追踪实例
lock *sync.RWMutex `json:"-"` // 数据锁
GatewayUrlConfig *GatewayApiConfig `json:"gateway_url_config"` // 网关接口的配置 GatewayUrlConfig *GatewayApiConfig `json:"gateway_url_config"` // 网关接口的配置
GatewayApiInfo *GatewayApi `json:"gateway_api_info"` // 网关接口信息 GatewayApiInfo *GatewayApi `json:"gateway_api_info"` // 网关接口信息
GatewayRequest *GatewayRequestInfo `json:"gateway_request"` // 网关请求信息 GatewayRequest *GatewayRequestInfo `json:"gateway_request"` // 网关请求信息
BackendApiResultTable map[string]*httpclientDefine.Response `json:"backend_api_result_table"` // 后端接口返回数据详细信息: 接口别名 => 请求结果 BackendApiResultTable map[string]*httpclientDefine.Response `json:"backend_api_result_table"` // 后端接口返回数据详细信息: 接口别名 => 请求结果
AppCode string `json:"app_code"` // 传入的APP Code
Sign string `json:"sign"` // 网关接口的签名
AppApiPermission *AppApiPermission `json:"app_api_permission"` // 应用接口权限 AppApiPermission *AppApiPermission `json:"app_api_permission"` // 应用接口权限
AppApiResultPermissionList []*AppApiResultPermission `json:"app_api_result_permission_list"` // 应用接口返回值权限 AppApiResultPermissionList []*AppApiResultPermission `json:"app_api_result_permission_list"` // 应用接口返回值权限
Lock *sync.RWMutex `json:"-"` // 数据锁
AppRateBehavior RateBehavior `json:"app_rate_behavior"` // 应用没有配置流控限制的行为 AppRateBehavior RateBehavior `json:"app_rate_behavior"` // 应用没有配置流控限制的行为
ProjectRateLimit map[string]*RateLimitConfig `json:"project_rate_behavior"` // 项目流控行为 ProjectRateLimit map[string]*RateLimitConfig `json:"project_rate_behavior"` // 项目流控行为
ResponseData *ResponseData `json:"response_data"` // 网关响应数据 ResponseData *ResponseData `json:"response_data"` // 网关响应数据
} }
func (rc *RequestContext) Lock() {
rc.lock.Lock()
}
func (rc *RequestContext) Unlock() {
rc.lock.Unlock()
}
func (rc *RequestContext) RLock() {
rc.lock.RLock()
}
func (rc *RequestContext) RUnlock() {
rc.lock.RUnlock()
}
// GatewayApiConfig 网关接口配置
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 10:41 2024/11/13
type GatewayApiConfig struct { type GatewayApiConfig struct {
RateLimit *RateLimit `json:"rate_limit"` // 网关接口流控规则 RateLimit *RateLimit `json:"rate_limit"` // 网关接口流控规则
GatewayApiID int64 `json:"gateway_api_id"` // 网关接口ID Uri string `json:"uri"` // 网关接口ID
Uri string `json:"uri"` // 网关接口ID ContentType string `json:"content_type"` // 请求类型
ContentType string `json:"content_type"` // 请求类型 Method string `json:"method"` // 请求方法
Method string `json:"method"` // 请求方法 Version string `json:"version"` // 接口版本
Version string `json:"version"` // 接口版本 ParamList []*Param `json:"param_list"` // 参数列表
Name string `json:"name"` // 接口名称 ResultList []*Result `json:"result_list"` // 返回值列表
Status string `json:"status"` // 状态 ServiceApiTable map[string]*ServiceApiConfig `json:"service_api_table"` // 服务接口列表
ParamList []*GatewayApiDetailParamItem `json:"param_list"` // 参数列表 RequestGroup [][]*RequestGroupItem `json:"request_group"` // 请求分组
ResultList []*GatewayApiDetailResultItem `json:"result_list"` // 返回值列表 RequestRewriteTable map[string][]*RequestRewriteItem `json:"request_rewrite_table"` // 请求重写规则, 项目接口别名ID => 重写规则列表
ProjectApiTable map[int64]*GatewayApiDetailProjectApiItem `json:"project_api_table"` // 项目接口列表
RequestGroup [][]*GatewayApiDetailRequestGroupItem `json:"request_group"` // 请求分组
RequestRewriteTable map[string][]*GatewayApiDetailRequestRewriteItem `json:"request_rewrite_table"` // 请求重写规则, 项目接口别名ID => 重写规则列表
} }
type RateLimit struct { type RateLimit struct {
@ -84,42 +100,38 @@ type GatewayApiDetailProjectApiResultItem struct {
ResultType string `json:"result_type"` // 返回值类型 ResultType string `json:"result_type"` // 返回值类型
} }
// GatewayApiDetailRequestGroupItem ... // RequestGroupItem 请求接口配置
// //
// Author : go_developer@163.com<白茶清欢> // Author : go_developer@163.com<白茶清欢>
// //
// Date : 17:58 2024/5/13 // Date : 11:10 2024/11/13
type GatewayApiDetailRequestGroupItem struct { type RequestGroupItem struct {
ProjectID int64 `json:"project_id"` // 项目ID ServiceFlag string `json:"service_flag"` // 服务标识
ProjectFlag string `json:"project_flag"` // 项目标识 ServiceApiFlag string `json:"service_api_flag"` // 服务接口标识
ProjectApiID int64 `json:"project_api_id"` // 项目接口ID ServiceApiAlias string `json:"service_api_alias"` // 服务接口别名
ProjectApiAlias string `json:"project_api_alias"` // 项目接口别名 ServiceApiConfig *ServiceApiConfig `json:"service_api_config"` // 服务接口配置
ProjectApiAliasID int64 `json:"project_api_alias_id"` // 项目接口别名ID
} }
// GatewayApiDetailRequestRewriteItem 请求重写参数信息表 // RequestRewriteItem 请求转换规则配置
// //
// Author : go_developer@163.com<白茶清欢> // Author : go_developer@163.com<白茶清欢>
// //
// Date : 18:02 2024/5/13 // Date : 11:16 2024/11/13
type GatewayApiDetailRequestRewriteItem struct { type RequestRewriteItem struct {
SourceProjectApiAlias string `json:"source_project_api_alias"` // 数据源项目接口别名 __GATEWAY__ 代表从网关读取 SourceServiceApiAlias string `json:"source_service_api_alias"` // 数据源项目接口别名 __GATEWAY__ 代表从网关读取
SourceProjectID int64 `json:"source_project_id"` // 数据源项目ID SourceServiceApiResultLocation string `json:"source_service_api_result_location"` // 数据源接口返回值位置
SourceProjectApiID int64 `json:"source_project_api_id"` // 数据源项目接口ID SourceServiceApiResultPath string `json:"source_service_api_result_path"` // 数据源接口返回值路径, SourceServiceApiAlias = __GATEWAY__ 代表从网关读取
SourceProjectApiResultID int64 `json:"source_project_api_result_id"` // 数据源接口返回值ID, SourceProjectApiAlias = __GATEWAY__ 代表从网关读取 TargetServiceApiAlias string `json:"target_service_api_alias"` // 目标接口接口别名
TargetProjectApiAlias string `json:"target_project_api_alias"` // 目标接口接口别名 TargetServiceApiParamLocation string `json:"target_service_api_param_location"` // 目标接口的参数位置
TargetProjectID int64 `json:"target_project_id"` // 目标项目ID TargetServiceApiParamPath string `json:"target_service_api_param_path"` // 目标接口的参数路径
TargetProjectApiID int64 `json:"target_project_api_id"` // 目标项目接口ID
TargetProjectApiParamID int64 `json:"target_project_api_param_id"` // 目标项目接口参数ID
} }
// GatewayApiDetailResultItem 网关响应信息表 // Result 网关响应信息表
// //
// Author : go_developer@163.com<白茶清欢> // Author : go_developer@163.com<白茶清欢>
// //
// Date : 18:03 2024/5/13 // Date : 11:21 2024/11/13
type GatewayApiDetailResultItem struct { type Result struct {
ID int64 `json:"id"` // 网关接口返回值ID
SourceProjectApiAlias string `json:"source_project_api_alias"` // 数据源项目接口别名 __GATEWAY__ 代表从网关读取 SourceProjectApiAlias string `json:"source_project_api_alias"` // 数据源项目接口别名 __GATEWAY__ 代表从网关读取
SourceDataLocation string `json:"source_data_location"` // 数据源数据位置 SourceDataLocation string `json:"source_data_location"` // 数据源数据位置
SourceDataPath string `json:"source_data_path"` // 数据源数据路径 SourceDataPath string `json:"source_data_path"` // 数据源数据路径
@ -129,27 +141,31 @@ type GatewayApiDetailResultItem struct {
OutputDataType string `json:"output_data_type"` // 网关输出数据类型 OutputDataType string `json:"output_data_type"` // 网关输出数据类型
} }
type GatewayApiDetailParamItem struct { // Param 网关接口参数数据结构
ID int64 `json:"id"` // 参数ID //
// Author : go_developer@163.com<白茶清欢>
//
// Date : 11:20 2024/11/13
type Param struct {
Location string `json:"location"` // 参数位置 Location string `json:"location"` // 参数位置
Path string `json:"path"` // 参数名称 Path string `json:"path"` // 参数路径
ParamType string `json:"param_type"` // 参数类型 ParamType string `json:"param_type"` // 参数类型
DefaultValue string `json:"default_value"` // 默认值 DefaultValue string `json:"default_value"` // 默认值
IsRequired bool `json:"is_required"` // 是否必传 IsRequired bool `json:"is_required"` // 是否必传
AllowEmpty bool `json:"allow_empty"` // 空字符串是否为有效参数 AllowEmpty bool `json:"allow_empty"` // 空字符串是否为有效参数
AllowZero bool `json:"allow_zero"` // 数字类型, 0 是否为有效参数 AllowZero bool `json:"allow_zero"` // 数字类型, 0 是否为有效参数
AllowNil bool `json:"allow_nil"` // nil 是否为有效参数 AllowNil bool `json:"allow_nil"` // nil 是否为有效参数
ValidateRule any `json:"validate_rule"` // 校验规则 : TODO : 预留
} }
// GatewayApiDetailProjectApiItem 项目接口规则 // ServiceApiConfig 服务接口配置
// //
// Author : go_developer@163.com<白茶清欢> // Author : go_developer@163.com<白茶清欢>
// //
// Date : 17:44 2024/5/13 // Date : 17:44 2024/5/13
type GatewayApiDetailProjectApiItem struct { type ServiceApiConfig struct {
ProjectFlag string `json:"project_flag"` // 项目标识 ServiceFlag string `json:"service_flag"` // 服务标识标识
ProjectID int64 `json:"project_id"` // 项目ID ServiceApiFlag string `json:"service_api_flag"` // 服务接口标识
ProjectApiID int64 `json:"project_api_id"` // 项目接口ID
CacheEnable bool `json:"cache_enable"` // 缓存是否可用 CacheEnable bool `json:"cache_enable"` // 缓存是否可用
CacheInstanceID int64 `json:"cache_instance_id"` // 缓存可用的情况下, 缓存实例ID CacheInstanceID int64 `json:"cache_instance_id"` // 缓存可用的情况下, 缓存实例ID
CacheConfig *ApiCacheConfig `json:"cache_config"` // 缓存配置 CacheConfig *ApiCacheConfig `json:"cache_config"` // 缓存配置
@ -180,19 +196,18 @@ type ApiCacheConfig struct {
} }
type GatewayApiDetail struct { type GatewayApiDetail struct {
RateLimit *RateLimit `json:"rate_limit"` // 网关接口流控规则 RateLimit *RateLimit `json:"rate_limit"` // 网关接口流控规则
GatewayApiID int64 `json:"gateway_api_id"` // 网关接口ID GatewayApiID int64 `json:"gateway_api_id"` // 网关接口ID
Uri string `json:"uri"` // 网关接口ID Uri string `json:"uri"` // 网关接口ID
ContentType string `json:"content_type"` // 请求类型 ContentType string `json:"content_type"` // 请求类型
Method string `json:"method"` // 请求方法 Method string `json:"method"` // 请求方法
Version string `json:"version"` // 接口版本 Version string `json:"version"` // 接口版本
Name string `json:"name"` // 接口名称 Name string `json:"name"` // 接口名称
Status string `json:"status"` // 状态 Status string `json:"status"` // 状态
ParamList []*GatewayApiDetailParamItem `json:"param_list"` // 参数列表 ParamList []*Param `json:"param_list"` // 参数列表
ResultList []*GatewayApiDetailResultItem `json:"result_list"` // 返回值列表 ResultList []*Result `json:"result_list"` // 返回值列表
ProjectApiTable map[int64]*GatewayApiDetailProjectApiItem `json:"project_api_table"` // 项目接口列表 ProjectApiTable map[int64]*ServiceApiConfig `json:"project_api_table"` // 项目接口列表
RequestGroup [][]*GatewayApiDetailRequestGroupItem `json:"request_group"` // 请求分组 RequestRewriteTable map[string][]*RequestRewriteItem `json:"request_rewrite_table"` // 请求重写规则, 项目接口别名ID => 重写规则列表
RequestRewriteTable map[string][]*GatewayApiDetailRequestRewriteItem `json:"request_rewrite_table"` // 请求重写规则, 项目接口别名ID => 重写规则列表
} }
type GatewayApi struct { type GatewayApi struct {