跳到主要内容

事件规范

事件是整个框架的驱动核心,主要分为外域网事件和内域网事件。通常外域事件是一个特定结构 JSON 对象,用来访问具体实现的逻辑,然后使用统一的 JSON 格式返回结果。这里没有采用传统 Restful API 规范,而是使用自定义的 JSON 结构,以适应更多的外域服务协议,避免绑定 HTTP。内域事件通过特定的客户端对象封装调用,每个事件的调用参数和返回格式有区别,请仔细查看响应的文档说明使用。

外域事件

属性说明

参数名类型必填说明
idstring事件唯一标识
projectstring项目名称
versionstring版本号
contextstring上下文环境
entitystring实体名称
eventstring事件类型
paramsstring事件参数,JSON 字符串格式
accessTokenstring访问令牌
sourcestring事件来源,理论上支持任意种客户来源,通过登录后得到对应的 token 访问即可。
signstring签名,参考后端签名算法
createdAtnumber创建时间戳(毫秒)

具体示例

{
"id": "01JRA7C2BE95A46GPH346BA5FB",
"project": "event",
"version": "0.1.0",
"context": "gateway",
"entity": "entity",
"event": "list",
"params": "{\"page\":1,\"pageSize\":10, \"deleted\":false}",
"accessToken": "xxx",
"source": "web_api",
"sign": "457cfbd554b0a913b1cdde56dd547b9b2b5a62ed",
"createdAt": 1744100002158
}

JSON Schema 验证

{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Event Schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "事件的唯一标识符"
},
"project": {
"type": "string",
"description": "项目号,标识事件所属项目"
},
"version": {
"type": "string",
"description": "版本号,标识事件所属版本"
},
"context": {
"type": "string",
"description": "上下文号,标识事件所属上下文环境"
},
"entity": {
"type": "string",
"description": "实体号,标识事件所属实体"
},
"event": {
"type": "string",
"description": "事件号,标识事件类型"
},
"source": {
"type": "string",
"description": "事件来源,标识事件发起者"
},
"params": {
"type": "string",
"description": "事件参数,JSON格式字符串"
},
"accessToken": {
"type": "string",
"description": "访问令牌,用于权限验证"
},
"createdAt": {
"type": "integer",
"description": "创建时间戳",
"format": "int64"
},
"sign": {
"type": "string",
"description": "签名,用于验证事件完整性"
}
},
"required": [
"id",
"project",
"version",
"context",
"entity",
"event",
"source",
"params",
"accessToken",
"createdAt",
"sign"
],
"additionalProperties": false
}

外域事件-响应结果

每个事件返回的响应结果都是统一的,具体如下:

属性说明

参数名类型必填说明
codestring响应状态码,如:"ok"
createdAtnumber响应时间戳(毫秒)
messagestring响应消息
listarray数据列表
totalnumber数据总数
sizenumber每页数量
pagenumber当前页码

具体示例

{
"code": "ok",
"createdAt": 1744100002187,
"message": "查询成功",
"list": [],
"total": 0,
"size": 0,
"page": 1
}

JSON Schema 验证

{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "JSON Response Schema",
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "响应码,表示操作结果状态"
},
"createdAt": {
"type": "integer",
"description": "响应创建时间戳(毫秒)",
"format": "int64"
},
"message": {
"type": "string",
"description": "响应消息,对状态的文字描述"
},
"list": {
"type": "array",
"description": "响应数据列表",
"items": {}
},
"total": {
"type": "integer",
"description": "数据总数(用于分页)",
"format": "int64"
},
"size": {
"type": "integer",
"description": "当前页数据大小"
},
"page": {
"type": "integer",
"description": "当前页码"
}
},
"required": ["code", "createdAt", "message", "list", "total", "size", "page"],
"additionalProperties": false
}

内域事件

内域事件基于内部自定义的 RPC 协议,Gateway 和 Worker 都通过接口dispatcher.Event调用,返回结果为 ResponseMessage 对象。

调用方法

功能描述

dispatcher.Event函数用于处理内域事件请求,并将请求发送到指定的端点。该函数会检查请求的调用链,防止循环调用。

参数说明

参数名类型描述
endpointstring目标端点的 URL,表示请求将要发送到的地址
typztypes.INTRANET_EVENT_TYPE事件类型,表示请求的事件类型
paramsstring object请求参数,表示要发送的请求参数,通常为字符串或对象
requestserverx.RequestContext请求上下文,包含请求的调用链和事件信息

返回值

返回值类型描述
responsegnetx.ResponseMessage返回的响应消息,表示从目标端点返回的响应
errerror返回的错误信息,表示在请求过程中发生的任何错误

ResponseMessage 结构

// ResponseMessage 定义服务器响应的消息结构
// 包含响应的状态码、内容类型和数据
type ResponseMessage struct {
Status int `json:"s"` // 状态码,同HTTP协议
MessageType serverx.CONTENT_TYPE `json:"mt"` // 响应内容类型:PING、JSON或STRING
Data string `json:"d"` // 响应内容,可能是JSON字符串或普通文本
}

使用示例

response, err := dispatcher.Event(
"https://api.example.com/endpoint",
types.EVENT_TYPE_EXAMPLE,
`{"key": "value"}`,
requestContext,
)
if err != nil {
// 处理错误
}
// 使用response

常用响应状态码

个别状态可能有变更,以当前版本里 constant/response_code.go 里定义的常量为准。

代码常量响应码说明
SUCCESSok操作成功
WORKER_ENDPOINTworker_endpointworker 地址
FAIL_TO_CREATEfail_to_create创建失败
FAIL_TO_QUERYfail_to_query查询失败
FAIL_TO_UPDATEfail_to_update更新失败
FAIL_TO_DELETEfail_to_delete删除失败
FAIL_TO_PROCESSfail_to_process处理失败
INVALID_SIGNinvalid_sign无效的签名
INVALID_PARAMinvalid_param无效的参数
INVALID_TOKENinvalid_token登录信息无效
INVALID_PASSWORDinvalid_password账号信息错误
MISSING_PARAMmissing_param缺少必要参数
ALREADY_EXISTalready_exist数据已存在
USER_EXISTuser_exist用户已存在
USER_BANNEDuser_banned用户已被禁止
USER_NOT_EXISTuser_not_exist无效的账号或密码
USER_SIGN_TIMEOUTuser_sign_timeout用户签名超时
USER_UNAUTHORIZEDuser_unauthorized用户未授权
EVENT_TIMEOUTevent_timeout事件超时
EVENT_NOT_EXISTevent_not_exist事件不存在
ENTITY_NOT_EXISTentity_not_exist实体不存在
UNSUPPORTED_EVENTunsupported_event不支持的事件
UNSUPPORTED_CLIENTunsupported_client不支持的客户端
UNHANDLED_ERRORunhandled_error未处理的错误
UNKNOWN_DATAunknown_data未知数据格式
EMPTY_DATAempty_data数据为空
DATA_EXISTdata_exist数据已存在
TOO_MANY_REQUESTSTOO_MANY_REQUESTS请求过于频繁
LIMIT_REACHEDlimit_reached达到最大上限
FORBIDDEN_CALLforbidden_call禁止的调用方式
TASK_PENDINGtask_pending任务已添加
TASK_IN_PROGRESStask_in_progress任务进行中
TASK_FAILEDtask_failed任务失败
TASK_TIMEOUTtask_timeout任务超时
TASK_UNKNOWNtask_unknown任务未知
TASK_LIMIT_REACHEDtask_limit_reached任务达到最大上限
SERVICE_UNAVAILABLEservice_unavailable服务不可用
REQUEST_TIMEOUTrequest_timeout请求超时
CONFLICTconflict资源冲突
NOT_IMPLEMENTEDnot_implemented功能未实现