Enviar várias solicitações de uma vez

É possível usar solicitações em lote com a API Merchant para enviar várias solicitações HTTP em uma única chamada de API.

Se preferir fazer o agrupamento em lote com bibliotecas de cliente, consulte Refatorar o código para solicitações simultâneas.

Uma solicitação em lote é uma única solicitação HTTP padrão que contém várias chamadas de API, usando o tipo de conteúdo multipart/mixed. Dentro da solicitação HTTP principal, cada parte contém uma solicitação HTTP aninhada.

É possível enviar a solicitação em lote para o batchPath especificado da API. O batchPath da API Merchant é batch/{sub-api}/v1. Você pode encontrar o batchPath de outras APIs nos documentos de descoberta delas.

Exemplos de motivos para agrupar suas solicitações:

  • Você acabou de começar a usar a API e tem muitos dados para fazer upload.
  • Um usuário fez alterações nos dados enquanto o aplicativo estava off-line, e o aplicativo precisa sincronizar os dados locais com o servidor.

O envio de várias solicitações em paralelo evita que você espere pela sub-solicitação mais lenta, o que melhora os tempos de resposta do servidor e reduz a latência.

Escrever uma solicitação em lote

Confira um exemplo de solicitação em lote da API Merchant. Essa solicitação combina uma solicitação GET para recuperar o inventário regional de um produto e uma solicitação INSERT para atualizar o inventário regional do mesmo produto. Siga o formato do exemplo exatamente:

  1. Use https://merchantapi.googleapis.com/batch/{sub-api}/v1 como o URL base.
  2. Especifique um limite para separar cada solicitação aninhada, por exemplo: -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
  3. Separe cada solicitação aninhada com o limite, por exemplo, --batch_inventory.
  4. Inclua Content-Type: application/http no início de cada solicitação aninhada.
  5. Use Content-ID para rotular cada solicitação aninhada com seu próprio ID. Por exemplo, Content-ID: <get~en~US~123456>.
  6. Inclua uma linha em branco entre o cabeçalho, o caminho e o corpo de cada solicitação aninhada. Se a solicitação aninhada não tiver um corpo, deixe uma linha em branco antes da próxima fronteira.
  7. Não inclua o URL base em cada solicitação aninhada individual.
  8. Termine a solicitação principal com um limite final, por exemplo, --batch_inventory–.
curl https://merchantapi.googleapis.com/batch/inventories/v1 \
-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/v1/accounts/123/products/online:en:US:123456/regionalInventories
--batch_inventory
Content-Type: application/http
Content-ID: <post:online:en:US:123456>
POST /inventories/v1/accounts/123/products/online:en:US:123456/regionalInventories:insert
{
   "region: "123456",
    "price": {
        "amountMicros": "100000000",
        "currencyCode": "USD"
    }
}
--batch_inventory--
'

Observações sobre o pedido

  • As solicitações podem não ser executadas na ordem especificada.
  • Use Content-ID para identificar solicitações individuais.
  • Se você precisar executar as chamadas em uma determinada ordem, envie-as separadamente e aguarde a resposta da primeira solicitação antes de enviar a próxima.

Ler uma resposta em lote

Confira um exemplo de resposta HTTP em lote. A ordem das respostas pode não corresponder à ordem das solicitações. Use Content-ID para identificar a solicitação aninhada a que cada resposta aninhada pertence. Nas respostas, a API adiciona um prefixo response- a cada Content-ID.

--batch_inventory
Content-Type: application/http
Content-ID: <response-get~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~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/en~US~123456/regionalInventories/123456",
  "region": "123456",
  "price": {
    "amountMicros": "100000000",
    "currencyCode": "USD"
  }
}
--batch_inventory--
'