플랫폼 기술-API 일괄 호출 소개


weight1

,

을 호출해야 하는 이유는 애플리케이션 성능을 향상하고 응답 속도를 높일 수 있습니다.

예를 들어 데이터를 제거하려면 7가지 HSF 서비스를 호출한 다음 페이지를 렌더링해야 합니다. 이 경우 페이지 응답 속도를 높이려면 7개의 HSF 호출을 동시에 시작하고 페이지를 렌더링하기 전에 모든 데이터가 반환될 때까지 기다리는 것을 고려할 수 있습니다. 그러나 이러한 프로그래밍 모델은 응답 시간이 길고 호출자에게 번거로운 호출이 발생합니다. TOP이 내부 직렬 모드를 통해 직접 7개의 HSF 호출을 완료하고 하나의 호출이 여러 데이터 결과를 반환하면 각 요청의 응답 시간을 크게 향상시킬 수 있습니다. . 일부 복잡한 API 호출(단일 RT 호출로 비즈니스 100MS에 도달할 수 있음)의 경우 좋은 최적화 효과가 있습니다

트래픽을 적게 사용하세요
                           단일 API 호출은 중복 시스템 또는 서비스를 전송합니다. 입력 매개변수(예: 기호, 메소드, 타임스탬프, 필드 및 기타 매개변수는 대부분의 경우 이러한 반복 매개변수가 요청 본문 공간의 대부분을 차지합니다. API 일괄 호출은 프로토콜 수준에서 이러한 매개변수를 결합하여 매개변수 재사용을 달성할 수 있습니다. 모바일 통화 및 서버의 높은 동시 통화에서 네트워크 사용량을 최적화하는 데 매우 유용합니다.

2, 일괄 호출 API 기능

  • 현재 모든 보안 및 비즈니스 기능 지원
  • 파일 업로드를 제외한 모든 API 무료 조합 호출 지원
  • 다중 세션 혼합 호출 지원
  • 통화 결과가 각각을 방해하지 않음 other
  • API 응답 순서는 요청 순서와 정확히 동일하므로 결과를 숫자로 정렬하거나 쿼리할 필요가 없습니다
  • 매우 빠른 경험, M 거래 API + N 상품 API 호출, RT는 약 1개의 거래 API 호출입니다(가정) 트랜잭션 API RT> 상용 API)
  • 서블릿, HSF, HTTP 하이브리드 완전 비동기식 호출 모드, 낮은 RT + 높은 RT 혼합 시나리오를 원활하게 지원, 서버 처리량 기능 향상
  • 공용 매개변수 및 메서드 이름을 병합할 수 있어 요청 메시지 간소화
  • 간단한 호출 프로토콜, SDK 없이 Batch API 호출을 빠르게 구현할 수 있습니다

3, 일괄 호출 기술 소개

3.1 프로토콜 내용

요청 URL:

http://gw.api. taobao.com/router /batch

POST:

http://gw.api.taobao.com/router/batch?sign=5336DB2C525E1A3AD1013BC82C4437B2×tamp=2016-01-05+10%3A15%3A 15&v=2 .0&app_key=4272&sign_method=hmac&format =json &session=6102b110f51625dcd2d1921ba80c6d2b43a2a5a37e7c7c73627811065
Content-Type :
text/plain;charset=UTF-8

PAYLOAD:

  • 페이로드는 from 형식으로 각 API를 전달하며 기본적으로 rn-S-rn으로 분할됩니다. ; 매개변수 값은 URL Encode여야 합니다
  • 사용자 정의 구분 기호 방법: httpHeader.put("top-api-separator","????")
  • 첫 번째 줄 #PUBLIC#부터 시작, 공개 매개변수 및 API 이름을 추출할 수 있으며 선택 사항입니다. 공개 매개변수를 추출할 필요가 없다면 #PUBLIC# 줄과 첫 번째 구분자를 동시에 제거하세요
  • 매개변수 우선순위: API 줄 매개변수 ===Override===> #PUBLIC# 매개변수 ===Override= ==> URL 매개변수
  • REST 서명과 유사한 서명 방법: hmac (기타 유사한) byte2hex (hmac(key1value1key2value2...payloadsecret))
  • 자리 표시자: API의 모든 매개변수를 #PUBLIC으로 추상화한다고 가정합니다. #area, 위에 표시된 대로 실제로 API임을 나타내기 위해 자리 표시자 N을 입력하세요.

3.2 Protocol Content-Response

Response: Case 1

{ "error_response ":{"code":25,"msg":"잘못된 서명","request_id":"16t6sm38r9709"}}

Response:情况2

{"time_get_response":{"time":"2016-01-05 10:53:02","request_id":"16t6sm2gxmm5q"}}
-S-
{"time_get_response":{"time":"2016-01-05 10:53:02","request_id":"16t6sm2gxmm5q"}}
-S-
{"trade_fullinfo_get_response":{"trade":{" 주문":{"주문":[{"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_oversold":false,"logistics_company":"电 子凭 证","num" :1,"num_iid":2100727710059,"oid":193923500416510,"order_from":"TAOBAO","결제":"11.00","pic_path":"http:/ /img04.daily.taobao.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"}]},"지불":"11.00" ,"receiver_address":"15988161275","receiver_mobile":"","receiver_name":" 不****","status":"TRADE_FINISHED","tid":193923500416510,"type":"eticket"} ,"request_id":"16t6sm2gxmm5q"}}
-S-
{"error_response":{"code":27,"msg":"잘못된 세션","sub_code":"invalid-sessionkey","request_id": "16t6sm2gxmm5q"}}
  • Response, 사례 1: 응답 메시지에는 서명과 같은 결과가 하나만 있습니다. appkey는 존재하지 않습니다. 예를 들어 한 번만 서명하면 API 서명 오류가 발생합니다. API에는 서명 오류가 있습니다.
  • Response, 사례 2: 응답 메시지와 요청 메시지의 API 개수는 동일하며, 응답 순서는 요청 순서와 일치합니다. 예를 들어 15개의 요청을 제출하면 10개의 성공, 3개의 흐름 제어 및 2개의 HSF 서비스 공급자 예외가 있을 수 있지만 응답 본문에는 여전히 15개의 요청 응답이 있습니다.
  • 사용자 정의 구분자 모드: 기본 구분자는 rn-S-rn입니다. 사용자 정의 모드에서 요청을 제출할 때 httpHeader.put("top-api-separator","????")를 사용하세요. 본문 구분 기호 일관성

4 , SDK 사용 방법

4.1 클라이언트 생성

BatchTaobaoClient 클라이언트 = 새로운 BatchTaobaoClient (“http://gw.api.taobao.com router/batch
” , " appkey", "secret");} //참고: 이 방법을 사용하려면 최신 SDK를 다운로드해야 합니다. 이전 SDK는 아직 일괄 호출 기능을 지원하지 않습니다

4.2 BatchRequest 만들기

TaobaoBatchRequest 배치 요청 = 새로운 TaobaoBatchRequest();

4.3 添加请求API

batchRequest.addRequest(timeGetRequest1)
                               .addRequest(timeGetRequest2)
                                  .addRequest(timeGetRequest3)
                                   .addRequest(timeGetRequest4)
                                .addRequest(fullinfosRequest1)
                                  .addRequest(fullinfosRequest2)
                                .addRequest( fullinfosRequest3);

4.4 提交请求

TaobaoBatchResponse       response = client.execute(batchRequest);
 

4.5 遍历结果

if (response.isSuccess()) {
                  for (int i = 0; i <response.getResponseList().size(); i++) 
                     println("body:" + response.getResponseList().get(i).getBody());
             }
询4.6 무작위 쿼리 결과

(response.isSuccess ()) {
timegetResponse resp1 = response.getResponse (TimegetRequest1) )
Println ("Server Time:"+Resp1.getTime ());

참고: SDK를 사용하여 일괄 API 호출 기능을 구현하려면 최신 SDK, SDK 다운로드 및 사용 포인트를 여기에서 다운로드해야 합니다.

5. 일반적인 사용 시나리오의 예

주문 세부 정보를 얻기 위한 인터페이스 호출을 예로 들어 보겠습니다. 원래는 판매자의 여러 주문 세부 정보를 쿼리하려면 일괄 모드를 사용하여 호출하면 여러 요청이 반복적으로 이루어져야 합니다. , 하나의 요청으로 여러 결과를 반환할 수 있으므로 API 호출의 효율성이 크게 향상될 수 있습니다. 다음은 일반적인 사용 시나리오(java)에서 SDK 호출의 예입니다.

5.1. 단일 판매자의 여러 주문 세부정보 쿼리

BatchTaobaoClient client = new BatchTaobaoClient ("http://gw.api.taobao.com/router/batch?","test","test"); U TradeFullinfogetrequest Req1 = 새로운 TradeFullinfogetRequest();
Req1.Settid(666666666666661L); EFULLINFOGETREQUEST Req2 = 새로운 TradeFullinfogetRequest()
Req2.SetFields("TID"); >      사용   사용 사용 사용 사용 사용 통해 사용 통과 통과 통과 통과 통과 통과 통과 통과 통과 out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out 밖으로 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 so so so so습니다. 그래서 그래서 그래서... "test") //test는 판매자의 세션 키를 나타냅니다



5.2. 여러 판매자의 여러 주문 세부정보 쿼리

BatchTaobaoClient 클라이언트 = new BatchTaobaoClient ("http://gw.api.taobao.com/router/batch?","test","test"); TradeFullinfogetrequest Req1 = 새로운 TradeFullinfogetRequest ();
Req1.Settid (66666666666661L); U TradeFullInfogetrequest Req2 = 새로운 TradeFullInfogetRequest (); 디 ( 6666666666662L); // 판매자 A의 주문 2
tradeFullinfogetRequest ();
Req3.SetFields ("T id "); // 판매자 b의 주문 1
req3.setBatchApi 세션 ("testtest"); //가맹점 b의 세션키

TaobaoBatchRequest req = new TaobaoBatchRequest();       req.addRequest(req2);       
       req.addRequest(req3);       
         
     TaobaoBatchResponse rsp = client.execute(req,       "테스트");       //가족의 세션키

5.3. 여러 판매자 주문 및 제품 세부정보 조회

BatchTaobaoClient 클라이언트 = new BatchTaobaoClient ("http://gw.api.taobao.com/router/batch?","test","test"); TradeFullinfogetrequest Req1 = 새 TradeFullinfogetRequest();
Req1.Settid(66666666666661L); U TradeFullInfogetrequest Req2 = 새 TradeFullInfogetRequest(); 요청();                                                                                           | ("); B 가맹점의 제품 1                                                                                                 >       req.addRequest(req2);       
       req.addRequest(req3);       
         
     TaobaoBatchResponse rsp = client.execute(req,       "테스트");       //가족의 세션키

 

FAQ

测试环境下与正式环境下的API调用量有限制吗?