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

img

data 字段数据格式

(1) 如果管理后台的 body 位置并未设置任何参数,那么 SharkHttpEntity 中的 data 可以是任意格式的数据,例如:一个纯文本数据“这是 data”或一个 json 字符串;客户端发送什么数据服务端就会接收到什么数据。

(2)如果客户端在管理后台的 body 位置设置了参数,如下:

img

那么客户端 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;
}
Copyright © 2013-2023 Tencent Cloud. all right reserved,powered by GitbookUpdate Time 2023-08-31 14:46:07

results matching ""

    No results matching ""