Envoyer plusieurs demandes à la fois

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

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. Dans la requête HTTP principale, chaque partie contient une requête HTTP imbriquée.

Vous pouvez envoyer la requête par lot au batchPath spécifié pour l'API. Le batchPath pour la version bêta de l'API Merchant Center est batch/{sub-api}/v1beta . Vous trouverez les batchPath pour d'autres API dans leurs documents de découverte.

Voici quelques exemples de cas où vous pouvez regrouper vos requêtes par lot:

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

Si vous avez des questions sur le traitement par lot HTTP ou si vous souhaitez demander l'envoi de requêtes par lot avec nos bibliothèques clientes, envoyez-nous vos commentaires.

Écrire une requête par lot

Voici un exemple de requête groupée de l'API Merchant Center. 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 en magasin d'un même produit.

Vous devez suivre 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. (Facultatif) Utilisez Content-ID pour ajouter un libellé à 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 n'a 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 individuelle.

  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--
'

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 à l'ordre des requêtes. Utilisez Content-ID pour identifier la requête imbriquée à laquelle appartient chaque réponse imbriquée. Dans les réponses, chaque Content-ID est précédé de response-.

--batch_YCE-jYH0pmDrBIHeHhltcpXIMpk0VTzQ
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_YCE-jYH0pmDrBIHeHhltcpXIMpk0VTzQ
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_YCE-jYH0pmDrBIHeHhltcpXIMpk0VTzQ--
'