servicecall_rules - catyguan/sad GitHub Wiki

ServiceCall服务接口定义

服务调用相关的数据类型定义

名称 类型 编号 缩写 说明
null 空值 0 n 值,非数据类型
bool 布尔 1 b true/false
int 整型 2 i 32位有符号整型
long 长整型 3 l 64位有符号整型
float 浮点数 4 f 32位浮点数
double 双精浮点数 5 d 64位浮点数
string 字符串 6 s utf-8编码的字符串
var 变值 7 v 可以为任何值
array 列表集合 8 a 有序的数据集合
map 映射集合 9 m 字符串为key的数据集合
binary 二进制数据 10 o

集合类型在设计上可以采用泛型的表示方式, 例如

  • array<string> 表示字符串的列表
  • map<int> 表示字符串到整型的映射

服务调用过程的数据元素定义

服务接口的地址(Address)

采用 服务名称:服务方法 定义一个服务接口

  • 相同的服务名称表示同一个服务
  • 同一服务名称下的相同服务方法表示同一个服务接口
  • 不同服务名称下可以有不同的服务方法,表示不同服务接口

地址的表示方式采用 map<var>, 具体格式如下

{
  "Type" : "http",
  "API" : "http://api.myhost.com/test/hello.php",
  "Option" : { }
}
  • Type:string 表示服务接口的类型
  • API:string 表示服务接口的具体寻址方式,根据具体的类型有具体不同的字符串格式
  • Option:map 表示调用的时候选项,可无

请求数据(Request)

定义服务调用的业务(参数)数据结构

map<var>类型,数据格式根据业务需求设计

上下文数据(Context)

定义服务调用的非业务数据结构。

map<var>类型,数据格式根据相关规范制定

常见的数据逻辑有

  • 调用选项,如超时时间
  • 访问授权,如身份数据
  • 调试选项,如事务标识
  • 关联数据,服务调用支持无状态的调用,需通过上下文数据传递多次请求之间的关联数据。如会话标识

应答数据(Answer)

定义当前服务调用的处理结果

map<var>类型,数据格式如下

{
  "Status" : 200,
  "Message" : "OK",
  "Result" : { },
  "Context" : { }
}

说明:

  • Status表示处理结果的情况
数值 含义 说明
100 接收成功,等待下一个调用 处理信息可以通过Result获得。用于多请求的事务场景
200 调用成功,并有响应 Status为空或者为0,也表示200
202 调用处理中 处理信息可以通过Result获得。用于异步调用场景
204 调用成功,但无响应 常用发送消息或者回调场景
302 调用转移 转移的具体信息可以通过Result获得
400 无效调用
403 调用拒绝
408 调用超时 请求接收,执行超时。请求还是可能执行完成。
500 调用异常 具体的错误信息可以通过Message获得
502 调用转发失败 请求未被处理
  • Message为提示性质的消息,可无
  • Result为响应数据,可无
  • Context为应答上下文数据,可无

响应数据(Response)

定义服务调用的业务处理结果

map<var>类型,数据格式根据业务需求设计

服务调用逻辑定义

通用逻辑

  1. 获取服务调用管理对象
  2. 通过管理对象创建服务调用客户端对象
  3. 通过客户端对象完成具体的调用
  4. 关闭客户端

说明:

  • 管理对象保存服务调用过程中的全局状态
  • 客户端对象保存服务调用过程中的会话状态
  • 会话状态可以导出到外部存储系统上,并在新的客户端上导入

同步调用

  1. 客户端: 发送请求,等待响应
  2. 服务端: 接收请求,处理请求,发送应答和响应
  3. 客户端: 接收应答
  4. 结束

多步调用

  1. 客户端: 发送请求1,等待应答
  2. 服务端: 接收请求1,处理请求1,发送应答100
  3. 客户端:接收应答,获取处理信息用于后续上下文
  4. 客户端: 发送请求2,等待应答
  5. 服务端: 接收请求2,处理请求2,发送应答100
  6. 客户端:接收应答
  7. 不断重复4-6,直到事务所有调用都完成,最后服务端应答响应
  8. 结束

异步调用轮询响应

  1. 客户端: 发送请求,等待应答
  2. 服务端: 接收请求,异步处理请求,发送应答202
  3. 客户端:接收应答,获取处理信息用于后续上下文
  4. 客户端: 等待一段时间,发送查询结果请求,等待应答
  5. 服务端: 接收查询结果请求,检查处理结果——如果还在执行,发送应答202;否则,发送应答响应
  6. 客户端:接收应答,检查状态
  7. 不断重复4-6,直到获得响应
  8. 结束

异步调用推送响应

  1. 客户端: 发送请求,等待应答
  2. 服务端: 接收请求,异步处理请求,发送应答202
  3. 客户端:接收应答,等待服务推送响应。等待超时时候,向用户应答408,清理会话(如关闭连接)
  4. 服务端: 请求处理完成后,发送应答响应
  5. 客户端:接收响应
  6. 结束

异步调用回调响应

  1. 客户端: 发送请求,上下文提供回调信息,等待应答
  2. 服务端: 接收请求,异步处理请求,发送应答202
  3. 客户端:接收应答,获取处理信息用于后续回调
  4. 客户端:关闭
  5. 服务端: 请求处理完成后,根据回调信息发起请求调用,把响应数据作为请求数据
  6. 回调服务器:接收请求,处理响应,发送应答204
  7. 结束

注册回调

  1. 客户端: 发送请求,上下文提供回调信息,等待应答
  2. 服务端: 接收请求,处理请求,并记录回调信息,发送应答响应
  3. 客户端:接收应答
  4. 客户端:关闭
  5. 服务端: 在满足回调条件时候,根据回调信息发起请求调用,把响应数据作为请求数据
  6. 回调服务器:接收请求,处理响应,发送应答204
  7. 结束

调用转移

  1. 客户端: 发送请求
  2. 服务端: 发送应答302,提供转移的信息
  3. 客户端:接收应答,根据转移信息,重新发起调用

调用重试

  1. 客户端的请求,如果不能正确处理,可以提供同一个请求编号,进行重试
  2. 服务端对于重要的业务,可以通过对请求编号进行排重,避免重复调用

服务调用的编码传输

支持多种通信协议,根据不同的协议下采用对用的编码方式

服务调用采用弱类型约束,不要求通信过程中的数据严格符合设计要求,由数据使用方按需进行必要的数据类型转换。

如: 设计中Timeout为int类型,实际使用中,可以采用字符串"100"做为100进行传递。

相关内容主题