เคล็ดลับเพื่อเพิ่มประสิทธิภาพ

เอกสารนี้ครอบคลุมเทคนิคบางอย่างที่คุณสามารถใช้เพื่อปรับปรุงประสิทธิภาพของแอปพลิเคชัน ในบางกรณี เราจะใช้ตัวอย่างจาก 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 คําขอจะไม่สําเร็จหากคุณไม่ระบุพารามิเตอร์ที่จําเป็น และล้างข้อมูลที่กําหนดไว้ก่อนหน้านี้หากคุณไม่มีพารามิเตอร์ที่ไม่บังคับ

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