协议
信息
插件 SDK 封装了协议细节,插件开发者按照 SDK 文档进行开发即可。
主服务(Sephirah)与插件(Porter)采取双向通信,默认插件可信并且处于可信网络内 。通过 consul 服务发现机制获取实例列表。
建立连接
Sephirah设置Porter类型的特殊用户- 每个
Porter实现应当有自己硬编码的PorterName(字符串),Porter启动前由服务器管理员分配一个PorterID,PorterName相同视为源代码相同,PorterID不允许重复,不支持不同版本的Porter同时存在 Porter注册实例时将PorterName和PorterID设为node metaSephirah定时从服务发现获取Porter实例列表,遍历实例调用信息获取接口,将有效实例显示在管理员面板上- 管理员根据信息确认是否启用新
Porter - 管理员确认后服务端调用
Porter启用接口分配 accessToken 和 refreshToken Porter应自行维护 accessToken,过期后可以要求Sephirah重新分配- 在之后的调用过程中
Porter的信息获取接口中包含其支持的接口列表,Sephirah根据列表在需要时调用Porter的接口Porter能够调用特定接口获取用户模拟 token,该 token 应包含Porter和用户的信息,能够以该用户的身份调用接口,必要时与真实用户调用做出不同的响应逻辑- 非用户模拟状态限制可调用接口
识别功能
Porter 能够扩展的功能由接口定义硬编码,Sephirah 通过调用接口获取功能列表,功能的关键字段包括:
id:功能在对应接口中的唯一标识,不同功能接口中的 id 可以相同region:功能所属的可用区,Sephirah会在同一可用区内随机选择一个Porter实例调用config_json_schema和config_json:功能的自定义字段,Porter通过 JSON Schema 定义功能的配置字段,客户端构造相应的 UI 以便用户填写配置,之后将配置序列化为 JSON 字符串传递给Porter