Kirim beberapa permintaan sekaligus

Anda dapat menggunakan permintaan batch dengan Merchant API untuk mengirim beberapa permintaan HTTP dalam satu panggilan API.

Jika Anda lebih memilih untuk melakukan pembuatan batch dengan library klien, lihat Memfaktorkan ulang kode untuk permintaan serentak.

Permintaan batch adalah satu permintaan HTTP standar yang berisi beberapa panggilan API, menggunakan jenis konten multipart/mixed. Dalam permintaan HTTP utama, setiap bagian berisi permintaan HTTP bertingkat.

Anda dapat mengirim permintaan batch ke batchPath yang ditentukan untuk API. batchPath untuk Merchant API adalah batch/{sub-api}/v1. Anda dapat menemukan batchPath untuk API lain dalam dokumen penemuan. Contoh alasan untuk mengelompokkan permintaan Anda meliputi:

  • Anda baru saja mulai menggunakan API dan memiliki banyak data untuk diupload.
  • Seorang pengguna membuat perubahan pada data saat aplikasi Anda offline, dan aplikasi Anda perlu menyinkronkan data lokal dengan server.

Mengirim beberapa permintaan secara paralel akan mencegah Anda menunggu sub-permintaan yang paling lambat, sehingga meningkatkan waktu respons server dan mengurangi latensi.

Menulis permintaan batch

Berikut contoh permintaan batch Merchant API. Permintaan ini menggabungkan permintaan get untuk mengambil inventaris regional suatu produk, dan permintaan insert untuk memperbarui inventaris regional produk yang sama. Anda harus mengikuti format contoh persis seperti yang diberikan:

  1. Gunakan https://merchantapi.googleapis.com/batch/{sub-api}/v1 sebagai URL dasar.
  2. Tentukan batas untuk memisahkan setiap permintaan bertingkat, misalnya: -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
  3. Pisahkan setiap permintaan bertingkat dengan batas, misalnya --batch_inventory.
  4. Sertakan Content-Type: application/http di awal setiap permintaan bertingkat.
  5. Gunakan Content-ID untuk memberi label pada setiap permintaan bertingkat dengan ID Anda sendiri. Contoh: Content-ID: <get:online:en:US:123456>.
  6. Sertakan baris kosong di antara header, jalur, dan isi setiap permintaan bertingkat. Jika permintaan bertingkat tidak memiliki isi, biarkan baris kosong sebelum batas berikutnya.
  7. Jangan sertakan URL dasar dalam setiap permintaan bertingkat individual.
  8. Akhiri permintaan utama dengan batas akhir, misalnya --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--
'

Catatan tentang pemesanan

  • Permintaan mungkin tidak dieksekusi sesuai urutan yang Anda tentukan.
  • Gunakan Content-ID untuk mengidentifikasi setiap permintaan.
  • Jika Anda perlu menjalankan panggilan dalam urutan tertentu, kirimkan secara terpisah dan tunggu respons terhadap permintaan pertama sebelum mengirimkan permintaan berikutnya.

Membaca respons batch

Berikut adalah contoh respons batch HTTP. Urutan respons mungkin tidak sesuai dengan urutan permintaan. Gunakan Content-ID untuk mengidentifikasi permintaan bertingkat yang menjadi bagian dari setiap respons bertingkat. Dalam respons, API menambahkan awalan response- ke setiap 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--
'