Technologie de plate-forme – Introduction aux appels par lots d'API
量1
, pourquoi est-il nécessaire d'appeler
peut améliorer les performances de l'application, une réponse plus rapide Par exemple, vous devez appeler 7 services HSF différents pour supprimer des données, puis afficher la page. Dans ce cas, si vous souhaitez accélérer la réponse de la page, vous pouvez envisager de lancer 7 appels HSF simultanément et d'attendre que toutes les données soient renvoyées avant de restituer la page. Cependant, un tel modèle de programmation aura un temps de réponse long et des appels fastidieux pour l'appelant. Si TOP effectue 7 appels HSF directement via le mode série interne et qu'un appel renvoie plusieurs résultats de données, il peut alors considérablement améliorer le temps de réponse de chaque demande. . Pour certains appels d'API complexes (un seul appel RT peut atteindre 100 MS d'activité), il y aura alors un bon effet d'optimisation
Utilisez moins de trafic
Un seul appel d'API transférera des systèmes ou des services en double. Paramètres d'entrée, tels que : signe, méthode, horodatage, champs et autres paramètres. Dans de nombreux cas, ces paramètres répétés occupent la majeure partie de l'espace dans le corps de la requête. Les appels par lots d'API peuvent combiner ces paramètres au niveau du protocole pour réaliser la réutilisation des paramètres. Il est très utile pour optimiser l’utilisation du réseau lors des appels mobiles et des appels simultanés élevés sur le serveur.
2, fonctionnalité API d'appel par lots
- Prend en charge toutes les fonctionnalités de sécurité et commerciales actuelles
- Prend en charge tous les appels combinés gratuits API, à l'exception du téléchargement de fichiers
- Prend en charge les appels mixtes multi-sessions
- Les résultats des appels n'interfèrent pas avec chacun autre
- La séquence de réponse de l'API est exactement la même que la séquence de demande, pas besoin de trier ou d'interroger les résultats par numéro
- Expérience extrêmement rapide, M transaction API + N appels API de base, RT correspond à environ 1 appel API de transaction (en supposant API de transaction RT> API de base)
- Servlet, HSF, mode d'appel hybride HTTP entièrement asynchrone, prend en charge en douceur les scénarios mixtes faible RT + haute RT, améliore la capacité de débit du serveur
- Les paramètres publics et les noms de méthodes peuvent être fusionnés, rationalisant les messages de demande
- Protocole d'appel simple, les appels d'API par lots peuvent être rapidement implémentés sans SDK
3, Introduction à la technologie d'appel par lots
3.1 Contenu du protocole
URL de demande :
http://gw.api. taobao.com/router /batchPOST :
PAYLOAD :
- La charge utile transporte chaque API sous la forme de from et est divisée par rn-S-rn par défaut ; Les valeurs des paramètres doivent être URL Encode
- Méthode de séparation personnalisée : httpHeader.put("top-api-separator","????")
- À partir de la première ligne #PUBLIC#, paramètres publics et API les noms peuvent être extraits, c’est facultatif. Si vous n'avez pas besoin d'extraire les paramètres publics, supprimez la ligne #PUBLIC# et le premier délimiteur en même temps
- Priorité des paramètres : Paramètres de la ligne API ===Override===> ==> Paramètres d'URL
- Méthode de signature, similaire à la signature REST : hmac (autre similaire) byte2hex (hmac(key1value1key2value2...payloadsecret))
- Placeholder : Supposons que vous résumiez tous les paramètres d'une API dans #PUBLIC #area, veuillez mettre un espace réservé N pour indiquer que je suis en fait une API comme indiqué ci-dessus
3.2 Protocol Content-Response
Response : Cas 1
Réponse:情况2
-S-
{"time_get_response":{"time":"2016-01-05 10:53:02","request_id":"16t6sm2gxmm5q"}}
-S-
{"trade_fullinfo_get_response":{"trade":{" commandes":{"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_oversold":false,"logistics_company":"电 子凭 证","num" :1,"num_iid":2100727710059,"oid":193923500416510,"order_from":"TAOBAO","payment":"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":"virtuel ","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": "eticket"} ,"request_id":"16t6sm2gxmm5q"}}
-S-
{"error_response":{"code":27,"msg":"Session invalide","sub_code":"invalid-sessionkey","request_id": "16t6sm2gxmm5q"}}
- Réponse, cas 1 : Le message de réponse n'a qu'un seul résultat ; tel que la signature, la clé d'application n'existe pas ; ce sont des caractéristiques courantes, par exemple, si nous ne signons qu'une seule fois, alors une erreur de signature API signifie que tous Les API auront des erreurs de signature.
- Réponse, cas 2 : Le nombre d'API dans le message de réponse et le message de demande sont les mêmes, et l'ordre de réponse sera cohérent avec l'ordre de la demande. Par exemple, si vous soumettez 15 demandes, il peut y avoir 10 réussites, 3 contrôles de flux et 2 exceptions de fournisseur de services HSF, mais notre corps de réponse aura toujours 15 réponses de demande ;
- Mode séparateur personnalisé : le séparateur par défaut est rn-S-rn ; lors de la soumission d'une requête en mode personnalisé, utilisez httpHeader.put("top-api-separator","????"); séparateur de corps cohérent
4 , méthode d'utilisation du SDK
4.1 Créer un client
", " appkey", "secret");} //Remarque : Pour utiliser cette méthode, vous devez télécharger le dernier SDK. L'ancien SDK ne prend pas encore en charge la fonction d'appel par lots
4.2 Créer BatchRequest
4.3 API
.addRequest(timeGetRequest2)
.addRequest(timeGetRequest3)
.addRequest(timeGetRequest4)
.addRequest(fullinfosRequest1)
.addRequest(fullinfosRequest2)
.addRequest( fullinfosRequest3);
4.4遍历结果
Println ("Server Time:"+Resp1. getTime ());
Remarque : Pour utiliser SDK pour implémenter la fonction d'appel d'API par lots, vous devez télécharger le dernier SDK, le téléchargement du SDK et le point d'utilisation ici.
5. Exemples de scénarios d'utilisation typiques
Prenons comme exemple l'appel de l'interface pour obtenir les détails d'une commande. À l'origine, pour interroger plusieurs détails de commande d'un commerçant, plusieurs demandes doivent désormais être effectuées à plusieurs reprises si vous utilisez le mode batch pour appeler ; , une requête peut renvoyer Plusieurs résultats peuvent grandement améliorer l'efficacité des appels d'API. Voici un exemple d'appel de SDK dans des scénarios d'utilisation courants (Java) :
5.1. Interroger plusieurs détails de commande auprès d'un seul marchand
Req1.SetFields ("TID");
Req1.Settid (66666666666661L); EFULLINFOGETREQUEST Req2 = Nouveau TradeFullinfogetRequest (); utiliser utiliser utiliser utiliser utiliser utiliser à travers utiliser à travers à travers à travers à travers à travers à travers à travers dehors dehors dehors hors dehors hors dehors dehors nettoyer hors de' être fini d'être re''s fini alors donc donc-- donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc donc... donc donc donc donc donc donc donc donc donc donc... "test"); //test représente la clé de session du commerçant
5.2. Interroger plusieurs détails de commande auprès de plusieurs marchands
Req1.SetFields ("TID");
Req1.Settid (66666666666661L); U TradeFullInfogetrequest Req2 = Nouveau TradeFullInfogetRequest (); 66666666666662L); // La commande du commerçant A 2
tradeFullinfogetrequest Req3 = New TradeFullinfogetRequest ();
Req3.SetFields ("T id "); ("testtest"); //sessionkey du marchand b
TaobaoBatchRequest req = new TaobaoBatchRequest(); req.addRequest(req2);
req.addRequest(req3);
TaobaoBatchResponse rsp = client.execute(req, "test"); //商家a的sessionkey
5.3. Interroger plusieurs commandes marchandes et détails du produit
Req1.SetFields ("TID");
Req1.Settid (66666666666661L); U TradeFullInfogetrequest Req2 = Nouveau TradeFullInfogetRequest (); (); emSellerGetRequest ("); Produit 1 du marchand b nouveau TaobaoBatchRequest(); req.addRequest(req2);
req.addRequest(req3);
TaobaoBatchResponse rsp = client.execute(req, "test"); //商家a的sessionkey
FAQ
测试环境下与正式环境下的API调用量有限制吗?