É 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:
- Use
https://merchantapi.googleapis.com/batch/{sub-api}/v1
como o URL base. - Especifique um limite para separar cada solicitação aninhada, por exemplo:
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
- Separe cada solicitação aninhada com o limite, por exemplo,
--batch_inventory
. - Inclua
Content-Type: application/http
no início de cada solicitação aninhada. - Use
Content-ID
para rotular cada solicitação aninhada com seu próprio ID. Por exemplo,Content-ID: <get~en~US~123456>
. - 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.
- Não inclua o URL base em cada solicitação aninhada individual.
- 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--
'