JSON API ของ Blogger: เคล็ดลับประสิทธิภาพ

เอกสารนี้ครอบคลุมเทคนิคบางส่วนที่คุณสามารถใช้ในการปรับปรุงประสิทธิภาพของแอปพลิเคชัน ในบางกรณี ตัวอย่างจาก API อื่นๆ หรือ API ทั่วไปจะใช้เพื่อแสดงแนวคิดที่นําเสนอ อย่างไรก็ตาม แนวคิดเดียวกันนี้สามารถใช้ได้กับ API ของ Blogger

การบีบอัดโดยใช้ gzip

วิธีที่ง่ายและสะดวกสบายในการลดแบนด์วิดท์ที่จําเป็นสําหรับแต่ละคําขอคือการเปิดใช้การบีบอัด gzip แม้ว่าวิธีนี้ต้องใช้เวลา CPU มากขึ้นในการยกเลิกการขยายผลลัพธ์ แต่โดยทั่วไปข้อดีและข้อเสียคือค่าใช้จ่ายของเครือข่าย

หากต้องการรับการตอบกลับที่เข้ารหัสแบบ gzip คุณต้องดําเนินการ 2 อย่าง ได้แก่ ตั้งค่าส่วนหัว Accept-Encoding และแก้ไข User Agent ให้มีสตริง gzip ตัวอย่างส่วนหัว HTTP ที่มีรูปแบบที่เหมาะสมสําหรับการเปิดใช้การบีบอัด gzip

Accept-Encoding: gzip
User-Agent: my program (gzip)

การทํางานกับทรัพยากรบางส่วน

อีกวิธีหนึ่งในการปรับปรุงประสิทธิภาพของการเรียก API คือการส่งและการรับเฉพาะส่วนของข้อมูลที่คุณสนใจ วิธีนี้ช่วยให้แอปพลิเคชันของคุณหลีกเลี่ยงการโอน แยกวิเคราะห์ และจัดเก็บช่องที่ไม่จําเป็นเพื่อให้ใช้ทรัพยากร ซึ่งรวมถึงเครือข่าย, CPU และหน่วยความจําได้อย่างมีประสิทธิภาพยิ่งขึ้น

คําขอบางส่วนมี 2 ประเภท ดังนี้

  • การตอบกลับบางส่วน: คําขอที่คุณจะระบุช่องที่จะรวมในการตอบกลับ (ใช้พารามิเตอร์คําขอ fields)
  • แพตช์: คําขออัปเดตที่คุณส่งเฉพาะช่องที่ต้องการเปลี่ยนแปลง (ใช้กริยา HTTP HTTP PATCH)

โปรดดูรายละเอียดเพิ่มเติมเกี่ยวกับการส่งคําขอเพียงบางส่วนในส่วนต่อไปนี้

คําตอบบางส่วน

โดยค่าเริ่มต้น เซิร์ฟเวอร์จะส่งการนําเสนอทรัพยากรแบบเต็มหลังจากประมวลผลคําขอ คุณอาจขอให้เซิร์ฟเวอร์ส่งเฉพาะช่องที่ต้องการจริงๆ และรับการตอบกลับบางส่วนแทนเพื่อให้มีประสิทธิภาพดีขึ้น

หากต้องการตอบกลับบางส่วน ให้ใช้พารามิเตอร์คําขอ fields เพื่อระบุช่องที่ต้องการส่งคืน คุณสามารถใช้พารามิเตอร์นี้กับคําขอใดๆ ที่ส่งคืนข้อมูลการตอบกลับ

โปรดทราบว่าพารามิเตอร์ fields จะส่งผลต่อข้อมูลการตอบกลับเท่านั้น และจะไม่ส่งผลต่อข้อมูลที่คุณส่ง (หากมี) หากต้องการลดปริมาณข้อมูลที่คุณส่งเมื่อแก้ไขทรัพยากร ให้ใช้คําขอ Patch

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้พารามิเตอร์ fields กับ General (สมมติ) "Demo" API

คําขอไม่ซับซ้อน: คําขอ 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 ที่ใช้ "data" 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 (ทั่วไป) &สมมติ (Demo" 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 รวมอยู่ในคําขอแพตช์ ค่านี้จึงมีค่าต่างไปจากเดิม

หมายเหตุ: หากใช้พารามิเตอร์ Response บางส่วน 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 ใช้ ETag เซิร์ฟเวอร์จะอัปเดตค่า ETag เมื่อประมวลผลคําขอแพตช์สําเร็จแล้ว เช่นเดียวกับที่ดําเนินการกับ PUT

คําขอแพตช์แสดงการนําเสนอทรัพยากรทั้งหมด เว้นแต่คุณจะใช้พารามิเตอร์ fields เพื่อลดปริมาณข้อมูลที่แสดงผล

หากคําขอแพตช์ทําให้เกิดสถานะของทรัพยากรใหม่ที่ไม่ถูกต้องในไวยากรณ์หรือไม่ถูกต้อง เซิร์ฟเวอร์จะแสดงรหัสสถานะ HTTP 400 Bad Request หรือ 422 Unprocessable Entity และสถานะทรัพยากรจะไม่เปลี่ยนแปลง ตัวอย่างเช่น หากคุณพยายามลบค่าสําหรับช่องที่ต้องกรอก เซิร์ฟเวอร์จะแสดงข้อผิดพลาด

คําอธิบายสํารองเมื่อไม่รองรับกริยา HTTP ของ PATCH

หากไฟร์วอลล์ของคุณไม่อนุญาตคําขอ HTTP PATCH ให้ส่งคําขอ HTTP POST และตั้งค่าส่วนหัวการลบล้างเป็น PATCH ดังที่แสดงด้านล่าง

POST https://www.googleapis.com/...
X-HTTP-Method-Override: PATCH
...

ความแตกต่างระหว่างแพตช์กับการอัปเดต

ในทางปฏิบัติ เมื่อคุณส่งข้อมูลสําหรับคําขออัปเดตที่ใช้คํากริยา HTTP PUT คุณจะต้องส่งช่องที่จําเป็นหรือไม่บังคับเท่านั้น หากคุณส่งค่าสําหรับช่องที่เซิร์ฟเวอร์กําหนด ระบบจะไม่สนใจค่าเหล่านั้น แม้ว่าจะเป็นการอัปเดตโดยใช้วิธีอื่น แต่วิธีนี้ก็มีข้อจํากัดบางประการ สําหรับการอัปเดตที่ใช้คํากริยา PUT ของ HTTP คําขอจะไม่สําเร็จหากคุณไม่ระบุพารามิเตอร์ที่จําเป็น และล้างข้อมูลที่กําหนดไว้ก่อนหน้านี้หากคุณไม่ระบุพารามิเตอร์ที่ไม่บังคับ

การใช้แพตช์จึงปลอดภัยกว่ามาก คุณใส่ข้อมูลให้ช่องที่ต้องการเปลี่ยนเท่านั้น ระบบจะไม่ล้างช่องที่ละเว้น ข้อยกเว้นเดียวสําหรับกฎนี้จะเกิดขึ้นกับองค์ประกอบหรืออาร์เรย์ที่ทําซ้ํา: หากคุณไม่ละเว้นทั้งหมด องค์ประกอบเหล่านั้นจะยังคงอยู่เช่นเดิม หากคุณให้พารามิเตอร์ใดไว้ ชุดทั้งหมดจะถูกแทนที่ด้วยชุดที่คุณให้