网关接口
约 1154 字大约 4 分钟
2025-04-29
前置说明
实际业务最终数据模型,何必本内容列出的信息更为复杂,本内容只列出最小实现的核心信息, 保证核心流程的正常运行
网关接口
属性 | 字段名 | 类型 | 含义 |
---|---|---|---|
接口ID | id | bigint unsigned | 网关接口的ID |
接口路由 | uri | varchar(256) | 网关对外暴露的接口 |
请求方法 | method_id | bigint unsigned | 请求方法的ID,请求方法视作配置,独立维护,此处通过ID进行引用 |
请求类型 | content_type_id | bigint unsigned | 请求网关接口的Content-Type的ID,视作配置,独立维护,此处通过ID进行引用 |
响应类型 | response_content_type_id | bigint unsigned | 网关接口响应数据的Content-Type的ID,视作配置,独立维护,此处通过ID进行引用 |
接口状态 | status | varchar(32) | 接口状态,仅使用中状态的接口,外部可以进行访问 |
唯一索引: uri + method_id
, 路由+请求方法唯一确定一个接口, 原因是: 有些场景要求严格遵守 restful 规范
, 路由+请求方法唯一确定一个接口
网关接口参数
属性 | 字段名 | 类型 | 含义 |
---|---|---|---|
参数ID | id | bigint unsigned | 参数的ID |
网关接口ID | gateway_api_id | bigint unsigned | 网关接口ID |
参数名称 | name | varchar(256) | 参数名称 |
参数类型 | param_type | varchar(32) | 参数类型,如string,number,boolean,array,object,支持的类型参见:支持的参数类型 |
参数位置 | location | varchar(32) | 参数在请求数据中的位置,如body,header,query,path,form, 支持的参数位置参见: 支持的参数位置 |
参数默认值 | default_value | varchar(1024) | 非必传参数 在未传, 或者传了对应类型零值 的情况下,会使用默认值给参数赋值 |
唯一索引: gateway_api_id + name + location
, 网关接口 + 参数名称 + 参数位置, 定位唯一网关接口参数
关于location的说明
- ANY: 参数在任意位置都可以, 内部会自适应, 但是不建议如此使用, 会存在不确定性, 具体规则如下:
- POST类请求, 解析顺序:
body > query > header > cookie
- GET类请求, 解析顺序:
query > body > header > cookie
- POST类请求, 解析顺序:
- STATIC: 静态参数,
固定值
, 后续可以直接使用 - CUSTOM_CONFIG: 针对接口的一些动态配置, 辅助后续处理
网关接口返回值
属性 | 字段名 | 类型 | 含义 |
---|---|---|---|
返回值ID | id | bigint unsigned | 返回值的ID |
网关接口ID | gateway_api_id | bigint unsigned | 网关接口ID |
返回值路径 | data_path | varchar(256) | 返回值在响应数据中的路径 |
返回值类型 | data_type | varchar(32) | 返回值的类型,如string,number,boolean,array,object,支持的类型参见:支持的返回值类型 |
返回值位置 | location | varchar(32) | 返回值在响应数据中的位置,支持的返回值位置参见: 支持的返回值位置 |
返回值默认值 | default_value | varchar(1024) | 返回值字段不存在时,以当前值返回 |
唯一索引: gateway_api_id + data_path + location
, 网关接口 + 返回值路径 + 返回值位置, 定位唯一网关接口返回值
提示
- EXTENSION: 数据放到扩展信息中, 对业务数据不产生直接影响, 方便跟踪一些扩展信息, 数据输出时会放在与data字段平级的
extension字段中
- BODY_ROOT: 当前提取到的数据值,整体作为响应Body返回
返回值默认值说明
注意: 返回值默认值当且仅当返回值不存在,或者返回值为nil时生效
数据结构
基于上述的网关接口模型描述, 我们可以得到如下的数据结构(后续的内容基于此结构展开, 相关扩展也会基于此结构扩展):
// GatewayApi 网关接口
type GatewayApi struct {
ID int64 `json:"id" dc:"网关接口ID"`
Uri string `json:"uri" dc:"网关接口路由"`
Method string `json:"method" dc:"请求方法"`
ContentType string `json:"content_type" dc:"请求类型"`
ResponseContentType string `json:"response_content_type" dc:"响应类型"`
Status string `json:"status" dc:"接口状态"`
Params []*GatewayApiParam `json:"params" dc:"接口参数"`
Response []*GatewayApiResponse `json:"response" dc:"接口返回值"`
}
// GatewayApiParam 网关接口参数
type GatewayApiParam struct {
ID int64 `json:"id" dc:"参数ID"`
GatewayApiID int64 `json:"gateway_api_id" dc:"网关接口ID"`
Name string `json:"name" dc:"参数名称"`
ParamType string `json:"param_type" dc:"参数类型"`
Location string `json:"location" dc:"参数位置"`
}
// GatewayApiResult 网关接口返回值
type GatewayApiResult struct {
ID int64 `json:"id" dc:"返回值ID"`
GatewayApiID int64 `json:"gateway_api_id" dc:"网关接口ID"`
DataPath string `json:"data_path" dc:"返回值路径"`
DataType string `json:"data_type" dc:"返回值类型"`
Location string `json:"location" dc:"返回值位置"`
}