Permintaan Serempak

Salah satu pendekatan khusus untuk pengelompokan, endpoint Batch HTTP Global (www.googleapis.com/batch), telah dinonaktifkan pada 12 Agustus 2020, seperti yang diumumkan di blog Google Developer. Pendekatan lain untuk pengelompokan masih berfungsi, seperti yang didokumentasikan di bagian lain halaman ini. Jika kode Anda menggunakan endpoint Batch HTTP Global, lihat postingan blog untuk mendapatkan petunjuk tentang transisi menggunakan pendekatan lain, seperti endpoint batch HTTP khusus API (www.googleapis.com/batch/API/VERSION).

Dokumen ini menunjukkan cara mengelompokkan panggilan API secara bersamaan untuk mengurangi jumlah koneksi HTTP yang harus dibuat klien.

Dokumen ini khusus tentang membuat permintaan batch dengan mengirimkan permintaan HTTP. Jika Anda menggunakan library klien Google untuk membuat permintaan batch, lihat dokumentasi library klien.

Ringkasan

Setiap koneksi HTTP yang dilakukan klien Anda menghasilkan jumlah overhead tertentu. Google Mirror API mendukung pengelompokan, untuk memungkinkan klien Anda menempatkan beberapa panggilan API dalam satu permintaan HTTP.

Contoh situasi saat Anda mungkin ingin menggunakan pengelompokan:

  • Anda baru saja mulai menggunakan API dan memiliki banyak data untuk diupload.
  • Seorang pengguna membuat perubahan pada data saat aplikasi offline (terputus dari Internet), sehingga aplikasi Anda perlu menyinkronkan data lokal dengan server dengan mengirimkan banyak pembaruan dan penghapusan.

Di setiap kasus, Anda dapat mengelompokkan semuanya ke dalam satu permintaan HTTP, bukan mengirim setiap panggilan secara terpisah. Semua permintaan internal harus mengarah ke Google API yang sama.

Anda dibatasi hingga 1.000 panggilan dalam satu permintaan batch. Jika perlu melakukan lebih banyak panggilan dari itu, gunakan beberapa permintaan batch.

Catatan: Sistem batch untuk Google Mirror API menggunakan sintaksis yang sama dengan sistem pemrosesan batch O, tetapi semantiknya berbeda.

Detail paket

Permintaan batch terdiri dari beberapa panggilan API yang digabungkan menjadi satu permintaan HTTP, yang dapat dikirim ke batchPath yang ditentukan dalam dokumen penemuan API. Jalur default-nya adalah /batch/api_name/api_version. Bagian ini menjelaskan sintaksis batch secara mendetail; nantinya, ada contoh.

Catatan: Kumpulan permintaan n yang dikelompokkan secara bersamaan diperhitungkan dalam batas penggunaan Anda sebagai permintaan n, bukan sebagai satu permintaan. Permintaan batch dipisah menjadi sekumpulan permintaan sebelum diproses.

Format permintaan batch

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

Setiap bagian dimulai dengan header HTTP Content-Type: application/http-nya sendiri. Header tersebut juga dapat memiliki header Content-ID opsional. Namun, header bagian hanya ada untuk menandai awal bagian tersebut dan terpisah dari permintaan bertingkat. Setelah server membuka permintaan batch ke dalam permintaan terpisah, header bagian akan diabaikan.

Isi setiap bagian itu sendiri merupakan permintaan HTTP lengkap, dengan kata kerja, URL, header, dan isinya sendiri. Permintaan HTTP hanya boleh berisi bagian jalur URL; URL lengkap tidak diizinkan dalam permintaan batch.

Header HTTP untuk permintaan batch luar, kecuali untuk header Content- seperti Content-Type, berlaku untuk setiap permintaan dalam batch. Jika Anda menentukan header HTTP yang diberikan dalam permintaan luar dan panggilan individual, nilai header panggilan individual akan menggantikan nilai header permintaan batch luar. Header untuk setiap panggilan hanya berlaku untuk panggilan tersebut.

Misalnya, jika Anda memberikan header Otorisasi untuk panggilan tertentu, header tersebut hanya berlaku untuk panggilan tersebut. Jika Anda memberikan header Otorisasi untuk permintaan luar, header tersebut akan berlaku untuk semua panggilan individual kecuali panggilan tersebut menggantinya dengan header Otorisasinya sendiri.

Saat menerima permintaan batch, server akan menerapkan parameter kueri dan header permintaan luar (sebagaimana yang sesuai) untuk setiap bagian, lalu memperlakukan setiap bagian seolah-olah merupakan permintaan HTTP yang terpisah.

Respons terhadap permintaan batch

Respons server adalah respons HTTP standar tunggal dengan jenis konten multipart/mixed; setiap bagian adalah respons terhadap salah satu permintaan dalam permintaan batch, dalam urutan yang sama dengan permintaan tersebut.

Seperti bagian dalam permintaan, setiap bagian respons berisi respons HTTP lengkap, termasuk kode status, header, dan isi. Dan seperti bagian dalam permintaan, setiap bagian respons didahului oleh header Content-Type yang menandai awal bagian tersebut.

Jika bagian permintaan tertentu memiliki header Content-ID, bagian respons yang sesuai akan memiliki header Content-ID yang cocok, dengan nilai asli didahului string response-, seperti yang ditunjukkan dalam contoh berikut.

Catatan: Server dapat melakukan panggilan Anda dalam urutan apa pun. Jangan mengandalkan eksekusinya dalam urutan yang Anda tentukan untuknya. Jika ingin memastikan bahwa dua panggilan terjadi dalam urutan tertentu, Anda tidak dapat mengirimkannya dalam satu permintaan; sebagai gantinya, kirim panggilan pertama sendiri, lalu tunggu respons pertama setelah mengirimkan yang kedua.

Contoh

Contoh berikut menunjukkan penggunaan pengelompokan dengan Google Mirror API.

Contoh permintaan batch

POST /batch HTTP/1.1
Content-Length: content_length
content-type: multipart/mixed; boundary="===============7330845974216740156=="
accept-encoding: gzip, deflate

--===============7330845974216740156==
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: TIMELINE_INSERT_USER_1

POST /mirror/v1/timeline HTTP/1.1
Content-Type: application/json
authorization: Bearer user_1_token
accept: application/json
content-length: 24

{"text": "Hello there!"}
--===============7330845974216740156==
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: TIMELINE_INSERT_USER_2

POST /mirror/v1/timeline HTTP/1.1
Content-Type: application/json
authorization: Bearer user_2_token
accept: application/json
content-length: 24

{"text": "Hello there!"}
--===============7330845974216740156==
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: TIMELINE_INSERT_USER_3

POST /mirror/v1/timeline HTTP/1.1
Content-Type: application/json
authorization: Bearer user_3_token
accept: application/json
content-length: 24

{"text": "Hello there!"}
--===============7330845974216740156==--

Contoh respons batch

Ini adalah respons terhadap contoh permintaan di bagian sebelumnya.

HTTP/1.1 200 OK
Content-Type: multipart/mixed; boundary=batch_pK7JBAk73-E=_AA5eFwv4m2Q=
Date: Tue, 22 Jan 2013 18:56:00 GMT
Expires: Tue, 22 Jan 2013 18:56:00 GMT
Cache-Control: private, max-age=0

--batch_pK7JBAk73-E=_AA5eFwv4m2Q=
Content-Type: application/http
Content-ID: response-TIMELINE_INSERT_USER_1

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 304

{
 "kind": "glass#timelineItem",
 "id": "1234567890",
 "selfLink": "https://www.googleapis.com/mirror/v1/timeline/1234567890",
 "created": "2012-09-25T23:28:43.192Z",
 "updated": "2012-09-25T23:28:43.192Z",
 "etag": "\"G5BI0RWvj-0jWdBrdWrPZV7xPKw/t25selcGS3uDEVT6FB09hAG-QQ\"",
 "text": "Hello there!"
}
--batch_pK7JBAk73-E=_AA5eFwv4m2Q=
Content-Type: application/http
Content-ID: response-TIMELINE_INSERT_USER_2

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 304

{
 "kind": "glass#timelineItem",
 "id": "0987654321",
 "selfLink": "https://www.googleapis.com/mirror/v1/timeline/0987654321",
 "created": "2012-09-25T23:28:43.192Z",
 "updated": "2012-09-25T23:28:43.192Z",
 "etag": "\"G5BI0RWvj-0jWdBrdWrPZV7xPKw/t25selcGS3uDEVT6FB09hAG-QQ\"",
 "text": "Hello there!"
}
--batch_pK7JBAk73-E=_AA5eFwv4m2Q=
Content-Type: application/http
Content-ID: response-TIMELINE_INSERT_USER_3

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 304

{
 "kind": "glass#timelineItem",
 "id": "5432109876",
 "selfLink": "https://www.googleapis.com/mirror/v1/timeline/5432109876",
 "created": "2012-09-25T23:28:43.192Z",
 "updated": "2012-09-25T23:28:43.192Z",
 "etag": "\"G5BI0RWvj-0jWdBrdWrPZV7xPKw/t25selcGS3uDEVT6FB09hAG-QQ\"",
 "text": "Hello there!"
}
--batch_pK7JBAk73-E=_AA5eFwv4m2Q=--