プラットフォーム テクノロジー - API バッチ呼び出しの概要
1、バッチ呼び出しを行う理由
によりアプリケーションのパフォーマンスが向上し、応答が高速化できる たとえば、A ページのニーズ7 つの異なる HSF サービスを呼び出してデータをプルし、ページをレンダリングします。この場合、ページの応答を高速化したい場合は、7 つの HSF 呼び出しを同時に開始し、すべてのデータが返されるまで待ってからページをレンダリングすることを検討できます。ただし、このようなプログラミング モデルでは、応答時間が長くなり、呼び出し元にとって煩わしい呼び出しが発生します。TOP が内部シリアル モードを通じて 7 つの HSF 呼び出しを直接完了し、1 つの呼び出しで複数のデータ結果が返される場合、各リクエストの応答時間を大幅に改善できます。 。一部の複雑な API 呼び出し (1 回の RT 呼び出しが 100MS ビジネスに達する可能性がある) では、良好な最適化効果が得られます。
トラフィックの削減 各 API 呼び出しは、繰り返しシステムまたはビジネス入力パラメーターを渡します。サイン、メソッド、タイムスタンプ、フィールド、その他のパラメーターなど: 多くの場合、これらの繰り返しパラメーターがリクエスト本文のスペースの大部分を占めます。 API バッチ呼び出しでは、これらのパラメーターをプロトコル レベルで結合して、パラメーターの再利用を実現できます。これは、モバイル通話やサーバー上での同時通話のネットワーク使用量を最適化するのに非常に役立ちます。
2、バッチ呼び出し API 機能
- 現在のセキュリティ機能とビジネス機能をすべてサポート
- ファイル アップロード API を除くすべてを無料でサポート組み合わせ呼び出し
- マルチセッション混合呼び出しをサポート
- 呼び出し結果は互いに干渉しません
- API 応答の順序はリクエストの順序とまったく同じであり、必要はありません結果を番号でソートまたはクエリするには
- 非常に高速なエクスペリエンス、M 回のトランザクション API と N 回の商品 API 呼び出し、RT は約 1 回のトランザクション API 呼び出しです (トランザクション API RT>商品 API と仮定)
- サーブレット、HSF、HTTP 混合の完全非同期呼び出しモードは、低 RT と高 RT の混合シナリオを安定してサポートし、サーバー スループット能力を向上させます
- パブリック パラメーターとメソッド名をマージしてリクエスト メッセージを合理化できます
- シンプルな呼び出しプロトコル、SDK は不要バッチ API 呼び出しを迅速に実装
3、バッチ呼び出しテクノロジーの概要
3.1 契約内容
リクエスト URL:
http://gw.api.taabao.com/router/batchPOST:
ペイロード :
#ペイロードは各 API を from の形式で運びます。デフォルトでは \r\n-S-\r\n で分割されます。パラメータ値は URL エンコードである必要があります- カスタム区切りメソッド: httpHeader.put("top-api-separator","????")
- 最初の行は #PUBLIC# で始まり、パブリック パラメーターと API 名を抽出できます。はオプションです。パブリック パラメータを抽出する必要がない場合は、#PUBLIC# 行と最初の区切り文字を削除します
- パラメータの優先順位: API 行パラメータ ===Override===> #PUBLIC# パラメータ ===Override= ==> URL パラメータ
- REST 署名と同様の署名メソッド: hmac (その他の同様の) byte2hex (hmac(key1value1key2value2... payload
- secret))Accountプレースホルダー: API のすべてのパラメーターを #PUBLIC# 領域に抽象化したと仮定し、プレースホルダー N を入力して、実際に API であることを示します。上記のように
プロトコルの内容-応答
応答: ケース 1
Response:状況2
-S-
{"time_get_response":{"time":"2016-01-05 10:53:02","request_id ":"16t6sm2gxmm5q"}}
-S-
{"trade_fullinfo_get_response":{"trade":{"orders":{"order":[{"adjust_fee":"0.00","buyer_rate": false,"cid":50069506,"consign_time":"2015-12-03 14:01:07","discount_fee":"0.00","end_time":"2015-12-03 16:18:19", "invoice_no":"0000","is_over sold":false,"logistics_company":"电 子凭 证","num":1,"num_iid":2100727710059,"oid":193923500416510,"order_from":"TAOBAO" ,"payment":"11.00","pic_path":"http:\/ \/img04.daily.taabao.net\/bao\/uploaded\/i4 \/TB1EG6SXXXXXXaBXXXXXXXXXXXX_!!0- item_pic.jpg","price ":"11.00","refund_status":"NO_REFUND","seller_rate":false,"seller_type":"C","shipping_type":"virtual","snapshot_url":"d:193923500416510_1","status": "TRADE_FINISHED","title":" 测试発行布收费课 2015123","total_fee":"11.00"}]},"payment":"11.00","receiver_address":"15988161275","receiver_mobile":"", "receiver_name":" 不****","status":"TRADE_FINISHED","tid":193923500416510,"type":"ticket"},"request_id":"16t6sm2gxmm5q"}}
-S-
{"error_response":{"code":27,"msg":"無効なセッション","sub_code":"invalid-sessionkey","request_id":"16t6sm2gxmm5q"}}
- 応答、ケース 1: 応答メッセージには結果が 1 つだけあります。たとえば、署名、アプリキーが存在しないなどです。これらは共通の特性です。たとえば、私たちだけが一度署名すると、API 署名エラーはすべての API が正しく署名されないことを意味します。
- レスポンス、ケース 2: レスポンス メッセージとリクエスト メッセージの API の数は同じであり、レスポンスの順序はリクエストの順序と一致します。 。たとえば、15 件のリクエストを送信した場合、10 件の成功、3 件のフロー制御、および 2 件の HSF サービス プロバイダー例外が発生する可能性がありますが、応答本文には 15 件のリクエスト応答が含まれます。
- カスタム区切り文字モード: デフォルトの区切り文字は \r\n-S-\r\n です。カスタム モードでリクエストを送信する場合は、httpHeader.put("top-api-separator","?? ??) を使用します。 ”); リクエスト本文とレスポンス本文の区切り文字は一貫している必要があります
4 、SDK の使用法
4.1 クライアントの作成
", "appkey","secret");} / /Note : この方法を使用するには、最新の SDK をダウンロードする必要があります。古い SDK はまだバッチ呼び出し機能をサポートしていません。
4.2 BatchRequest の作成
4.3 追加请求API
.addRequest(timeGetRequest2)
.addRequest(timeGetRequest3)
.addRequest( timeGetRequest4)
.addRequest(fullinfosRequest1)
.addRequest(fullinfosRequest2)
.addRequest(fullinfosRequest3);
4.4 提交要求
4.5 遍历結果
for (int i = 0; i < response.getResponseList().size(); i )
println("body:" response.getResponseList( ).get(i).getBody());
}
4.6 ランダムなクエリ結果
TradeFullinfoGetResponse rep2 = 応答 se.getResponse (fullinfosRequest3);
}
注: SDK を使用してバッチ API 呼び出し機能を実装するには、最新の SDK をダウンロードする必要があります。SDK のダウンロードと使用ポイントは こちら です。
5. 一般的な使用シナリオの例
注文詳細を取得するためのインターフェイスの呼び出しを例にとりますが、本来、マーチャントの複数の注文詳細を照会するには、複数のリクエストを繰り返し行う必要があります。バッチ メソッド Call を使用すると、1 つのリクエストで複数の結果を返すことができるようになり、API 呼び出しの効率が大幅に向上します。以下は、一般的な使用シナリオ (Java) での SDK 呼び出しの例です。
5.1. 単一の販売者からの複数の注文の詳細をクエリする
req.addRequest(req1); req.addRequest(req2); q, "test"); //test は販売者のセッションキーを表します
5.2. 複数の販売者からの複数の注文の詳細をクエリする
req1.setTid(6666666666661L); // 販売者 a から 1 を注文
TradeFullinfoGetRequest req2 = new TradeFullinfoGetRequest();
req 2.setFields( "tid") ;
req2.setTid(6666666666662L); //販売者 a の注文 2
TradeFullInfogetrequest Req3 = New TradeFullInfogetRequest ();
Req3.SetFields ("TID");
Req3.Settid (8888888888881L); // ビジネス B 注文 1
REQ3.SetBatchapisession ("TestTest "); // 販売者 b のセッションキー
TaabaoBatchRequest req = new TaabaoBatchRequest();
req.addRequest(req1);
req.addRequest(req2);
req.addRequest(req3);
TaabaoBatchResponse rsp = client.execute(req, "test"); //商家aのセッションキー
5.3. 複数の販売者の注文と製品の詳細をクエリする
req1.setTid(6666666666661L); // 販売者 a から 1 を注文
TradeFullinfoGetRequest req2 = new TradeFullinfoGetRequest();
req 2.setFields( "tid") ;
req2.setTid(6666666666662L); //販売者aの注文2
ItemSellerGetRequest req3 = new itemSellerGetRequest();
req3.setFields("num_iid");
req3.setNumIid (8888888881L) ; // 販売者 b の商品 1
req3.setBatchApiSession( "testtest "); // 販売者 b のセッションキー
TaabaoBatchRequest req = new TaabaoBatchRequest();
req.addRequest(req1);
req.addRequest(req2);
req.addRequest(req3);
TaabaoBatchResponse rsp = client.execute(req, "test"); //商家aのセッションキー
FAQ
测试环境下与正式环境下的API调用量有限制吗?