Invia più richieste contemporaneamente

Puoi utilizzare le richieste batch con l'API Merchant per inviare più richieste HTTP in una singola chiamata API.

Se preferisci eseguire il batching con le librerie client, consulta Eseguire il refactoring del codice per le richieste contemporaneamente.

Una richiesta batch è una singola richiesta HTTP standard contenente più chiamate API, che utilizza il tipo di contenuto multipart/mixed. All'interno della richiesta HTTP principale, ogni parte contiene una richiesta HTTP nidificata.

Puoi inviare la richiesta collettiva all'batchPath specificato per l'API. Il batchPath per la versione beta dell'API Merchant è batch/{sub-api}/v1beta. Puoi trovare il batchPath per altre API nei relativi documenti di rilevamento. Ecco alcuni esempi di motivi per raggruppare le richieste:

  • Hai appena iniziato a utilizzare l'API e hai molti dati da caricare.
  • Un utente ha apportato modifiche ai dati mentre l'applicazione era offline e l'applicazione deve sincronizzare i dati locali con il server.

L'invio di più richieste in parallelo ti evita di attendere la richiesta secondaria più lenta, il che migliora i tempi di risposta del server e riduce la latenza.

Scrivi una richiesta batch

Ecco un esempio di richiesta batch dell'API Merchant. Questa richiesta combina una richiesta GET per recuperare l'inventario regionale di un prodotto e una richiesta INSERT per aggiornare l'inventario regionale dello stesso prodotto. Devi seguire esattamente il formato dell'esempio:

  1. Utilizza https://merchantapi.googleapis.com/batch/{sub-api}/v1beta come URL di base.
  2. Specifica un confine per separare ogni richiesta nidificata, ad esempio: -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
  3. Separa ogni richiesta nidificata con il confine, ad esempio --batch_inventory.
  4. Includi Content-Type: application/http all'inizio di ogni richiesta nidificata.
  5. Utilizza Content-ID per etichettare ogni richiesta nidificata con il tuo ID. Ad esempio: Content-ID: <get:online:en:US:123456>.
  6. Includi una riga vuota tra l'intestazione, il percorso e il corpo di ogni richiesta nidificata. Se la richiesta nidificata non ha un corpo, lascia una riga vuota prima del confine successivo.
  7. Non includere l'URL di base in ogni singola richiesta nidificata.
  8. Termina la richiesta principale con un confine finale, ad esempio --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--
'

Note sull'ordine

  • Le richieste potrebbero non essere eseguite nell'ordine specificato.
  • Utilizza Content-ID per identificare le singole richieste.
  • Se devi eseguire le chiamate in un determinato ordine, inviale separatamente e aspetta la risposta alla prima richiesta prima di inviare la successiva.

Leggere una risposta batch

Di seguito è riportato un esempio di risposta batch HTTP. L'ordine delle risposte potrebbe non corrispondere all'ordine delle richieste. Utilizza Content-ID per identificare la richiesta nidificata a cui appartiene ogni risposta nidificata. Nelle risposte, l'API aggiunge un prefisso response- a ogni 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--
'