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,等待应答
- 服务端: 接收请求1,处理请求1,发送应答100
- 客户端:接收应答,获取处理信息用于后续上下文
- 客户端: 发送请求2,等待应答
- 服务端: 接收请求2,处理请求2,发送应答100
- 客户端:接收应答
- 不断重复4-6,直到事务所有调用都完成,最后服务端应答响应
- 结束
异步调用轮询响应
- 客户端: 发送请求,等待应答
- 服务端: 接收请求,异步处理请求,发送应答202
- 客户端:接收应答,获取处理信息用于后续上下文
- 客户端: 等待一段时间,发送查询结果请求,等待应答
- 服务端: 接收查询结果请求,检查处理结果——如果还在执行,发送应答202;否则,发送应答响应
- 客户端:接收应答,检查状态
- 不断重复4-6,直到获得响应
- 结束
异步调用推送响应
- 客户端: 发送请求,等待应答
- 服务端: 接收请求,异步处理请求,发送应答202
- 客户端:接收应答,等待服务推送响应。等待超时时候,向用户应答408,清理会话(如关闭连接)
- 服务端: 请求处理完成后,发送应答响应
- 客户端:接收响应
- 结束
异步调用回调响应
- 客户端: 发送请求,上下文提供回调信息,等待应答
- 服务端: 接收请求,异步处理请求,发送应答202
- 客户端:接收应答,获取处理信息用于后续回调
- 客户端:关闭
- 服务端: 请求处理完成后,根据回调信息发起请求调用,把响应数据作为请求数据
- 回调服务器:接收请求,处理响应,发送应答204
- 结束
注册回调
- 客户端: 发送请求,上下文提供回调信息,等待应答
- 服务端: 接收请求,处理请求,并记录回调信息,发送应答响应
- 客户端:接收应答
- 客户端:关闭
- 服务端: 在满足回调条件时候,根据回调信息发起请求调用,把响应数据作为请求数据
- 回调服务器:接收请求,处理响应,发送应答204
- 结束
调用转移
- 客户端: 发送请求
- 服务端: 发送应答302,提供转移的信息
- 客户端:接收应答,根据转移信息,重新发起调用
调用重试
- 客户端的请求,如果不能正确处理,可以提供同一个请求编号,进行重试
- 服务端对于重要的业务,可以通过对请求编号进行排重,避免重复调用
服务调用的编码传输
支持多种通信协议,根据不同的协议下采用对用的编码方式
服务调用采用弱类型约束,不要求通信过程中的数据严格符合设计要求,由数据使用方按需进行必要的数据类型转换。
如: 设计中Timeout为int类型,实际使用中,可以采用字符串"100"做为100进行传递。