เอกสารนี้จะอธิบายโปรโตคอลที่ใช้โดย Google Data API ซึ่งรวมถึงลักษณะของคําค้นหา ผลการค้นหา และอื่นๆ
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับ Google Data API โปรดดูเอกสารคู่มือสําหรับนักพัฒนาซอฟต์แวร์ Google และคู่มือโปรโตคอล
ผู้ชม
เอกสารนี้มีไว้สําหรับผู้ที่ต้องการทําความเข้าใจรายละเอียดของรูปแบบ XML และโปรโตคอลที่ Google Data API ใช้
หากต้องการเพียงแค่เขียนโค้ดที่ใช้ API ไคลเอ็นต์ของ Google Data คุณไม่จําเป็นต้องรู้รายละเอียดเหล่านี้ แต่จะใช้ไลบรารีของไคลเอ็นต์สําหรับแต่ละภาษาแทนได้
แต่หากคุณต้องการทําความเข้าใจโปรโตคอล โปรดอ่านเอกสารนี้ เช่น คุณควรอ่านเอกสารนี้เพื่อช่วยในการทํางานต่อไปนี้
- การประเมินสถาปัตยกรรมข้อมูลของ Google
- เขียนโค้ดโดยใช้โปรโตคอลโดยไม่ใช้ไลบรารีของไคลเอ็นต์ Google ที่ระบุ
- การเขียนไลบรารีของไคลเอ็นต์ในภาษาใหม่
เอกสารนี้จะถือว่าคุณเข้าใจข้อมูลพื้นฐานของ XML, เนมสเปซ, ฟีดที่เผยแพร่ และคําขอ GET
, POST
, PUT
และ DELETE
ใน HTTP รวมถึงแนวคิดของ HTTP ว่า "ทรัพยากร" สําหรับข้อมูลเพิ่มเติม โปรดดูส่วนแหล่งข้อมูลเพิ่มเติมของเอกสารนี้
เอกสารนี้ไม่ได้ใช้ภาษาโปรแกรมใดๆ คุณสามารถส่งหรือรับข้อความข้อมูล Google โดยใช้ภาษาโปรแกรมที่ช่วยให้คุณออกคําขอ HTTP และแยกวิเคราะห์การตอบกลับแบบ XML ได้
รายละเอียดโปรโตคอล
ส่วนนี้อธิบายรูปแบบเอกสารข้อมูลของ Google และไวยากรณ์การค้นหา
รูปแบบเอกสาร
ข้อมูลของ Google, Atom และ RSS 2.0 ต่างใช้โมเดลข้อมูลพื้นฐานเดียวกัน นั่นคือคอนเทนเนอร์ที่มีทั้งข้อมูลทั่วโลกและข้อมูลทั้งหมด สําหรับแต่ละโปรโตคอล รูปแบบจะกําหนดโดยสคีมาฐาน แต่ขยายได้โดยใช้เนมสเปซต่างประเทศ
Google Data API สามารถใช้รูปแบบการเผยแพร่ Atom (สําหรับทั้งการอ่านและการเขียน) หรือรูปแบบ RSS (สําหรับการอ่านเท่านั้น)
Atom เป็นรูปแบบเริ่มต้นของ Google Data หากต้องการขอการตอบกลับในรูปแบบ RSS ให้ใช้พารามิเตอร์ /alt=rss/
ดูข้อมูลเพิ่มเติมได้ที่คําขอการค้นหา
เมื่อคุณขอข้อมูลในรูปแบบ RSS นั้น Google Data จะส่งฟีด (หรือการแสดงทรัพยากรอื่นๆ) ในรูปแบบ RSS หากไม่มีพร็อพเพอร์ตี้ RSS ที่เทียบเท่าสําหรับพร็อพเพอร์ตี้ข้อมูลของ Google ข้อมูล Google จะใช้พร็อพเพอร์ตี้ Atom โดยติดป้ายกํากับด้วยเนมสเปซที่เหมาะสมเพื่อระบุว่าเป็นส่วนขยายสําหรับ RSS
หมายเหตุ: ฟีดข้อมูล Google ส่วนใหญ่ในรูปแบบ Atom ใช้เนมสเปซ Atom เป็นเนมสเปซเริ่มต้น โดยการระบุแอตทริบิวต์ xmlns
ในองค์ประกอบฟีด ดูตัวอย่างของส่วนตัวอย่างได้ ดังนั้น ตัวอย่างในเอกสารนี้จึงไม่ได้ระบุ atom:
อย่างชัดแจ้งสําหรับองค์ประกอบในฟีดรูปแบบ Atom
ตารางต่อไปนี้แสดง Atom และ RSS ที่แสดงองค์ประกอบของสคีมา ข้อมูลทั้งหมดที่ไม่ได้กล่าวถึงในตารางเหล่านี้จะถือว่าเป็น XML ธรรมดาและปรากฏเหมือนกันในทั้ง 2 ตัวแทน เอลิเมนต์ XML ในคอลัมน์ที่ระบุอยู่ในเนมสเปซที่สอดคล้องกับคอลัมน์นั้น เว้นแต่จะระบุไว้เป็นอย่างอื่น สรุปนี้ใช้สัญลักษณ์ XPath มาตรฐาน โดยเฉพาะอย่างยิ่ง เครื่องหมายทับจะแสดงลําดับชั้นขององค์ประกอบ และเครื่องหมาย @ จะบ่งชี้ถึงแอตทริบิวต์ขององค์ประกอบ
ในตารางแต่ละรายการต่อไปนี้ จะต้องมีรายการที่ไฮไลต์
ตารางต่อไปนี้แสดงองค์ประกอบของฟีดข้อมูล Google
รายการสคีมาฟีด | การนําเสนอแบบ Atom | การนําเสนอ RSS |
---|---|---|
ชื่อฟีด | /feed/title |
/rss/channel/title |
รหัสฟีด | /feed/id |
/rss/channel/atom:id |
ลิงก์ HTML ของฟีด | /feed/link[@rel="alternate"] [@type="text/html"]/@href |
/rss/channel/link |
คําอธิบายฟีด | /feed/subtitle |
/rss/channel/description |
ภาษาของฟีด | /feed/@xml:lang |
/rss/channel/language |
ลิขสิทธิ์ฟีด | /feed/rights |
/rss/channel/copyright |
ผู้เขียนฟีด |
(ในบางกรณี โปรดดูข้อกําหนด Atom) |
/rss/channel/managingEditor |
วันที่อัปเดตล่าสุดของฟีด | /feed/updated (รูปแบบ RFC 3339) |
/rss/channel/lastBuildDate (รูปแบบ RFC 822) |
หมวดหมู่ฟีด | /feed/category/@term |
/rss/channel/category |
รูปแบบฟีด | /feed/category/@scheme |
/rss/channel/category/@domain |
โปรแกรมสร้างฟีด | /feed/generator /feed/generator/@uri |
/rss/channel/generator |
ไอคอนฟีด | /feed/icon |
/rss/channel/image/url (เว้นแต่จะมีโลโก้ด้วย ซึ่งในกรณีนี้ไอคอนจะไม่ปรากฏในฟีด) |
โลโก้ฟีด | /feed/logo |
/rss/channel/image/url |
ตารางต่อไปนี้แสดงองค์ประกอบของฟีดผลการค้นหาของ Google โปรดทราบว่าข้อมูลของ Google แสดงองค์ประกอบการตอบกลับของ SearchSearch 1.1 ในฟีดผลการค้นหา
รายการสคีมาฟีดผลการค้นหา | การนําเสนอแบบ Atom | การนําเสนอ RSS/OpenSearch |
---|---|---|
จํานวนผลการค้นหา | /feed/openSearch:totalResults |
/rss/channel/openSearch:totalResults |
ดัชนีเริ่มต้นของผลการค้นหา | /feed/openSearch:startIndex |
/rss/channel/openSearch:startIndex |
จํานวนผลการค้นหาต่อหน้า | /feed/openSearch:itemsPerPage |
/rss/channel/openSearch:itemsPerPage |
ตารางต่อไปนี้แสดงองค์ประกอบของรายการ Google Data
รายการสคีมาที่ป้อน | การนําเสนอแบบ Atom | การนําเสนอ RSS |
---|---|---|
รหัสรายการ | /feed/entry/id |
/rss/channel/item/guid |
รหัสเวอร์ชันของรายการ | (ไม่บังคับ) ฝังอยู่ใน EditorURI (ดูที่ส่วนการเพิ่มประสิทธิภาพพร้อมกันของเอกสารนี้) | — |
ชื่อรายการ | /feed/entry/title |
/rss/channel/item/title |
ลิงก์รายการ | /feed/entry/link |
/rss/channel/item/link /rss/channel/item/enclosure /rss/channel/item/comments |
สรุปรายการ |
(ในบางกรณี โปรดดูข้อกําหนด Atom) |
/rss/channel/item/atom:summary |
เนื้อหาการเข้า |
(หากไม่มีองค์ประกอบเนื้อหา รายการจะต้องมีองค์ประกอบ |
/rss/channel/item/description |
ผู้เขียนรายการ |
(ในบางกรณี โปรดดูข้อกําหนด Atom) |
/rss/channel/item/author |
หมวดหมู่การเข้า | /feed/entry/category/@term |
/rss/channel/item/category |
รูปแบบหมวดหมู่การเข้าร่วม | /feed/entry/category/@scheme |
/rss/channel/item/category/@domain |
วันที่เผยแพร่ | /feed/entry/published (RFC 3339) |
/rss/channel/item/pubDate (RFC 822) |
วันที่อัปเดตรายการ | /feed/entry/updated (RFC 3339) |
/rss/channel/item/atom:updated (RFC 3339) |
คำค้นหา
ส่วนนี้จะอธิบายวิธีใช้ระบบการค้นหา
เต็นท์ออกแบบโมเดลการค้นหา
เราตั้งใจให้รูปแบบคําค้นหาเรียบง่ายมาก หลักการพื้นฐานมีดังนี้
- การค้นหาจะแสดงเป็น URI URI แทนที่จะเป็นส่วนหัว HTTP หรือเป็นส่วนหนึ่งของเพย์โหลด ข้อดีอย่างหนึ่งของวิธีนี้คือคุณลิงก์กับคําค้นหาได้
- ขอบเขตต่างๆ จะอยู่ในรายการเดียว ดังนั้น จึงไม่มีวิธีเชื่อมโยงความสัมพันธ์ เช่น "ค้นหาอีเมลทั้งหมดจากผู้ที่ส่งอีเมลอย่างน้อย 10 ฉบับในวันนี้"
- ชุดของพร็อพเพอร์ตี้ที่คําค้นหาสามารถทําได้ล่วงหน้านั้นมีจํากัดอย่างมาก คําค้นหาส่วนใหญ่เป็นคําค้นหาที่ใช้การค้นหาข้อความแบบเต็มเท่านั้น
- การเรียงลําดับผลลัพธ์ขึ้นอยู่กับการติดตั้งใช้งาน
- โปรโตคอลนั้นสามารถขยายได้ตามธรรมชาติ หากต้องการแสดงการคาดการณ์หรือการจัดเรียงบริการเพิ่มเติม ก็สามารถทําได้โดยง่ายด้วยการใช้พารามิเตอร์ใหม่
คําขอการค้นหา
ไคลเอ็นต์ค้นหาบริการข้อมูลของ Google โดยออกคําขอ HTTP GET
URI การค้นหาประกอบด้วย URI ของทรัพยากร (เรียกว่า FeedURI ใน Atom) ตามด้วยพารามิเตอร์การค้นหา พารามิเตอร์การค้นหาส่วนใหญ่จะแสดงเป็นพารามิเตอร์ของ URL ?name=value[&...]
แบบดั้งเดิม พารามิเตอร์หมวดหมู่มีการจัดการแตกต่างกัน ดูด้านล่าง
เช่น หาก FeedURI เป็น http://www.example.com/feeds/jo
คุณอาจส่งคําค้นหาที่มี URI ต่อไปนี้
http://www.example.com/feeds/jo?q=Darcy&updated-min=2005-04-19T15:30:00Z
บริการข้อมูลของ Google รองรับ HTTP แบบมีเงื่อนไข GET
โดยจะตั้งค่าส่วนหัวการตอบกลับแบบแก้ไขล่าสุดตามค่าขององค์ประกอบ <atom:updated>
ในฟีดหรือรายการที่แสดงผล ไคลเอ็นต์จะส่งค่านี้เป็นค่าของส่วนหัว If-Modified-Since เพื่อหลีกเลี่ยงการดึงเนื้อหาอีกครั้งหากไม่ได้เปลี่ยนแปลง หากเนื้อหาไม่มีการเปลี่ยนแปลงตั้งแต่ If-Modified-Since เวลา บริการ Google Data จะแสดงการตอบกลับ HTTP 304 (ไม่มีการแก้ไข)
บริการข้อมูลของ Google ต้องรองรับการค้นหาหมวดหมู่และคําค้นหา alt
โดยจะรองรับพารามิเตอร์อื่นๆ หรือไม่ก็ได้ การส่งพารามิเตอร์มาตรฐานที่บริการหนึ่งๆ ไม่เข้าใจจะทําให้การตอบกลับได้รับ 403 Forbidden
การส่งผ่านพารามิเตอร์ที่ไม่ใช่แบบมาตรฐานที่ไม่รองรับจะส่งผลให้เกิดการตอบกลับ 400 Bad Request
สําหรับข้อมูลเกี่ยวกับรหัสสถานะอื่นๆ โปรดดูส่วนรหัสสถานะ HTTP ของเอกสารนี้
พารามิเตอร์การค้นหามาตรฐานจะสรุปไว้ในตารางต่อไปนี้ ค่าพารามิเตอร์ทั้งหมดต้องมีการเข้ารหัส URL
พารามิเตอร์ | ความหมาย | หมายเหตุ |
---|---|---|
q |
สตริงคําค้นหาแบบเต็มข้อความ |
|
/-/category |
ตัวกรองหมวดหมู่ |
|
category |
ตัวกรองหมวดหมู่ |
|
author |
ผู้เขียนรายการ |
|
alt |
ประเภททางเลือก |
|
updated-min updated-max |
ขอบเขตในวันที่อัปเดตรายการ |
|
published-min published-max |
ขอบเขตในวันที่เผยแพร่รายการ |
|
start-index |
ดัชนีแบบ 1 รายการของผลการค้นหาแรกที่จะเรียก |
|
max-results |
จํานวนครั้งสูงสุดที่สามารถดึงผลลัพธ์ได้ | สําหรับบริการใดก็ตามที่มีค่าเริ่มต้น max-results (เพื่อจํากัดขนาดของฟีดเริ่มต้น) คุณสามารถระบุจํานวนมากได้ หากต้องการรับฟีดทั้งหมด |
รหัสรายการ | รหัสของรายการที่ต้องการเรียก |
|
เกี่ยวกับการค้นหาหมวดหมู่
เราจึงตัดสินใจระบุรูปแบบที่ผิดปกติเล็กน้อยสําหรับการค้นหาหมวดหมู่ แทนที่จะใช้คําค้นหาต่อไปนี้
http://example.com/jo?category=Fritz&category=2006
เราใช้ข้อมูลต่อไปนี้
http://example.com/jo/-/Fritz/2006
วิธีนี้จะระบุทรัพยากรโดยไม่ต้องใช้พารามิเตอร์การค้นหาและจะสร้าง URI ที่สะอาดขึ้น เราเลือกวิธีการนี้สําหรับหมวดหมู่ เนื่องจากเราคิดว่าคําค้นหาของหมวดหมู่จะเป็นคําค้นหาที่พบบ่อยที่สุด
ข้อเสียของวิธีนี้คือกําหนดให้คุณต้องใช้ /-/
ในการค้นหาหมวดหมู่ เพื่อให้บริการข้อมูลของ Google สามารถแยกความแตกต่างระหว่างหมวดหมู่ต่างๆ กับ URI แหล่งข้อมูลอื่นๆ เช่น http://example.com/jo/MyPost/comments
ได้
การตอบกลับการค้นหา
คําค้นหาจะแสดงฟีด Atom, รายการ Atom หรือฟีด RSS โดยขึ้นอยู่กับพารามิเตอร์คําขอ
ผลการค้นหามีองค์ประกอบ OpenSearch ต่อไปนี้ใต้องค์ประกอบ <feed>
หรือองค์ประกอบ <channel>
โดยตรง (ขึ้นอยู่กับว่าผลลัพธ์เป็น Atom หรือ RSS)
openSearch:totalResults
- จํานวนผลการค้นหาทั้งหมดสําหรับคําค้นหานั้น (ไม่จําเป็นต้องแสดงในฟีดผลลัพธ์เสมอไป)
openSearch:startIndex
- ดัชนีแบบ 1 รายการของผลการค้นหาแรก
openSearch:itemsPerPage
- จํานวนสูงสุดของรายการที่ปรากฏในหน้าเดียว วิธีนี้ช่วยให้ลูกค้าสร้างการเชื่อมโยงโดยตรงไปยังหน้าเว็บชุดใดก็ได้ อย่างไรก็ตาม อาจมีข้อผิดพลาดจากการใช้หมายเลขนี้ โปรดดูหมายเหตุเกี่ยวกับ
start-index
ในตารางในส่วนคําขอการค้นหา
ฟีดและข้อมูล Atom อาจมีองค์ประกอบ Atom และ Google Data ดังต่อไปนี้ (รวมถึงองค์ประกอบอื่นๆ ที่ระบุไว้ในข้อกําหนด Atom)
<link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="..."/>
- ระบุ URI ที่จะเรียกข้อมูลฟีด Atom ที่สมบูรณ์ได้
<link rel="http://schemas.google.com/g/2005#post" type="application/atom+xml" href="..."/>
- ระบุ PostURI ของฟีด Atom (สามารถโพสต์รายการใหม่ได้)
<link rel="self" type="..." href="..."/>
- มี URI ของทรัพยากรนี้ ค่าของแอตทริบิวต์
type
จะขึ้นอยู่กับรูปแบบที่ขอ หากไม่มีการเปลี่ยนแปลงข้อมูลในระหว่างนี้ การส่ง GET อื่นไปยัง URI นี้จะแสดงผลการตอบสนองเดียวกัน <link rel="previous" type="application/atom+xml" href="..."/>
- ระบุ URI ของชุดผลลัพธ์ก่อนหน้าของชุดการค้นหานี้หากเกิดการแบ่งเป็นส่วนๆ
<link rel="next" type="application/atom+xml" href="..."/>
- ระบุ URI of the chunk ของชุดผลการค้นหานี้ หากแบ่งเป็นส่วนๆ
<link rel="edit" type="application/atom+xml" href="..."/>
- ระบุ EditURI ของรายการ Atom (ตําแหน่งที่ส่งรายการที่อัปเดตแล้ว)
ต่อไปนี้คือตัวอย่างคําตอบในการตอบกลับคําค้นหา
<?xml version="1.0" encoding="UTF-8"?> <feed xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"> <id>http://www.example.com/feed/1234.1/posts/full</id> <updated>2005-09-16T00:42:06Z</updated> <title type="text">Books and Romance with Jo and Liz</title> <link rel="alternate" type="text/html" href="http://www.example.net/"/> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.example.com/feed/1234.1/posts/full"/> <link rel="http://schemas.google.com/g/2005#post" type="application/atom+xml" href="http://www.example.com/feed/1234.1/posts/full"/> <link rel="self" type="application/atom+xml" href="http://www.example.com/feed/1234.1/posts/full"/> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> <generator version="1.0" uri="http://www.example.com">Example Generator Engine</generator> <openSearch:totalResults>2</openSearch:totalResults> <openSearch:startIndex>0</openSearch:startIndex> <entry> <id>http://www.example.com/feed/1234.1/posts/full/4521614025009481151</id> <published>2005-01-09T08:00:00Z</published> <updated>2005-01-09T08:00:00Z</updated> <category scheme="http://www.example.com/type" term="blog.post"/> <title type="text">This is the title of entry 1009</title> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">This is the entry body of entry 1009</div> </content> <link rel="alternate" type="text/html" href="http://www.example.com/posturl"/> <link rel="edit" type="application/atom+xml" href="http://www.example.com/feed/1234.1/posts/full/4521614025009481151"/> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> </entry> <entry> <id>http://www.example.com/feed/1234.1/posts/full/3067545004648931569</id> <published>2005-01-07T08:00:00Z</published> <updated>2005-01-07T08:02:00Z</updated> <category scheme="http://www.example.com/type" term="blog.post"/> <title type="text">This is the title of entry 1007</title> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">This is the entry body of entry 1007</div> </content> <link rel="alternate" type="text/html" href="http://www.example.com/posturl"/> <link rel="edit" type="application/atom+xml" href="http://www.example.com/feed/1234.1/posts/full/3067545004648931569"/> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> </entry> </feed>
หากฟีดที่ขออยู่ในรูปแบบ Atom หากไม่ได้ระบุพารามิเตอร์การค้นหาและหากผลการค้นหาไม่มีรายการทั้งหมด ระบบจะแทรกองค์ประกอบต่อไปนี้ลงในฟีดระดับบนสุด <link rel="next" type="application/atom+xml" href="..."/>
ซึ่งชี้ไปยังฟีดที่มีชุดรายการถัดไป ชุดต่อๆ ไปมีองค์ประกอบ <link rel="previous" type="application/atom+xml" href="..."/>
ที่เกี่ยวข้อง หากไปตามลิงก์ถัดไปทั้งหมด ลูกค้าจะเรียกข้อมูลรายการทั้งหมดจากฟีดได้
รหัสสถานะ HTTP
ตารางต่อไปนี้อธิบายความหมายของรหัสสถานะ HTTP ต่างๆ ในบริบทของบริการข้อมูล Google
รหัส | คำอธิบาย |
---|---|
200 OK | ไม่มีข้อผิดพลาด |
201 สร้างแล้ว | การสร้างทรัพยากรสําเร็จแล้ว |
304 ไม่ได้แก้ไข | ทรัพยากรไม่เปลี่ยนแปลงตั้งแต่เวลาที่ระบุในส่วนหัว If-Modified-Since ของคําขอ |
คําขอ Bad 400 รายการ | URI หรือส่วนหัวคําขอไม่ถูกต้อง หรือพารามิเตอร์ที่ไม่ใช่มาตรฐานที่ไม่รองรับ |
401 ไม่ได้รับอนุญาต | ต้องได้รับอนุญาต |
403 การเสนอราคาล่วงหน้า | ระบบไม่รองรับพารามิเตอร์มาตรฐานหรือการตรวจสอบสิทธิ์หรือการให้สิทธิ์ไม่สําเร็จ |
404 ไม่พบ | ไม่พบทรัพยากร (เช่น ฟีดหรือรายการ) |
409 ความขัดแย้ง | หมายเลขเวอร์ชันที่ระบุไม่ตรงกับหมายเลขเวอร์ชันล่าสุดของทรัพยากร |
ข้อผิดพลาดภายในเซิร์ฟเวอร์ 500 | ข้อผิดพลาดภายใน นี่คือโค้ดเริ่มต้นที่ใช้สําหรับข้อผิดพลาดที่ไม่รู้จักทั้งหมด |
การเกิดขึ้นพร้อมกัน (การเพิ่มประสิทธิภาพ)
ในบางครั้งการตรวจสอบว่าลูกค้าหลายรายไม่ได้เขียนทับการเปลี่ยนแปลงของกันและกันโดยไม่ตั้งใจ ซึ่งทําได้ง่ายดายที่สุด โดยตรวจสอบให้แน่ใจว่ารายการปัจจุบันที่ลูกค้าแก้ไขเหมือนกับเวอร์ชันที่ลูกค้าแก้ไข หากลูกค้ารายแรกอัปเดตก่อนลูกค้ารายแรก การอัปเดตของลูกค้ารายแรกจะถูกปฏิเสธเนื่องจากไคลเอ็นต์รายแรกใช้การแก้ไขในเวอร์ชันล่าสุดไม่ได้อีกต่อไป
ในฟีดข้อมูล Google ที่รองรับการกําหนดเวอร์ชัน เราจะบรรลุคุณค่าเหล่านี้โดยใส่รหัสเวอร์ชันต่อท้าย EditURI ของแต่ละรายการ โปรดทราบว่ามีผลเฉพาะกับ EditorURI เท่านั้น ไม่ใช่รหัสรายการ ในรูปแบบนี้ การอัปเดตแต่ละรายการจะเปลี่ยน EditURI ของรายการ จึงรับประกันได้ว่าการอัปเดตที่ตามมาตามเวอร์ชันต้นฉบับจะไม่สําเร็จ แน่นอนว่าการลบก็เหมือนกับการอัปเดตที่เกี่ยวข้องกับฟีเจอร์นี้ หากคุณส่งการลบด้วยหมายเลขเวอร์ชันเดิม การลบจะล้มเหลว
ฟีดข้อมูล Google บางรายการไม่รองรับการเพิ่มประสิทธิภาพพร้อมกัน ในฟีดที่รองรับ หากเซิร์ฟเวอร์ตรวจพบความขัดแย้งของเวอร์ชันใน PUT หรือ DELETE เซิร์ฟเวอร์จะตอบสนองด้วย 409 Conflict
ส่วนเนื้อหาของการตอบกลับจะมีสถานะปัจจุบันของรายการ (เอกสารข้อมูล Atom) ไคลเอ็นต์แนะนําให้แก้ไขข้อขัดแย้งและส่งคําขออีกครั้งโดยใช้ EditorURI จากการตอบกลับข้อผิดพลาด 409
บันทึกแรงจูงใจและการออกแบบ
แนวทางการเกิดขึ้นพร้อมกันอย่างเหมาะสมนี้ช่วยให้เรานําความหมายที่เราต้องการได้โดยไม่ต้องใช้มาร์กอัปใหม่สําหรับรหัสเวอร์ชัน ซึ่งทําให้การตอบกลับของ Google ข้อมูลเข้ากันได้กับปลายทางที่ไม่ใช่ Google Data Atom
เราอาจเลือกดูการประทับเวลาการอัปเดตในแต่ละรายการ (/atom:entry/atom:updated
) แทนที่จะระบุรหัสเวอร์ชัน แต่ปัญหา 2 ประการในการใช้การประทับเวลาการอัปเดตมีดังนี้
- โดยจะใช้ได้กับการอัปเดตเท่านั้น และจะลบไม่ได้
- แต่จะบังคับให้แอปพลิเคชันใช้ค่าวันที่/เวลาเป็นรหัสเวอร์ชัน ซึ่งจะทําให้ปรับปรุงข้อมูล Google เพิ่มเติมจากพื้นที่เก็บข้อมูลที่มีอยู่หลายแหล่งได้ยากขึ้น
การตรวจสอบสิทธิ์
เมื่อลูกค้าพยายามเข้าถึงบริการ ลูกค้าอาจต้องให้ข้อมูลเข้าสู่ระบบของผู้ใช้แก่บริการเพื่อแสดงให้เห็นว่าผู้ใช้มีสิทธิ์ดําเนินการที่เป็นปัญหา
วิธีการที่ไคลเอ็นต์ควรใช้สําหรับการตรวจสอบสิทธิ์จะขึ้นอยู่กับประเภทของไคลเอ็นต์ดังนี้
- แอปพลิเคชันเดสก์ท็อปควรใช้ระบบการตรวจสอบสิทธิ์เฉพาะของ Google ที่เรียกว่าการตรวจสอบสิทธิ์บัญชีสําหรับแอปพลิเคชันที่ติดตั้ง (หรือที่เรียกว่า "ClientLogin") (ไคลเอ็นต์บนเว็บไม่ควรใช้ระบบนี้)
- ไคลเอ็นต์บนเว็บ เช่น ส่วนหน้าของบุคคลที่สามสําหรับบริการข้อมูลของ Google ควรใช้ระบบการตรวจสอบสิทธิ์เฉพาะของ Google ซึ่งเรียกว่า Account Authentication Proxy for Web-based Application (หรือที่เรียกว่า "AuthSub")
ในระบบ ClientLogin ไคลเอ็นต์บนเดสก์ท็อปจะขอข้อมูลเข้าสู่ระบบจากผู้ใช้ แล้วส่งข้อมูลเข้าสู่ระบบเหล่านั้นไปยังระบบการตรวจสอบสิทธิ์ของ Google
หากการตรวจสอบสิทธิ์สําเร็จ ระบบการตรวจสอบสิทธิ์จะแสดงโทเค็นที่ไคลเอ็นต์ใช้ในภายหลัง (ในส่วนหัวการให้สิทธิ์ HTTP) เมื่อส่งคําขอข้อมูลของ Google
หากตรวจสอบสิทธิ์ไม่สําเร็จ เซิร์ฟเวอร์จะแสดงรหัสสถานะต้องห้าม 403 พร้อมด้วยส่วนหัว WWW-Authentication ที่มีโจทย์ที่เกี่ยวข้องกับการตรวจสอบสิทธิ์
ระบบ AuthSub ทํางานคล้ายกัน ยกเว้นแทนที่จะขอข้อมูลเข้าสู่ระบบของผู้ใช้จากผู้ใช้ โดยจะเชื่อมต่อผู้ใช้กับบริการของ Google ที่ขอรับข้อมูลเข้าสู่ระบบ บริการจะแสดงโทเค็นที่เว็บแอปพลิเคชันสามารถนําไปใช้ได้ ข้อดีของวิธีนี้คือ Google (ไม่ใช่ส่วนหน้าของเว็บ) จะจัดการและจัดเก็บข้อมูลเข้าสู่ระบบของผู้ใช้อย่างปลอดภัย
โปรดดูรายละเอียดเกี่ยวกับระบบการตรวจสอบสิทธิ์เหล่านี้ที่หัวข้อภาพรวมการตรวจสอบสิทธิ์ข้อมูลของ Google หรือเอกสารประกอบการตรวจสอบสิทธิ์บัญชี Google
สถานะเซสชัน
การใช้ตรรกะทางธุรกิจหลายอย่างต้องใช้ความสามารถในการคงเซสชันไว้ ซึ่งช่วยติดตามสถานะเซสชันของผู้ใช้
Google ติดตามสถานะเซสชันได้ 2 วิธีคือ การใช้คุกกี้และการใช้โทเค็นที่ส่งเป็นพารามิเตอร์การค้นหาได้ ทั้ง 2 วิธีจะให้ผลลัพธ์เหมือนกัน เราขอแนะนําให้ลูกค้ารองรับวิธีการติดตามสถานะเซสชันอย่างใดอย่างหนึ่ง (วิธีใดวิธีหนึ่งก็เพียงพอแล้ว) หากลูกค้าไม่รองรับหนึ่งในวิธีเหล่านี้ ไคลเอ็นต์จะยังคงทํางานร่วมกับบริการข้อมูลของ Google แต่ประสิทธิภาพอาจลดลงเมื่อเทียบกับไคลเอ็นต์ที่รองรับวิธีการเหล่านี้ กล่าวอย่างเจาะจงคือ หากไคลเอ็นต์ไม่รองรับเมธอดเหล่านี้ คําขอทั้งหมดก็จะทําให้เกิดการเปลี่ยนเส้นทาง และคําขอทุกรายการ (และข้อมูลที่เกี่ยวข้อง) จะส่งไปยังเซิร์ฟเวอร์ 2 ครั้ง ซึ่งจะส่งผลต่อประสิทธิภาพของทั้งไคลเอ็นต์และเซิร์ฟเวอร์
ไลบรารีของไคลเอ็นต์ Google จะจัดการสถานะเซสชันให้คุณ ดังนั้นหากคุณใช้ไลบรารีของเรา คุณไม่จําเป็นต้องดําเนินการใดๆ เพื่อรับการสนับสนุนสถานะเซสชัน
แหล่งข้อมูลเพิ่มเติม
เอกสารของบุคคลที่สามต่อไปนี้อาจมีประโยชน์
- การเปรียบเทียบ Atom และ RSS จากการทํางานร่วมกัน
- ภาพรวมของ Atom จาก IBM
- ส่วนขยาย Dublin Core ไปยัง RSS
- คําจํากัดความของเมธอด HTTP 1.1 ข้อกําหนดของ
GET
,POST
,PUT
และDELETE
- คําจํากัดความของรหัสสถานะ HTTP 1.1
- วิธีสร้างโปรโตคอล REST
- การสร้างบริการเว็บด้วย REST
- ข้อมูลเบื้องต้นทางเทคนิคเกี่ยวกับ XML
- เนมสเปซ XML ตามตัวอย่าง