วิธีเดียวในการจัดกลุ่มก็คือปลายทาง Global HTTP Batch
(www.googleapis.com/batch
) ได้ปิดตัวลงในวันที่ 12 สิงหาคม 2020 ที่ประกาศไว้ในบล็อก Google Developers วิธีอื่นๆ ในการจัดกลุ่มยังคงใช้งานได้ตามที่ระบุไว้ในเอกสารอื่นๆ ของหน้านี้ หากโค้ดใช้ปลายทาง Batch ของ HTTP ทั่วโลก ให้ดูบล็อกโพสต์เกี่ยวกับวิธีการเปลี่ยนไปใช้วิธีการอื่นๆ เช่น ปลายทาง HTTP เฉพาะสําหรับ API
(www.googleapis.com/batch/API/VERSION
)
เอกสารนี้แสดงวิธีจัดกลุ่มการเรียก API เพื่อลดจํานวนการเชื่อมต่อ HTTP ที่ไคลเอ็นต์ต้องสร้าง
เอกสารนี้เกี่ยวกับการสร้างคําขอแบบกลุ่มโดยเฉพาะโดยการส่งคําขอ HTTP หากคุณใช้ไลบรารีของไคลเอ็นต์ Google เพื่อส่งคําขอแบบกลุ่มแทน โปรดดูเอกสารประกอบของไลบรารีไคลเอ็นต์
ภาพรวม
การเชื่อมต่อ HTTP แต่ละครั้งที่ไคลเอ็นต์สร้างผลลัพธ์ขึ้นในจํานวนเงินที่กําหนด Google Mirror API รองรับการทํางานแบบกลุ่ม เพื่ออนุญาตให้ไคลเอ็นต์เรียกใช้ API หลายรายการในคําขอ HTTP รายการเดียว
ตัวอย่างสถานการณ์ที่คุณอาจต้องใช้การจัดกลุ่ม
- คุณเพิ่งเริ่มต้นใช้ API และคุณมีข้อมูลที่จะอัปโหลดมากมาย
- ผู้ใช้เปลี่ยนแปลงข้อมูลในขณะที่แอปพลิเคชันของคุณออฟไลน์ (ยกเลิกการเชื่อมต่อจากอินเทอร์เน็ต) ดังนั้นแอปพลิเคชันของคุณจึงต้องซิงค์ข้อมูลในเครื่องกับเซิร์ฟเวอร์ด้วยการส่งการอัปเดตและการอัปเดตจํานวนมาก
ในแต่ละกรณี คุณจัดกลุ่มไว้ด้วยกันเป็นคําขอ HTTP รายการเดียวได้ แทนที่จะส่งผ่านการโทรแต่ละครั้ง คําขอภายในทั้งหมดต้องไปที่ Google API เดียวกัน
คุณจะโทรได้ไม่เกิน 1,000 คําขอต่อคําขอ 1 รายการ หากต้องการโทรออกมากกว่านั้น ให้ใช้คําขอแบบกลุ่มหลายรายการ
หมายเหตุ: ระบบกลุ่มสําหรับ Google Mirror API ใช้ไวยากรณ์เดียวกับระบบการประมวลผลกลุ่มข้อมูล แต่ความหมายแตกต่างกัน
รายละเอียดกลุ่ม
คําขอแบบกลุ่มประกอบด้วยการเรียก API หลายรายการรวมกันเป็นคําขอ HTTP 1 รายการ ซึ่งส่งไปยัง batchPath
ที่ระบุในเอกสารการค้นพบ API ได้ เส้นทางเริ่มต้นคือ /batch/api_name/api_version
ส่วนนี้จะอธิบายไวยากรณ์ของกลุ่มอย่างละเอียด ซึ่งมีตัวอย่างในภายหลัง
หมายเหตุ: ชุดคําขอ n ที่จัดกลุ่มไว้ด้วยกันจะนับรวมในขีดจํากัดการใช้งานเป็นคําขอ n ไม่ใช่หนึ่งคําขอ คําขอแบบกลุ่มจะแยกออกเป็นชุดคําขอก่อนการประมวลผล
รูปแบบคําขอแบบกลุ่ม
คําขอแบบกลุ่มคือคําขอ HTTP มาตรฐานรายการเดียวที่มีการเรียก Google Mirror API หลายรายการโดยใช้ประเภทเนื้อหา multipart/mixed
คําขอ HTTP แต่ละรายการในแต่ละรายการจะมีคําขอ HTTP ที่ซ้อนกันอยู่
แต่ละส่วนเริ่มต้นด้วยส่วนหัว HTTP ของ Content-Type: application/http
ของตัวเอง หรืออาจมีส่วนหัว Content-ID
ก็ได้ อย่างไรก็ตาม ส่วนหัวของส่วนมีไว้เพื่อแสดงจุดเริ่มต้นของส่วนนั้นๆ เท่านั้น ซึ่งจะแยกจากคําขอที่ฝังอยู่ หลังจากเซิร์ฟเวอร์แยกคําขอแบบกลุ่มออกเป็นคําขอแยกต่างหาก ระบบจะไม่สนใจส่วนหัวของส่วน
เนื้อหาของแต่ละส่วนเป็นคําขอ HTTP ที่สมบูรณ์ในตัวเอง โดยมีกริยา, URL, ส่วนหัว และเนื้อหาของตัวเอง คําขอ HTTP ต้องมีเฉพาะส่วนเส้นทางของ URL เท่านั้น และไม่อนุญาตให้ใช้ URL แบบเต็มในคําขอแบบกลุ่ม
ส่วนหัว HTTP สําหรับคําขอกลุ่มภายนอก ยกเว้นส่วนหัว Content-
เช่น Content-Type
ใช้กับคําขอทุกรายการในกลุ่ม หากคุณระบุส่วนหัว HTTP หนึ่งๆ ทั้งในคําขอภายนอกและการเรียกใช้แต่ละรายการ ค่าของส่วนหัวแต่ละรายการจะลบล้างค่าของส่วนหัวคําขอแบบกลุ่มภายนอก ส่วนหัวของการโทรแต่ละครั้งจะมีผลกับการโทรดังกล่าวเท่านั้น
เช่น หากคุณระบุส่วนหัวการให้สิทธิ์สําหรับการโทรหนึ่งๆ ส่วนหัวนั้นจะมีผลกับการโทรดังกล่าวเท่านั้น หากคุณมีส่วนหัว Authorization สําหรับคําขอจากภายนอก ส่วนหัวนั้นจะมีผลกับการเรียกทั้งหมด เว้นแต่จะมีการลบล้างส่วนหัวนั้นด้วยส่วนหัวการให้สิทธิ์ของตนเอง
เมื่อเซิร์ฟเวอร์ได้รับคําขอแบบกลุ่ม เซิร์ฟเวอร์จะใช้พารามิเตอร์การค้นหาและส่วนหัวของคําขอภายนอก (ตามความเหมาะสม) กับแต่ละส่วน แล้วถือว่าแต่ละส่วนเป็นคําขอ HTTP แยกกัน
การตอบกลับคําขอแบบกลุ่ม
การตอบกลับของเซิร์ฟเวอร์เป็นการตอบกลับ HTTP มาตรฐานรายการเดียวที่มีประเภทเนื้อหา multipart/mixed
แต่ละส่วนจะเป็นการตอบกลับคําขอใดคําขอหนึ่งในคําขอแบบกลุ่มตามลําดับเดียวกับคําขอ
การตอบสนองแต่ละส่วนมีการตอบสนอง HTTP ที่สมบูรณ์ เช่น รหัสสถานะ ส่วนหัว และเนื้อหา เช่นเดียวกับส่วนต่างๆ ในคําขอ และในแต่ละส่วน ส่วนหัวการตอบกลับจะมีส่วนหัว Content-Type
ที่เป็นตัวทําเครื่องหมายในช่วงต้นของส่วน
หากส่วนใดของคําขอมีส่วนหัว Content-ID
ส่วนที่เกี่ยวข้องของการตอบกลับจะมีส่วนหัว Content-ID
ที่ตรงกัน โดยค่าเดิมจะขึ้นต้นด้วยสตริง response-
ดังที่แสดงในตัวอย่างต่อไปนี้
หมายเหตุ: เซิร์ฟเวอร์อาจทําการโทรของคุณในลําดับใดก็ได้ อย่านับการเรียกใช้การเรียกใช้ตามลําดับที่คุณระบุไว้ หากต้องการมั่นใจว่าจะมีการโทร 2 ครั้งตามลําดับที่กําหนด คุณจะส่งการโทรคําขอเดียวไม่ได้ แทนที่จะส่งสายแรกก่อน จากนั้นจึงรอให้คําตอบแรกส่งไป
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงการใช้แบบกลุ่มร่วมกับ Google Mirror API
ตัวอย่างคําขอแบบกลุ่ม
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==--
ตัวอย่างการตอบกลับแบบกลุ่ม
นี่คือการตอบกลับคําขอตัวอย่างในส่วนก่อนหน้า
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=--