Tek seferde birden fazla istek gönderme

Tek bir API çağrısında birden fazla HTTP isteği göndermek için Merchant API ile toplu istekleri kullanabilirsiniz.

Toplu hale getirme işlemini istemci kitaplıklarıyla yapmak isterseniz Eşzamanlı istekler için kodu yeniden düzenleme başlıklı makaleyi inceleyin.

Toplu istek, multipart/mixed içerik türünü kullanan ve birden fazla API çağrısı içeren tek bir standart HTTP isteğidir. Ana HTTP isteğinde her bölüm, iç içe yerleştirilmiş bir HTTP isteği içerir.

Toplu isteği API için belirtilen batchPath adresine gönderebilirsiniz. Merchant API için batchPath, batch/{sub-api}/v1 şeklindedir. Diğer API'ler için batchPath simgesini keşif dokümanlarında bulabilirsiniz.

İsteklerinizi gruplandırmanızın nedenlerine örnek olarak aşağıdakiler verilebilir:

  • API'yi yeni kullanmaya başladınız ve yüklenecek çok fazla veriniz var.
  • Bir kullanıcı, uygulamanız çevrimdışıyken verilerde değişiklik yaptı ve uygulamanızın yerel verileri sunucuyla senkronize etmesi gerekiyor.

Birden fazla isteği paralel olarak göndermek, en yavaş alt isteğin tamamlanmasını beklemenizi önler. Bu da sunucu yanıt sürelerini iyileştirir ve gecikmeyi azaltır.

Toplu istek yazma

Aşağıda örnek bir Merchant API toplu isteği verilmiştir. Bu istek, bir ürünün bölgesel envanterini almak için kullanılan bir get isteği ile aynı ürünün bölgesel envanterini güncellemek için kullanılan bir insert isteğini birleştirir. Örnekteki biçimi aynen kullanmalısınız:

  1. Temel URL olarak https://merchantapi.googleapis.com/batch/{sub-api}/v1 adresini kullanın.
  2. İç içe yerleştirilmiş her isteği ayırmak için bir sınır belirtin. Örneğin: -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
  3. Her iç içe yerleştirilmiş isteği sınıra göre ayırın. Örneğin, --batch_inventory.
  4. Her iç içe yerleştirilmiş isteğin başına Content-Type: application/http ekleyin.
  5. Her bir iç içe yerleştirilmiş isteği kendi kimliğinizle etiketlemek için Content-ID kullanın. Örneğin: Content-ID: <get~en~US~123456>.
  6. Her iç içe yerleştirilmiş isteğin başlığı, yolu ve gövdesi arasına boş bir satır ekleyin. İç içe yerleştirilmiş isteğin gövdesi yoksa bir sonraki sınırdan önce boş bir satır bırakın.
  7. Temel URL'yi her bir iç içe yerleştirilmiş isteğe dahil etmeyin.
  8. Ana isteği son bir sınıra ekleyerek sonlandırın. Örneğin, --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--
'

Siparişle ilgili notlar

  • İstekler, belirttiğiniz sırayla yürütülmeyebilir.
  • Tek tek istekleri tanımlamak için Content-ID kullanın.
  • Çağrılarınızı belirli bir sırada yürütmeniz gerekiyorsa bunları ayrı ayrı gönderin ve bir sonraki isteği göndermeden önce ilk isteğin yanıtını bekleyin.

Toplu yanıtları okuma

HTTP toplu yanıtı örneğini burada görebilirsiniz. Yanıtların sırası, isteklerin sırasıyla eşleşmeyebilir. Her bir iç içe yerleştirilmiş yanıtın ait olduğu iç içe yerleştirilmiş isteği tanımlamak için Content-ID kullanın. API, yanıtlarda her Content-ID öğesinin başına response- önekini ekler.

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