เอกสารนี้ครอบคลุมเทคนิคบางอย่างที่คุณสามารถใช้เพื่อปรับปรุงประสิทธิภาพของแอปพลิเคชัน ในบางกรณี เราจะใช้ตัวอย่างจาก API อื่นๆ หรือ API ทั่วไปเพื่อแสดงแนวคิดที่นําเสนอ อย่างไรก็ตาม แนวคิดเดียวกันนี้ใช้ได้กับ Books API
การบีบอัดโดยใช้ gzip
วิธีที่ง่ายและสะดวกในการลดแบนด์วิดท์ที่จําเป็นสําหรับคําขอแต่ละรายการคือการเปิดใช้การบีบอัด gzip แม้ว่าขั้นตอนนี้จะใช้เวลา CPU มากขึ้นในการยกเลิกการบีบอัดผลลัพธ์ แต่ข้อได้เปรียบจากต้นทุนของเครือข่ายมักทําให้เกิดความคุ้มค่ามาก
หากต้องการรับการตอบกลับที่เข้ารหัส gzip คุณต้องทํา 2 อย่าง ได้แก่ ตั้งค่าส่วนหัว Accept-Encoding
และแก้ไข User Agent ให้มีสตริง gzip
ต่อไปนี้คือตัวอย่างส่วนหัว HTTP ที่มีรูปแบบถูกต้องสําหรับการเปิดใช้การบีบอัด gzip
Accept-Encoding: gzip User-Agent: my program (gzip)
การทํางานกับทรัพยากรบางส่วน
อีกวิธีหนึ่งในการปรับปรุงประสิทธิภาพการทํางานของ API คือการส่งและรับเฉพาะข้อมูลที่คุณสนใจเท่านั้น ซึ่งจะทําให้แอปพลิเคชันของคุณหลีกเลี่ยงการโอน แยกวิเคราะห์ และจัดเก็บช่องที่ไม่จําเป็น เพื่อให้สามารถใช้ทรัพยากรอย่างเครือข่าย CPU และหน่วยความจําได้อย่างมีประสิทธิภาพมากขึ้น
คําขอบางส่วนมี 2 ประเภท ได้แก่
- การตอบกลับบางส่วน: คําขอที่คุณจะระบุช่องที่จะรวมในการตอบกลับ (ใช้พารามิเตอร์คําขอ
fields
) - แพตช์: คําขออัปเดต ซึ่งคุณจะส่งเฉพาะช่องที่ต้องการเปลี่ยน (ใช้
PATCH
คํากริยา HTTP)
โปรดดูรายละเอียดเพิ่มเติมเกี่ยวกับการส่งคําขอบางส่วนในส่วนต่อไปนี้
การตอบกลับบางส่วน
โดยค่าเริ่มต้น เซิร์ฟเวอร์จะส่งคืนค่าทรัพยากรทั้งหมดหลังจากประมวลผลคําขอ คุณอาจขอให้เซิร์ฟเวอร์ส่งเฉพาะช่องที่คุณต้องการจริงๆ และรับการตอบกลับบางส่วนแทนเพื่อให้มีประสิทธิภาพดีขึ้น
หากต้องการขอการตอบกลับบางส่วน ให้ใช้พารามิเตอร์คําขอ fields
เพื่อระบุช่องที่ต้องการส่งคืน คุณใช้พารามิเตอร์นี้กับคําขอที่ส่งคืนข้อมูลการตอบกลับได้
โปรดทราบว่าพารามิเตอร์ fields
จะส่งผลต่อข้อมูลการตอบกลับเท่านั้น และจะไม่ส่งผลต่อข้อมูลที่คุณต้องส่ง (หากมี) หากต้องการลดปริมาณข้อมูลที่คุณส่งเมื่อแก้ไขทรัพยากร ให้ใช้คําขอ patch
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงการใช้พารามิเตอร์ fields
กับ API "Demo" ทั่วไป (สมมติ)
คําขอแบบง่าย: คําขอ HTTP GET
นี้ละเว้นพารามิเตอร์ fields
และแสดงผลทรัพยากรทั้งหมด
https://www.googleapis.com/demo/v1
การตอบกลับของทรัพยากรแบบเต็ม: ข้อมูลทรัพยากรทั้งหมดจะมีช่องต่อไปนี้ รวมถึงช่องอื่นๆ ที่ละเว้นเพื่อความสั้นกระชับ
{ "kind": "demo", ... "items": [ { "title": "First title", "comment": "First comment.", "characteristics": { "length": "short", "accuracy": "high", "followers": ["Jo", "Will"], }, "status": "active", ... }, { "title": "Second title", "comment": "Second comment.", "characteristics": { "length": "long", "accuracy": "medium" "followers": [ ], }, "status": "pending", ... }, ... ] }
คําขอการตอบกลับบางส่วน: คําขอต่อไปนี้สําหรับทรัพยากรเดียวกันนี้ใช้พารามิเตอร์ fields
เพื่อลดปริมาณข้อมูลที่แสดงผลอย่างมาก
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
การตอบกลับบางส่วน: เพื่อตอบสนองต่อคําขอด้านบน เซิร์ฟเวอร์จะส่งการตอบกลับที่มีเฉพาะข้อมูลประเภทพร้อมกับอาร์เรย์รายการแบบเลื่อนลงที่มีเฉพาะชื่อ HTML และข้อมูลลักษณะเฉพาะของความยาวในแต่ละรายการ
200 OK
{ "kind": "demo", "items": [{ "title": "First title", "characteristics": { "length": "short" } }, { "title": "Second title", "characteristics": { "length": "long" } }, ... ] }
โปรดทราบว่าการตอบกลับเป็นออบเจ็กต์ JSON ที่มีแต่ช่องที่เลือกและออบเจ็กต์หลักที่ล้อมรอบอยู่
ดูรายละเอียดเกี่ยวกับวิธีจัดรูปแบบพารามิเตอร์ fields
ถัดไปตามด้วยรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่แสดงผลในการตอบกลับ
สรุปไวยากรณ์ของพารามิเตอร์ช่อง
รูปแบบของค่าพารามิเตอร์คําขอ fields
หลวมตามไวยากรณ์ XPath ไวยากรณ์ที่รองรับจะสรุปไว้ด้านล่าง และตัวอย่างเพิ่มเติมจะอยู่ในส่วนต่อไปนี้
- ใช้รายการที่คั่นด้วยคอมมาเพื่อเลือกหลายช่อง
- ใช้
a/b
เพื่อเลือกช่องb
ที่ฝังอยู่ในช่องa
ใช้a/b/c
เพื่อเลือกช่องc
ที่ฝังอยู่ภายในb
ข้อยกเว้น: สําหรับการตอบกลับ API ที่ใช้ Wrapper "ข้อมูล" โดยที่การตอบกลับฝังอยู่ในออบเจ็กต์
data
ที่มีลักษณะเหมือนdata: { ... }
อย่าใส่ "data
" ในข้อกําหนดของfields
การรวมออบเจ็กต์ข้อมูลที่มีข้อกําหนดของช่อง เช่นdata/a/b
ทําให้เกิดข้อผิดพลาด แต่ให้ใช้ข้อมูลจําเพาะของfields
เช่นa/b
แทน - ใช้ตัวเลือกย่อยเพื่อขอชุดช่องย่อยที่เจาะจงของอาร์เรย์หรือออบเจ็กต์โดยวางนิพจน์ในวงเล็บ "
( )
"ตัวอย่างเช่น
fields=items(id,author/email)
จะแสดงเฉพาะรหัสสินค้าและอีเมลของผู้เขียนองค์ประกอบแต่ละรายการในอาร์เรย์รายการ นอกจากนี้ คุณยังระบุช่องย่อยช่องเดียวได้ด้วย โดยfields=items(id)
เทียบเท่ากับfields=items/id
- ใช้ไวลด์การ์ดในการเลือกช่อง หากจําเป็น
เช่น
fields=items/pagemap/*
เลือกออบเจ็กต์ทั้งหมดในการแมปหน้าเว็บ
ตัวอย่างเพิ่มเติมเกี่ยวกับการใช้พารามิเตอร์ช่อง
ตัวอย่างด้านล่างอธิบายว่าคําอธิบายค่าพารามิเตอร์ fields
ส่งผลต่อการตอบกลับอย่างไร
หมายเหตุ: เช่นเดียวกับค่าพารามิเตอร์ทั้งหมด ค่าพารามิเตอร์ fields
ต้องมีการเข้ารหัส URL ตัวอย่างในเอกสารนี้ละเว้นการเข้ารหัสเพื่อให้อ่านง่ายขึ้น
- ระบุช่องที่ต้องการแสดงผลหรือเลือกช่อง
- ค่าพารามิเตอร์คําขอ
fields
เป็นรายการช่องที่คั่นด้วยคอมมา และระบุแต่ละช่องโดยเทียบกับรากของการตอบกลับ ดังนั้นหากคุณดําเนินการรายการ การตอบกลับจะเป็นคอลเล็กชันและโดยทั่วไปจะมีอาร์เรย์ของทรัพยากร หากคุณกําลังดําเนินการที่ส่งคืนทรัพยากรเดียว ระบบจะระบุช่องให้สัมพันธ์กับทรัพยากรนั้น หากช่องที่คุณเลือกคือ (หรือเป็นส่วนหนึ่งของ) อาร์เรย์ เซิร์ฟเวอร์จะแสดงผลส่วนที่เลือกขององค์ประกอบทั้งหมดในอาร์เรย์
ตัวอย่างระดับคอลเล็กชันมีดังนี้
ตัวอย่าง ผลกระทบ items
แสดงผลองค์ประกอบทั้งหมดในอาร์เรย์รายการ รวมถึงช่องทั้งหมดในแต่ละองค์ประกอบ แต่ไม่รวมช่องอื่นๆ etag,items
แสดงผลทั้งช่อง etag
และองค์ประกอบทั้งหมดในอาร์เรย์รายการitems/title
แสดงเฉพาะช่อง title
สําหรับองค์ประกอบทั้งหมดในอาร์เรย์รายการ
เมื่อใดก็ตามที่มีการส่งช่องที่ซ้อนกัน การตอบกลับจะรวมออบเจ็กต์ระดับบนที่ล้อมรอบอยู่ โดยช่องหลักจะไม่รวมช่องย่อยอื่นๆ ยกเว้นช่องที่เลือกไว้อย่างชัดแจ้งcontext/facets/label
แสดงผลเฉพาะช่อง label
สําหรับสมาชิกทั้งหมดของอาร์เรย์facets
ซึ่งฝังอยู่ใต้ออบเจ็กต์context
items/pagemap/*/title
สําหรับองค์ประกอบแต่ละรายการในอาร์เรย์รายการ จะแสดงเฉพาะช่อง title
(หากมี) ของออบเจ็กต์ทั้งหมดที่เป็นออบเจ็กต์ย่อยของpagemap
ตัวอย่างระดับทรัพยากรมีดังนี้
ตัวอย่าง ผลกระทบ title
แสดงผลช่อง title
ของทรัพยากรที่ขอauthor/uri
แสดงผลช่องย่อย uri
ของออบเจ็กต์author
ในทรัพยากรที่ขอlinks/*/href
แสดงผลช่อง href
ของออบเจ็กต์ทั้งหมดที่เป็นย่อยของlinks
- ขอเฉพาะช่องบางช่องโดยใช้การเลือกย่อย
- โดยค่าเริ่มต้น หากคําขอระบุช่องที่เจาะจง เซิร์ฟเวอร์จะแสดงออบเจ็กต์หรือองค์ประกอบอาร์เรย์ทั้งหมด คุณระบุคําตอบที่มีเฉพาะช่องย่อยบางช่องได้ ซึ่งทําได้โดยใช้ไวยากรณ์การเลือกย่อย "
( )
" ตามที่แสดงในตัวอย่างด้านล่างตัวอย่าง ผลกระทบ items(title,author/uri)
แสดงผลเฉพาะค่าของ title
และuri
ของผู้เขียนสําหรับแต่ละองค์ประกอบในอาร์เรย์รายการ
การจัดการคําตอบบางส่วน
หลังจากที่เซิร์ฟเวอร์ประมวลผลคําขอที่ถูกต้องที่มีพารามิเตอร์การค้นหา fields
แล้ว เซิร์ฟเวอร์จะส่งรหัสสถานะ HTTP 200 OK
กลับมาพร้อมกับข้อมูลที่ขอ หากพารามิเตอร์การค้นหา fields
มีข้อผิดพลาดหรือไม่ถูกต้อง เซิร์ฟเวอร์จะแสดงรหัสสถานะ HTTP 400 Bad Request
พร้อมด้วยข้อความแสดงข้อผิดพลาดซึ่งบอกให้ผู้ใช้ทราบว่าช่องที่เลือกมีอะไรผิดพลาด (เช่น "Invalid field selection a/b"
)
ต่อไปนี้เป็นตัวอย่างการตอบกลับบางส่วนที่แสดงในส่วนบทนําข้างต้น คําขอใช้พารามิเตอร์ fields
เพื่อระบุช่องที่จะแสดง
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
การตอบกลับบางส่วนมีลักษณะดังนี้
200 OK
{ "kind": "demo", "items": [{ "title": "First title", "characteristics": { "length": "short" } }, { "title": "Second title", "characteristics": { "length": "long" } }, ... ] }
หมายเหตุ: สําหรับ API ที่รองรับพารามิเตอร์การค้นหาสําหรับการใส่เลขหน้าข้อมูล (เช่น maxResults
และ nextPageToken
) ให้ใช้พารามิเตอร์เหล่านั้นเพื่อลดผลลัพธ์ของการค้นหาแต่ละรายการเป็นขนาดที่จัดการได้ มิเช่นนั้น ระบบอาจไม่ทราบว่าประสิทธิภาพที่ได้รับมีการตอบสนองเป็นบางส่วน
แพตช์ (การอัปเดตบางส่วน)
นอกจากนี้ คุณยังหลีกเลี่ยงการส่งข้อมูลที่ไม่จําเป็นได้ด้วยเมื่อแก้ไขทรัพยากร หากต้องการส่งข้อมูลที่อัปเดตแล้วเฉพาะกับช่องที่คุณกําลังเปลี่ยนแปลง ให้ใช้คํากริยา PATCH
ของ HTTP ความหมายแพตช์ที่อธิบายในเอกสารนี้แตกต่างจาก (และง่ายกว่า) เมื่อเทียบกับการใช้ GData รุ่นเก่าของการอัปเดตบางส่วน
ตัวอย่างสั้นๆ ด้านล่างแสดงให้เห็นว่าการใช้แพตช์ช่วยลดข้อมูลที่จําเป็นต่อการอัปเดตเล็กๆ น้อยๆ ได้อย่างไร
ตัวอย่าง
ตัวอย่างนี้แสดงคําขอแพตช์อย่างง่ายเพื่ออัปเดตเฉพาะทรัพยากรของ API "ข้อมูลประชากร" ทั่วไป (ที่แต่งขึ้น) ทรัพยากรยังมีความคิดเห็น ชุดลักษณะ สถานะ และช่องอื่นๆ อีกมากมาย แต่คําขอนี้จะส่งเพียงช่อง title
เท่านั้น เพราะนี่เป็นเพียงช่องเดียวที่แก้ไข
PATCH https://www.googleapis.com/demo/v1/324 Authorization: Bearer your_auth_token Content-Type: application/json { "title": "New title" }
คําตอบ:
200 OK
{ "title": "New title", "comment": "First comment.", "characteristics": { "length": "short", "accuracy": "high", "followers": ["Jo", "Will"], }, "status": "active", ... }
เซิร์ฟเวอร์จะส่งคืนรหัสสถานะ 200 OK
พร้อมด้วยการแสดงทั้งหมดของทรัพยากรที่อัปเดต เนื่องจากมีเพียงช่อง title
ที่รวมอยู่ในคําขอแพตช์เท่านั้น ซึ่งเป็นค่าเดียวที่แตกต่างจากก่อนหน้านี้
หมายเหตุ: หากคุณใช้พารามิเตอร์ fields
การตอบกลับบางส่วนร่วมกับแพตช์ คุณจะเพิ่มประสิทธิภาพของคําขออัปเดตได้มากยิ่งขึ้น คําขอแพตช์จะลดขนาดคําขอเท่านั้น การตอบกลับบางส่วนจะลดขนาดการตอบกลับ ดังนั้นหากต้องการลดปริมาณข้อมูลที่ส่งไปในทั้ง 2 เส้นทาง ให้ใช้คําขอแพตช์ที่มีพารามิเตอร์ fields
ความหมายของคําขอแพตช์
ส่วนเนื้อหาของคําขอแพตช์จะมีเฉพาะช่องทรัพยากรที่ต้องการแก้ไข เมื่อคุณระบุช่อง คุณต้องรวมออบเจ็กต์หลักที่แนบอยู่ เช่นเดียวกับออบเจ็กต์ระดับบนที่ล้อมรอบด้วยการตอบกลับบางส่วน ข้อมูลที่แก้ไขแล้วที่คุณส่งจะนําไปรวมกับข้อมูลของออบเจ็กต์หลัก หากมี
- เพิ่ม: หากต้องการเพิ่มช่องที่ยังไม่มี ให้ระบุช่องใหม่และค่า
- แก้ไข: หากต้องการเปลี่ยนค่าของช่องที่มีอยู่ ให้ระบุช่องดังกล่าวและตั้งค่าเป็นค่าใหม่
- ลบ: หากต้องการลบช่อง ให้ระบุช่องและตั้งค่าเป็น
null
เช่น"comment": null
คุณลบออบเจ็กต์ทั้งหมด (หากเปลี่ยนแปลงได้) โดยตั้งค่าเป็นnull
หากคุณใช้ไลบรารีของไคลเอ็นต์ Java API ให้ใช้Data.NULL_STRING
แทน โปรดดูรายละเอียดที่หัวข้อJSON Null
หมายเหตุเกี่ยวกับอาร์เรย์: คําขอแพตช์ที่มีอาร์เรย์จะแทนที่อาร์เรย์ที่มีอยู่ด้วยอาร์เรย์ที่ระบุ คุณไม่สามารถแก้ไข เพิ่ม หรือลบรายการในอาร์เรย์ได้แบบทีละส่วน
การใช้แพตช์ในรอบ Read-modify-Write
วิธีนี้เป็นแนวทางปฏิบัติที่มีประโยชน์ในการเริ่มต้นโดยการเรียกการตอบกลับบางส่วนด้วยข้อมูลที่คุณต้องการแก้ไข การดําเนินการนี้สําคัญอย่างยิ่งสําหรับทรัพยากรที่ใช้ ETag เนื่องจากคุณต้องระบุค่า ETag ปัจจุบันในส่วนหัว HTTP ของ If-Match
เพื่อให้อัปเดตทรัพยากรได้สําเร็จ หลังจากได้รับข้อมูลแล้ว คุณจะแก้ไขค่าที่ต้องการเปลี่ยน แล้วส่งการแก้ไขบางส่วนที่แก้ไขแล้วกลับมาด้วยคําขอแพตช์ นี่คือตัวอย่างที่สมมติว่าทรัพยากรการสาธิตใช้ ETag
GET https://www.googleapis.com/demo/v1/324?fields=etag,title,comment,characteristics Authorization: Bearer your_auth_token
นี่คือการตอบสนองบางส่วน
200 OK
{ "etag": "ETagString" "title": "New title" "comment": "First comment.", "characteristics": { "length": "short", "level": "5", "followers": ["Jo", "Will"], } }
คําขอแพตช์ต่อไปนี้อิงตามการตอบกลับนั้น ดังที่แสดงด้านล่าง เรายังใช้พารามิเตอร์ fields
เพื่อจํากัดข้อมูลที่ส่งคืนในการตอบกลับแพตช์ด้วย
PATCH https://www.googleapis.com/demo/v1/324?fields=etag,title,comment,characteristics Authorization: Bearer your_auth_token Content-Type: application/json If-Match: "ETagString"
{ "etag": "ETagString" "title": "", /* Clear the value of the title by setting it to the empty string. */ "comment": null, /* Delete the comment by replacing its value with null. */ "characteristics": { "length": "short", "level": "10", /* Modify the level value. */ "followers": ["Jo", "Liz"], /* Replace the followers array to delete Will and add Liz. */ "accuracy": "high" /* Add a new characteristic. */ }, }
เซิร์ฟเวอร์ตอบสนองด้วยรหัสสถานะ HTTP 200 OK และบางส่วนของทรัพยากรที่อัปเดตมีดังนี้
200 OK
{ "etag": "newETagString" "title": "", /* Title is cleared; deleted comment field is missing. */ "characteristics": { "length": "short", "level": "10", /* Value is updated.*/ "followers": ["Jo" "Liz"], /* New follower Liz is present; deleted Will is missing. */ "accuracy": "high" /* New characteristic is present. */ } }
การสร้างคําขอแพตช์โดยตรง
สําหรับคําขอแพตช์บางรายการ คุณต้องยึดคําขอเหล่านั้นตามข้อมูลที่ดึงมาก่อนหน้านี้ เช่น หากต้องการเพิ่มรายการไปยังอาร์เรย์และไม่ต้องการสูญเสียองค์ประกอบอาร์เรย์ที่มีอยู่ คุณต้องรับข้อมูลที่มีอยู่ก่อน ในทํานองเดียวกัน หาก API ใช้ ETag คุณต้องส่งค่า ETag ก่อนหน้าไปพร้อมกับคําขอเพื่อให้อัปเดตทรัพยากรได้สําเร็จ
หมายเหตุ: คุณสามารถใช้ส่วนหัว HTTP ของ "If-Match: *"
เพื่อบังคับให้แพตช์ทํางานเมื่อใช้งาน ETag เมื่อดําเนินการนี้ คุณไม่จําเป็นต้องอ่านก่อนเขียน
แต่ในกรณีอื่นๆ คุณสามารถสร้างคําขอแพตช์ได้โดยตรงโดยไม่ต้องดึงข้อมูลที่มีอยู่ก่อน เช่น ตั้งค่าคําขออัปเดตที่จะอัปเดตช่องให้เป็นค่าใหม่หรือเพิ่มช่องใหม่ได้ง่ายๆ เช่น
PATCH https://www.googleapis.com/demo/v1/324?fields=comment,characteristics Authorization: Bearer your_auth_token Content-Type: application/json { "comment": "A new comment", "characteristics": { "volume": "loud", "accuracy": null } }
สําหรับคําขอนี้ หากช่องความคิดเห็นมีค่าอยู่แล้ว ค่าใหม่จะเขียนทับค่า มิเช่นนั้นจะตั้งเป็นค่าใหม่ ในทํานองเดียวกัน หากมีลักษณะเฉพาะของปริมาณ ระบบจะเขียนทับค่าหากไม่ใช่ ระบบจะสร้างค่าดังกล่าว ช่องความแม่นยํา (หากตั้งค่าไว้) จะถูกนําออก
การจัดการการตอบกลับแพตช์
หลังจากประมวลผลคําขอแพตช์ที่ถูกต้องแล้ว API จะแสดงโค้ดตอบกลับ HTTP 200 OK
พร้อมด้วยการแสดงทรัพยากรที่แก้ไขโดยสมบูรณ์ หาก API ใช้ API เซิร์ฟเวอร์ เซิร์ฟเวอร์จะอัปเดตค่า ETag เมื่อประมวลผลคําขออัปเดตสําเร็จ เช่นเดียวกับที่ทํากับ PUT
คําขอแพตช์แสดงการนําเสนอทรัพยากรทั้งหมด เว้นแต่คุณจะใช้พารามิเตอร์ fields
เพื่อลดปริมาณข้อมูลที่แสดงผล
หากคําขอแพตช์ทําให้เกิดสถานะทรัพยากรใหม่ที่ไม่ถูกต้องตามไวยากรณ์หรือไม่ถูกต้อง เซิร์ฟเวอร์จะแสดงรหัสสถานะ HTTP 400 Bad Request
หรือ 422 Unprocessable Entity
และสถานะทรัพยากรจะไม่เปลี่ยนแปลง ตัวอย่างเช่น หากคุณพยายามลบค่าสําหรับช่องที่ต้องกรอก เซิร์ฟเวอร์จะแสดงข้อผิดพลาด
คําอธิบายสํารองเมื่อระบบไม่รองรับคํากริยาใน PWatch HTTP
หากไฟร์วอลล์ไม่อนุญาตคําขอ HTTP PATCH
ให้ส่งคําขอ HTTP POST
แล้วตั้งค่าส่วนหัวการลบล้างเป็น PATCH
ดังที่แสดงด้านล่าง
POST https://www.googleapis.com/... X-HTTP-Method-Override: PATCH ...
ความแตกต่างระหว่างแพตช์และการอัปเดต
ในทางปฏิบัติ เมื่อคุณส่งข้อมูลสําหรับคําขออัปเดตที่ใช้คํากริยา PUT
ของ HTTP คุณเพียงแค่ส่งช่องที่จําเป็นหรือไม่บังคับเท่านั้น หากคุณส่งค่าสําหรับช่องที่เซิร์ฟเวอร์ตั้งไว้ ระบบจะไม่สนใจค่าเหล่านั้น ถึงแม้ว่าการอัปเดตนี้อาจมีส่วนที่เป็นการอัปเดตบางส่วน แต่มีข้อจํากัดบางประการ สําหรับการอัปเดตที่ใช้คํากริยา PUT
ของ HTTP คําขอจะไม่สําเร็จหากคุณไม่ระบุพารามิเตอร์ที่จําเป็น และล้างข้อมูลที่กําหนดไว้ก่อนหน้านี้หากคุณไม่มีพารามิเตอร์ที่ไม่บังคับ
การใช้แพตช์ด้วยเหตุผลนี้ปลอดภัยกว่ามาก คุณป้อนข้อมูลสําหรับช่องที่ต้องการเปลี่ยนเท่านั้น ระบบจะไม่ล้างช่องที่คุณละเว้น กฎนี้มีข้อยกเว้นเพียงข้อเดียวว่ามีองค์ประกอบหรืออาร์เรย์ที่ซ้ํากันหรือไม่ หากคุณละเว้นทั้งหมด องค์ประกอบเหล่านั้นจะยังคงเหมือนเดิม หากคุณระบุค่าใดค่าหนึ่ง ระบบจะแทนที่ทั้งชุดด้วยชุดที่ระบุไว้