使用

获取内置IShark实例

移动网关核心方法都在IShark接口中,发送API请求前需要先获取IShark实例,方法如下:

IShark shark = TMFBase.getShark();

发起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分钟。

该接口请求与响应实体都使用SharkHttpEntity为载体,封装了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 唯一标示,请参见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为参数的值)。

  • 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 扩展数据,不需要关心

请求示例

private void testShark() {
    // 创建请求实体类
    SharkHttpEntity req = new SharkHttpEntity();
    // 根据实际情况设置data, 对应http请求post body (非必须)
    String data = "this is post body!";
    req.data = data.getBytes(StandardCharsets.UTF_8);

    // 创建Http请求参数实体
    req.params = new SashimiHeader();
    // 根据实际情况设置apiName, 是控制台API标识 (必须)
    req.params.apiName = "TMFTest";
    // 根据实际情况设置请求header, 对应http请求header (非必须)
    req.params.header = new HashMap<>();
    req.params.header.put("h1", "h1Value"); 
    // 根据实际情况设置请求query, 对应url query (非必须)
    req.params.query = new HashMap<>();
    req.params.query.put("q1", "q1Value");
    // 根据实际情况设置请求cookie, 对应http请求cookie (非必须)
    req.params.query = new HashMap<>();
    req.params.query.put("c1", "c1Value");

    // 获取Shark实例
    IShark shark = TMFBase.getShark();
    // 发送请求
    shark.sendHttpEntity(req, SharkCommonConst.DEFAULT, (seqNo, cmdId, retCode, resp, sharkExtra) -> {
        if (retCode.isAccessLayerOk()
                && retCode.errorCode == ESharkCode.ERR_NONE
                && resp != null) {
            //成功,处理请求数据
            Log.d("TMFDemo", "resp = "
                    + (resp.data != null ? new String(resp.data, StandardCharsets.UTF_8) : "null"));
        } else {
            //失败, 根据错误码做相应处理
            Log.d("TMFDemo", "retCode = " + retCode);
        }
    }, 100000);
}

上面示例代码访问了创建虚拟API辅助接入测试中创建的虚拟API TMFTest, 运行后得到如下结果证明接入成功。

注意注意:如果在管理后台的 API 配置中设置了参数(如下图),那么在 SharkHttpEntity 实体中 data、header、query 等对应项也需要设置对应参数,否则请求失败。

img

img

获取 GUID

GUID是TMF生成的app级别移动设备标识,集成测试如果能顺利完成,那么就可以通过Shark获取到 GUID。示例代码如下:

TMFBase.getShark().getGuidAsyn(new IGuidCallback() {
            @Override
            public void onCallback(int retCode, String guid) {
                Log.i(TAG,"guid = " + guid + ", retCode = " + retCode);
            }
        });
Copyright © 2013-2023 Tencent Cloud. all right reserved,powered by GitbookUpdate Time 2023-08-31 14:46:07

results matching ""

    No results matching ""