API
IShark
IShark是Shark组件核心接口,IShark实例维护了与网关后端的连接通道,客户端与网关后端通信都通过IShark来进行。主要定义了以下几种发送请求方式:
HTTP API请求发送接口
WeakReference<SharkHandler> sendHttpEntity(SharkHttpEntity req, int flag, final ISendHttpEntityCallback callback, long timeoutMillis);
参数类型 | 参数 | 说明 |
---|---|---|
SharkHttpEntity | req | 请求包的结构,由调用者填写具体的内容然后传入 |
int | flag | (1)可设置回调在哪个线程 子线程回调:SharkCommonConst.CALLBACK_RUN_ON_THREAD UI线程回调:SharkCommonConst.CALLBACK_RUN_ON_UI (2)可设置请求发起的通道 默认值(优先TCP,TCP失败走HTTP):CHANNEL_DEFAULT HTTP通道:CHANNEL_ONLY_HTTP TCP通道:CHANNEL_ONLY_TCP |
ISendHttpEntityCallback | callback | 网络请求回调接口 |
long | timeoutMillis | 超时时间,单位毫秒,<=0使用默认超时时间10分钟。 |
RPC API请求发送接口,请求与响应数据均为序列化后的byte[]
WeakReference<SharkHandler> sendBytes(int cmdId,
byte[] reqData, int flag, ISendBytesCallback callback, long timeoutMillis);
参数类型 | 参数 | 说明 |
---|---|---|
int | cmdId | API命令字,参考API标识 |
byte[] | reqData | 请求包的二进制数据 |
int | flag | (1)可设置回调在哪个线程 子线程回调:SharkCommonConst.CALLBACK_RUN_ON_THREAD UI线程回调:SharkCommonConst.CALLBACK_RUN_ON_UI (2)可设置请求发起的通道 默认值(优先TCP,TCP失败走HTTP):CHANNEL_DEFAULT HTTP通道:CHANNEL_ONLY_HTTP TCP通道:CHANNEL_ONLY_TCP |
ISendBytesCallback | callback | 网络请求回调接口 |
long | timeoutMillis | 超时时间,单位毫秒,<=0使用默认超时时间10分钟。 |
RPC API请求发送接口,请求与响应结构为JceStruct子类
WeakReference<SharkHandler> sendJceStruct(int cmdId,
JceStruct req, JceStruct resp, int flag, ISendJceCallback callback, long timeoutMillis);
参数类型 | 参数 | 说明 |
---|---|---|
int | cmdId | API命令字, 参考API标识 |
JceStruct | req | 请求包jce结构体 |
JceStruct | resp | 服务器回包的结构,调用者new一个对象进来即可,框架为使协议可混淆且屏蔽解包细节,需要传入此参数。若传null表示不关心回包,此时框架不去解析回包数据 |
int | flag | (1)可设置回调在哪个线程 子线程回调:SharkCommonConst.CALLBACK_RUN_ON_THREAD UI线程回调:SharkCommonConst.CALLBACK_RUN_ON_UI (2)可设置请求发起的通道 默认值(优先TCP,TCP失败走HTTP):CHANNEL_DEFAULT HTTP通道:CHANNEL_ONLY_HTTP TCP通道:CHANNEL_ONLY_TCP |
ISendJceCallback | callback | 网络请求回调接口 |
long | timeoutMillis | 超时时间,单位毫秒,<=0使用默认超时时间10分钟。 |
JceStruct是RPC结构体基类,通过jce文件定义,可使用相应工具生成。
请求回调接口
ISendHttpEntityCallback
sendHttpEntity回调,转发请求结果给上层业务
public void onFinish(int seqNo, int cmdId, SharkRetCode retCode, SharkHttpEntity resp, SharkExtra sharkExtra)
参数类型 | 参数 | 说明 |
---|---|---|
int | seqNo | 后台回包的seq,一般不需关心 |
int | cmdId | 回包的cmdId,参考API标识 |
SharkRetCode | retCode | 错误码 |
SharkHttpEntity | resp | http请求的返回数据 |
SharkExtra | sharkExtra | 扩展数据,不需要关心 |
ISendBytesCallback
sendBytes回调,转发请求结果给上层业务
public void onFinish(int seqNo, int cmdId, SharkRetCode retCode, byte[] resp, SharkExtra sharkExtra)
参数类型 | 参数 | 说明 |
---|---|---|
int | seqNo | 后台回包的seq,一般不需关心 |
int | cmdId | 回包的cmdId |
SharkRetCode | retCode | 错误码 |
byte[] | resp | 响应数据 |
SharkExtra | sharkExtra | 扩展数据,不需要关心 |
ISendJceCallback
sendJceStruct回调,转发请求结果给上层业务
public void onFinish(int seqNo, int cmdId, SharkRetCode retCode, JceStruct resp, SharkExtra sharkExtra)
参数类型 | 参数 | 说明 |
---|---|---|
int | seqNo | 后台回包的seq,一般不需关心 |
int | cmdId | 回包的cmdId |
SharkRetCode | retCode | 错误码 |
JceStruct | resp | 响应数据jce结构体 |
SharkExtra | sharkExtra | 扩展数据,不需要关心 |
SharkHttpEntity
SharkHttpEntity 是HTTPAPI通用的请求和响应结构实体,封装了HTTP body/header/query/cookie等字段。移动网关后端收到客户端请求后,会将SharkHttpEntity中数据按照标准HTTP请求方式转发给业务服务。移动网关后端收到业务服务响应后,会再将响应数据填充到SharkHttpEntity中返回给客户端。
- SharkHttpEntity
参数类型 | 参数 | 说明 |
---|---|---|
byte [] | data | 请求的 body,需要 UTF-8,对应管理后台的 body 参数位置 |
SashimiHeader | params | 请求参数实体 |
- SashimiHeader
参数类型 | 参数 | 说明 |
---|---|---|
Map |
header | 请求 header 信息,对应管理后台 header 参数位置 |
Map |
cookies | 请求 cookie 信息 |
Map |
query | query 请求参数信息,对应管理后台 query 参数请求位置 |
String | apiName | API 唯一标示,在发起请求时 cmdId 与 apiName 只填写一个即可,参考API标识 |
结构体中的 data、header、query 与管理后台 API 中参数对应关系如下:
SashimiHeader | 管理后台参数位置 |
---|---|
data | body |
header | header |
query | query |
data 字段数据格式
(1) 如果管理后台的 body 位置并未设置任何参数,那么 SharkHttpEntity 中的 data 可以是任意格式的数据,例如:一个纯文本数据“这是 data”或一个 json 字符串;客户端发送什么数据服务端就会接收到什么数据。
(2)如果客户端在管理后台的 body 位置设置了参数,如下:
那么客户端 data 的字符串格式应该是如下内容:xiaoKey=value&xiaoKey1=value(value为参数的值)。
SharkRetCode
SharkRetCode由错误域和错误码两部分信息组成。错误码具体定义请参考错误码
参数类型 | 参数 | 说明 |
---|---|---|
String | errorDomain | 错误域,代表错误发生在哪一层次,如TMFSharkDataBusinessLayerErrorDomain,表示错误发生在后端业务层 |
int | errorCode | 具体错误码 |
SharkConfigInfo
Shark配置信息
public class SharkConfigInfo {
/**
* APP的产品id,由后台分配
*/
public int productId = 0;
/**
* customId与网关的版本相关,由后台分配,每布署一个mazu就会有一个customId
*/
public String customId = null;
/**
* 对称加密算法,默认用国密SM4,同时支持XXTea
*/
public int symmetricAlgorithm = SharkCommonConst.SYMMETRIC_ALGORITHM_SM4;
/**
* 非对称加密算法,默认用国密SM2,同时支持RSA
*/
public int asymmetricAlgorithm = SharkCommonConst.ASYMMETRIC_ALGORITHM_SM2;
/**
* 公钥的id,如果连的是TMF的后台,就是控制台生成的配置文件中的appKey
*/
public String keyId = null;
/**
* 公钥
* SM2
* 公钥格式:"d9140dd439ed059c554004dc94aca47ba66eebf45fb5bdb4cab3015143a4e67f435c7c4328b47fceb3b2873f75ece90e69f4f4eae95be0bdb3861ecccea2d488"
* RSA公钥格式:"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAlziWKDUmUdkDq9r6lYrmX6/h
* \nlSZWpCVyPTFzaTBy/X4Jrv9/nOFq/43QR5NSvXTHjYwI5phviybZBHDaXVv5OYrx
* \nyjEAj6koZEVz65ZV7Oy6vSaTsyq9HVogzU2Vm14qUfiZbEMMttNMc6As8kZtzqWs\nuaTrC6+ObA3AJS9r0QIDAQAB\n-----END
* PUBLIC KEY-----\n"
*/
public String pubKey = null;
/**
* TCP通道使用的host,可以是域名或ip
*/
public String tcpHost = null;
/**
* TCP通道使用的端口
*/
public int tcpPort = 0;
/**
* HTTP通道使用的url
*/
public String httpUrl = null;
/**
* 是否支持IPv6
* 如果supportIPv6设为true,则需要配置相关的参数
*/
public boolean supportIPv6 = false;
/**
* TCP通道使用的host(IPv6),可以是域名或ip
*/
public String tcpHostIPv6 = null;
/**
* TCP通道使用的端口(IPv6)
*/
public int tcpPortIPv6 = 0;
/**
* HTTP通道使用的url(IPv6)
*/
public String httpUrlIPv6 = null;
/**
* ssl证书绑定校验配置,支持在assets添加本地证书文件或者证书公钥sha256(base64)
*/
public SSLPinCfg httpSslPinCfg = null;
/**
* http通道 socket factory
*/
public SSLSocketFactory httpSSLSocketFactory = null;
/**
* http通道,URLConnection工厂,可用于将实现导出到okhttp
*/
public IUrlStreamHandler httpUrlStreamHandler = null;
/**
* http通道域名校验
*/
public HostnameVerifier httpHostnameVerifier = null;
/**
* tcp通道 socket factory
*/
public SSLSocketFactory tcpSSLSocketFactory = null;
}