Envoyer plusieurs demandes à la fois

Vous pouvez utiliser des requêtes par lot avec l'API Merchant pour envoyer plusieurs requêtes HTTP dans un seul appel d'API.

Si vous préférez effectuer le traitement par lot avec des bibliothèques clientes, consultez Réfactorer le code pour les requêtes simultanées.

Une requête par lot est une requête HTTP standard unique qui comprend plusieurs appels d'API et utilise le type de contenu multipart/mixed. La requête HTTP principale est composée de plusieurs parties contenant chacune une requête HTTP imbriquée.

Vous pouvez envoyer la requête par lot à l'batchPath spécifiée pour l'API. La batchPath de la version bêta de l'API Merchant est batch/{sub-api}/v1beta. Vous trouverez les batchPath des autres API dans leurs documents de découverte. Voici quelques exemples de raisons de regrouper vos requêtes:

  • Vous venez de commencer à utiliser l'API et vous avez beaucoup de données à importer.
  • Un utilisateur a modifié des données lorsque votre application était hors connexion. Celle-ci doit donc synchroniser ses données locales avec le serveur.

Écrire une requête par lot

Voici un exemple de requête par lot de l'API Merchant. Cette requête combine une requête GET pour récupérer l'inventaire régional d'un produit et une requête d'insertion pour mettre à jour l'inventaire régional du même produit. Vous devez respecter exactement le format de l'exemple:

  1. Utilisez https://merchantapi.googleapis.com/batch/{sub-api}/v1beta comme URL de base.
  2. Spécifiez une limite pour séparer chaque requête imbriquée, par exemple: -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
  3. Séparez chaque requête imbriquée par la limite, par exemple --batch_inventory.
  4. Incluez Content-Type: application/http au début de chaque requête imbriquée.
  5. Utilisez Content-ID pour étiqueter chaque requête imbriquée avec votre propre ID. Exemple : Content-ID: <get:online:en:US:123456>.
  6. Incluez une ligne vide entre l'en-tête, le chemin et le corps de chaque requête imbriquée. Si la requête imbriquée ne comporte pas de corps, laissez une ligne vide avant la limite suivante.
  7. N'incluez pas l'URL de base dans chaque requête imbriquée.
  8. Terminez la requête principale par une limite finale, par exemple --batch_inventory–.
curl https://merchantapi.googleapis.com/batch/inventories/v1beta \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
--data '
--batch_inventory
Content-Type: application/http
Content-ID: <get:online:en:US:123456>
GET /inventories/v1beta/accounts/123/products/online:en:US:123456/regionalInventories
--batch_inventory
Content-Type: application/http
Content-ID: <post:online:en:US:123456>
POST /inventories/v1beta/accounts/123/products/online:en:US:123456/regionalInventories:insert
{
   "region: "123456",
    "price": {
        "amountMicros": "100000000",
        "currencyCode": "USD"
    }
}
--batch_inventory--
'

Remarques concernant la commande

  • Les requêtes peuvent ne pas être exécutées dans l'ordre que vous spécifiez.
  • Utilisez Content-ID pour identifier les requêtes individuelles.
  • Si vous devez exécuter vos appels dans un ordre donné, envoyez-les séparément et attendez la réponse à la première requête avant d'envoyer la suivante.

Lire une réponse par lot

Voici un exemple de réponse HTTP par lot. L'ordre des réponses peut ne pas correspondre à celui des requêtes. Utilisez Content-ID pour identifier la requête imbriquée à laquelle chaque réponse imbriquée appartient. Dans les réponses, l'API ajoute un préfixe response- à chaque Content-ID.

--batch_inventory
Content-Type: application/http
Content-ID: <response-get:online:en:US:123456>
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer
{}
--batch_inventory
Content-Type: application/http
Content-ID: <response-post:online:en:US:123456>
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer
{
  "name": "accounts/123/products/online:en:US:123456/regionalInventories/123456",
  "region": "123456",
  "price": {
    "amountMicros": "100000000",
    "currencyCode": "USD"
  }
}
--batch_inventory--
'