跳到主要内容

公域接口

Worker 的公域接口,根据开发后台的开发配置,具体到每个实体下面的事件定义,请参考开发后台提供的接口文档,这里简单的介绍一下公域接口的使用。


接口规范

Worker 可以通过自定义 PublicServer 实现各种通讯协议来接收事件数据,并暴露接口给公域使用,而非必须 HTTP 协议

请求示例:

POST /demo/user/user_info

{
"id": "01JRCXYE12PXWWCAXJH06B7GRF",
"project": "demo",
"version": "0.1.0",
"context": "user",
"entity": "user_info",
"event": "query",
"params": "{\"username\":\"xx@xx.com\"}",
"accessToken": "t.xx.xx",
"source": "web_api",
"sign": "ce934e4fb445d1dfda711e1c82b43e66703dec10",
"createdAt": 1744190781474
}

以上例子中,在默认的 http 公域服务中,请求方法为 POST,对应的每个事件的请求 url 为参数中的 /{project}/{context}/{entity},该规则为开发约定,在 HTTP 协议下,方便浏览器调试,并非强制,理论上传任何数据到 POST 方法都会根据参数处理。

响应示例:

{
"code": "ok",
"createdAt": 1744191511367,
"message": "登录成功",
"list": [
{
"id": "xx",
"name": "root",
"avatar": "https://xxx/xxx.png",
"gender": "male",
"createdAt": 1725187381459,
"email": "xx",
"ucode": "FAC3"
}
],
"total": 1,
"size": 1,
"page": 1
}

自定义 PublicServer

首先需要实现一下接口,具体可借鉴公域实现 event-matrix/worker/public/hertzimpl/server.go 或私域实现 event-matrix/worker/intranet/gnetimpl/server.go

// NetworkServer 扩展了 Server 接口,提供网络服务器特有的功能
type NetworkServer interface {
// ServerId 返回全局服务器的唯一标识
ServerId() string
// Start 启动服务器,完成必要的初始化工作
Start() error
// Stop 停止服务器,执行清理工作
Stop() error
// OnStart 注册启动事件回调函数
// 用于在启动服务器时执行一些对特定服务器实现的初始化操作,比如注册中间件等
OnStart(OnStartFunc)
// OnStop 注册停止事件回调函数
// 用于在停止服务器时执行一些对特定服务器实现的清理操作,比如注销中间件等
OnStop(OnStopFunc)
// UnHandle 设置未处理的网络事件的处理函数
UnHandle(HandleFunc)
// Impl 返回服务器的底层实现对象
// 返回值是一个接口,需要通过类型断言转换为具体的实现类型
Impl() interface{}
}

然后在调用 NewTwoWayWorkerServer 方法初始化 worker 时,传入配置 PublicServer 即可替换默认的公域服务。需要注意的是,一般自定义的公域服务在 start 方法中需要对传进来的数据统一处理成接口 RequestContext,才能获取内置的数据处理能力。

// RequestContext 定义了请求上下文接口,封装了请求和响应的处理方法
type RequestContext interface {
// IP 获取客户端IP地址
IP() string

// Path 获取请求路径
Path() string

// Body 获取请求体原始字节数据
Body() []byte

// SetStatus 设置响应状态码,默认为200
// 返回当前上下文以支持链式调用
SetStatus(int) RequestContext

// BodyType 获取请求体类型(JSON或字符串)
BodyType() CONTENT_TYPE

// IsJsonBody 判断请求体是否为JSON格式
IsJsonBody() bool

// Header 获取指定请求头的值
Header(key string) string

// SetHeader 设置响应头
SetHeader(key, value string)

// Response 发送原始字节响应
Response(bytes []byte) error

// ResponseString 发送字符串响应
ResponseString(string) error

// ResponseJson 发送JSON格式响应,自动序列化
ResponseJson(interface{}) error

// ResponseBuiltinJson 发送内置JSON响应
ResponseBuiltinJson(code constant.RESPONSE_CODE) error

// Event 获取核心事件对象
Event() *core.Event

// EntityEvent 获取实体事件对象
EntityEvent() *core.EntityEvent

// CallChain 获取调用链信息,用于防止循环调用
CallChain() []string

// Data 获取临时存储的上下文数据
// 注意:建议使用类型断言转换为具体结构体,而不是直接使用map
Data() interface{}

// SetData 设置临时存储的上下文数据
SetData(interface{})

// CtxImpl 获取底层实现对象,用于类型断言获取具体实现
CtxImpl() interface{}
}