คําเตือน: หน้านี้เกี่ยวกับ API แบบเก่าของ Google ซึ่งก็คือ Google Data API โดยเกี่ยวข้องกับ API ที่แสดงอยู่ในไดเรกทอรี Google Data API เท่านั้น โดยหลาย API ถูกแทนที่ด้วย API ที่ใหม่กว่า สําหรับข้อมูลเกี่ยวกับ API ใหม่โดยเฉพาะ โปรดดูเอกสารประกอบของ API ใหม่ ดูข้อมูลเกี่ยวกับการให้สิทธิ์คําขอด้วย API ใหม่ได้ที่การตรวจสอบสิทธิ์และการให้สิทธิ์บัญชี Google
เอกสารนี้จะอธิบายข้อมูลเบื้องต้นเกี่ยวกับโปรโตคอลข้อมูลของ Google ที่ Google APIs จํานวนมากใช้ รวมถึงตัวอย่างลักษณะของการค้นหา ผลการค้นหา และอื่นๆ
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับโปรโตคอลข้อมูลของ Google โปรดดูหน้าภาพรวมคู่มือสําหรับนักพัฒนาซอฟต์แวร์และการอ้างอิงโปรโตคอล
ผู้ชม
เอกสารนี้มีไว้สําหรับผู้ที่ต้องการทําความเข้าใจแนวคิดทั่วไปของรูปแบบ XML และโปรโตคอลที่ Google Data API ใช้
แม้ว่าคุณจะต้องการเขียนโค้ดที่ใช้ไลบรารีของไคลเอ็นต์เฉพาะภาษา แต่คุณอาจต้องการอ่านเอกสารนี้เพื่อทําความเข้าใจสิ่งที่เกิดขึ้นภายใต้เลเยอร์นามธรรมของไลบรารีของไคลเอ็นต์
เอกสารนี้จะถือว่าคุณเข้าใจข้อมูลพื้นฐานของ XML, เนมสเปซ, ฟีดที่เผยแพร่ และคําขอ GET
, POST
, PUT
และ DELETE
ใน HTTP รวมถึงแนวคิดของ HTTP ว่า "ทรัพยากร" สําหรับข้อมูลเพิ่มเติม โปรดดูส่วนแหล่งข้อมูลเพิ่มเติมของเอกสารนี้
เอกสารนี้ไม่ได้ใช้ภาษาโปรแกรมใดๆ เลย ไคลเอ็นต์จะโต้ตอบกับเซิร์ฟเวอร์ได้โดยใช้ภาษาโปรแกรมที่ช่วยให้คุณออกคําขอ HTTP และแยกวิเคราะห์การตอบกลับแบบ XML ได้
หากต้องการลองใช้ตัวอย่างในเอกสารนี้โดยไม่เขียนโค้ด คุณอาจพบว่า cURL หรือยูทิลิตีในบรรทัดคําสั่งมีประโยชน์สําหรับข้อมูลเพิ่มเติม โปรดดูหน้าที่กําหนดเองสําหรับยูทิลิตีเหล่านั้นหรือเอกสารเกี่ยวกับการใช้ cURL เพื่อโต้ตอบกับบริการที่ใช้โปรโตคอลข้อมูลของ Google
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงคําขอ HTTP ที่คุณอาจส่งไปยังบริการทั่วไปโดยใช้โปรโตคอล Google Data Protocol API โดยตรง และผลลัพธ์ที่คุณอาจได้รับ โปรดดูตัวอย่างและไลบรารีของไคลเอ็นต์สําหรับตัวอย่างเกี่ยวกับวิธีส่งคําขอโดยใช้ภาษาโปรแกรมต่างๆ สําหรับข้อมูลเกี่ยวกับการใช้โปรโตคอลของ Google กับบริการบางอย่างของ Google โปรดดูเอกสารเฉพาะบริการ
การขอฟีดหรือทรัพยากรอื่นๆ
สมมติว่ามีฟีดชื่อ /myFeed และสันนิษฐานว่าปัจจุบันไม่มีรายการใดๆ อยู่ หากต้องการดูคําขอ ให้ส่งคําขอ HTTP ต่อไปนี้ไปยังเซิร์ฟเวอร์
GET /myFeed
เซิร์ฟเวอร์จะตอบสนอง:
200 OK <?xml version='1.0' encoding='utf-8'?> <feed xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='W/"C0QBRXcycSp7ImA9WxRVFUk."'> <title>Foo</title> <updated>2006-01-23T16:25:00-08:00</updated> <id>http://www.example.com/myFeed</id> <author> <name>Jo March</name> </author> <link href='/myFeed' rel='self'/> </feed>
โปรดทราบว่าถึงแม้ว่าฟีดจะไม่มีรายการใดเลย แต่ก็มีข้อมูลเมตา เช่น ชื่อและชื่อผู้เขียน และยังมีตัวระบุเวอร์ชันในรูปแบบ ETag ของ HTTP ด้วย
การแทรกรายการใหม่
หากต้องการสร้างรายการใหม่ ให้ส่งคําขอ POST
และจัดเตรียม XML ของรายการใหม่ ดังนี้
POST /myFeed <?xml version='1.0' encoding='utf-8'?> <entry xmlns='http://www.w3.org/2005/Atom'> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> <title type='text'>Entry 1</title> <content type='text'>This is my entry</content> </entry>
โปรดทราบว่าคุณไม่ได้ใส่องค์ประกอบ <id>
, <link>
หรือ <updated>
ของ Atom มาตรฐาน เซิร์ฟเวอร์จะสร้างองค์ประกอบเหล่านั้นเพื่อตอบสนองต่อคําขอ POST
ของคุณ นอกจากนี้ โปรดทราบว่าผู้เขียนฟีดไม่จําเป็นต้องเป็นบุคคลเดียวกับผู้เขียนรายการ
เซิร์ฟเวอร์จะตอบสนอง:
201 CREATED <?xml version='1.0' encoding='utf-8'?> <entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='"CUUEQX47eCp7ImA9WxRVEkQ."'> <id>http://www.example.com/id/1</id> <link rel='edit' href='http://example.com/myFeed/1/1/'/> <updated>2006-01-23T16:26:03-08:00</updated> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> <title type='text'>Entry 1</title> <content type='text'>This is my entry</content> </entry>
กําลังค้นหาสตริง
หากต้องการค้นหาข้อความแบบเต็มสําหรับสตริงหนึ่งๆ เมื่อใช้บริการที่รองรับการค้นหาข้อความแบบเต็ม ให้ส่งคําขอ GET
ด้วยพารามิเตอร์ q
ดูข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์การค้นหาได้ที่คําขอการค้นหาในเอกสารอ้างอิงโปรโตคอล
GET /myFeed?q=This
เซิร์ฟเวอร์จะตอบสนองด้วยฟีดที่มีรายการทั้งหมดที่ตรงกับสตริงการค้นหา This
(ในกรณีนี้มีเพียงคําขอเดียว)
200 OK <?xml version='1.0' encoding='utf-8'?> <feed xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='W/"S0wCTlpIIip7ImA0X0QI"'> <title>Foo</title> <updated>2006-01-23T16:26:03-08:00</updated> <id>http://www.example.com/myFeed</id> <author> <name>Jo March</name> </author> <link href='/myFeed' rel='self'/> <entry gd:etag='"CUUEQX47eCp7ImA9WxRVEkQ."'> <id>http://www.example.com/id/1</id> <link rel='edit' href='http://example.com/myFeed/1/'/> <updated>2006-01-23T16:26:03-08:00</updated> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> <title type='text'>Entry 1</title> <content type='text'>This is my entry</content> </entry> </feed>
กําลังอัปเดตรายการ
หากต้องการอัปเดตรายการที่มีอยู่ คุณต้องทําตามขั้นตอนต่อไปนี้
- เรียกดูรายการที่คุณต้องการอัปเดต
- แก้ไขตามต้องการ
- ส่งคําขอ
PUT
พร้อมด้วยรายการที่อัปเดตแล้วในส่วนเนื้อหาของข้อความไปยัง URI การแก้ไขของรายการ URI การแก้ไขจะปรากฏในตัวอย่างก่อนหน้าเป็นแอตทริบิวต์href
ขององค์ประกอบ<link rel='edit'>
นอกจากนี้ คุณต้องระบุ ETag ของรายการดั้งเดิมด้วย เพื่อไม่ให้เขียนทับการเปลี่ยนแปลงของผู้อื่น
ในตัวอย่างต่อไปนี้ เราจะแก้ไขข้อความของรายการจากค่าเดิม ("นี่คือรายการของฉัน") เป็นค่าใหม่ ("นี่คือรายการแรกของฉัน")
PUT /myFeed/1/1/ <?xml version='1.0' encoding='utf-8'?> <entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='"CUUEQX47eCp7ImA9WxRVEkQ."'> <id>http://www.example.com/id/1</id> <link rel='edit' href='http://example.com/myFeed/1/'/> <updated>2006-01-23T16:28:05-08:00</updated> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> <title type='text'>Entry 1</title> <content type='text'>This is my first entry.</content> </entry>
เซิร์ฟเวอร์จะตอบสนอง:
200 OK <?xml version='1.0' encoding='utf-8'?> <entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='"FkkOQgZGeip7ImA6WhVR"'> <id>http://www.example.com/id/1</id> <link rel='edit' href='http://example.com/myFeed/1/'/> <updated>2006-01-23T16:28:05-08:00</updated> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> <title type='text'>Entry 1</title> <content type='text'>This is my first entry.</content> </entry>
โปรดทราบว่า ETag มีการเปลี่ยนแปลง ดูข้อมูลเพิ่มเติมเกี่ยวกับเวอร์ชันของทรัพยากรได้ที่ส่วนการกําหนดเวอร์ชันทรัพยากร (ETag) ในเอกสารอ้างอิงโปรโตคอล
หากต้องการดูรายการใหม่ในบริบท ให้ขอทรัพยากรทั้งหมดอีกครั้งโดยทําดังนี้
GET /myFeed
เซิร์ฟเวอร์จะตอบสนอง:
200 OK <?xml version='1.0' encoding='utf-8'?> <feed xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='W/"D08FQn8-eil7ImA9WxZbFEw."'> <title>Foo</title> <updated>2006-01-23T16:28:05-08:00</updated> <id>http://www.example.com/myFeed</id> <author> <name>Jo March</name> </author> <link href='/myFeed' rel='self'/> <entry gd:etag='"FkkOQgZGeip7ImA6WhVR"'> <id>http://www.example.com/id/1</id> <link rel='edit' href='http://example.com/myFeed/1/'/> <updated>2006-01-23T16:28:05-08:00</updated> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> <title type='text'>Entry 1</title> <content type='text'>This is my first entry.</content> </entry> </feed>
หมายเหตุ: หากไฟร์วอลล์ไม่อนุญาต PUT
ให้ใช้ HTTP POST
แล้วตั้งค่าส่วนหัวการลบล้างเมธอดดังนี้
X-HTTP-Method-Override: PUT
การลบรายการ
หากต้องการลบรายการที่มีอยู่ ให้ส่งคําขอ DELETE
โดยใช้ URI การแก้ไขของรายการ (ตามที่ระบุโดยเซิร์ฟเวอร์ในตัวอย่างก่อนหน้านี้)
หากไฟร์วอลล์ของคุณไม่อนุญาต DELETE
ให้ใช้ HTTP POST
และตั้งค่าส่วนหัวการลบล้างเมธอดดังนี้
X-HTTP-Method-Override: DELETE
เมื่อลบรายการ คุณเลือกได้ว่าจะลบตามเงื่อนไขหรือไม่ (ลบเฉพาะในกรณีที่รายการไม่เปลี่ยนแปลงตั้งแต่ครั้งล่าสุดที่คุณเรียกดู) หรือจะลบโดยไม่มีเงื่อนไข โปรดดูข้อมูลเพิ่มเติมที่หัวข้อการกําหนดเวอร์ชันทรัพยากร (ETag) ของเอกสารอ้างอิงโปรโตคอล หากต้องการลบโดยไม่มีเงื่อนไข ให้ตั้งค่าส่วนหัว HTTP ต่อไปนี้
If-Match: *
ตัวอย่างต่อไปนี้ลบรายการ (หากตั้งค่าส่วนหัวอย่างเหมาะสม)
DELETE /myFeed/1/
เซิร์ฟเวอร์จะตอบสนอง:
200 OK
ทํา GET
อีกครั้งเพื่อดูว่าฟีดไม่มีรายการดังนี้
GET /myFeed
เซิร์ฟเวอร์จะตอบสนองด้วยฟีดที่ไม่มีอะไรนอกจากข้อมูลเมตา ดังนี้
200 OK <?xml version='1.0' encoding='utf-8'?> <feed xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='W/"D0cERnk-eip7ImA9WBBXGEg."'> <title>Foo</title> <updated>2006-01-23T16:30:11-08:00</updated> <id>http://www.example.com/myFeed</id> <author> <name>Jo March</name> </author> <link href='/myFeed' rel='self'/> </feed>
หากลบไม่สําเร็จ เซิร์ฟเวอร์จะตอบกลับพร้อมรหัสข้อผิดพลาด สําหรับข้อมูลเพิ่มเติม โปรดดูรหัสสถานะ HTTP ในเอกสารอ้างอิงโปรโตคอล
คําขอรายการหรือฟีดบางส่วน (ทดลอง)
ในทางตรงกันข้ามกับตัวอย่างฟีดตัวอย่างที่แสดงในเอกสารนี้ ในทางปฏิบัติ ฟีดอาจค่อนข้างซับซ้อน การใช้ API บางอย่างจะช่วยให้คุณขอองค์ประกอบหรือแอตทริบิวต์ที่สนใจได้แทนการนําเสนอแหล่งข้อมูลโดยสมบูรณ์ เมื่อหลีกเลี่ยงการแยกวิเคราะห์และแยกวิเคราะห์ข้อมูลที่ไม่จําเป็นแล้ว คุณจะสามารถปรับปรุงประสิทธิภาพของแอปพลิเคชันไคลเอ็นต์ได้อย่างมาก
หากต้องการขอการตอบกลับบางส่วน ให้ใช้พารามิเตอร์การค้นหา fields
เพื่อระบุองค์ประกอบหรือแอตทริบิวต์ที่ต้องการส่งคืน โปรดดูข้อมูลเพิ่มเติมที่หัวข้อการตอบกลับบางส่วนในเอกสารอ้างอิงโปรโตคอล
ตัวอย่างต่อไปนี้ขอเฉพาะรหัสฟีด ผู้เขียนและชื่อของรายการฟีดแต่ละรายการ
GET /myFeed?fields=id,entry(author)
เซิร์ฟเวอร์จะตอบสนอง:
200 OK <?xml version='1.0' encoding='utf-8'?> <feed xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'> <id>http://www.example.com/myFeed</id> <entry> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> <title type='text'>Entry 1</title> </entry> <entry> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> <title type='text'>Entry 2</title> </entry> </feed>
คุณสามารถใช้พารามิเตอร์ fields
กับคําขอประเภทใดก็ได้ที่ส่งคืนข้อมูล นอกจาก GET
แล้ว ยังรวมถึง POST
และ PUT
(รวมถึง PATCH
ซึ่งใช้เพื่อสร้างคําขออัปเดตบางส่วน)
หมายเหตุ: พารามิเตอร์การค้นหา fields
จะควบคุมเฉพาะข้อมูลที่ส่งกลับมาตามคําขอเท่านั้น และจะไม่ส่งผลต่อข้อมูลที่คุณต้องระบุในเนื้อหาของคําขอ PUT
, POST
หรือ PATCH
ด้านล่างนี้เป็นตัวอย่างของ POST
และ PUT
- เมื่อส่งคําขอ
POST
สําหรับการตอบกลับบางส่วน คุณยังคงต้องระบุข้อมูลเดียวกันกับที่อธิบายไว้ในการแทรกรายการใหม่ ตัวอย่างต่อไปนี้ขอการตอบกลับบางส่วนที่มีเฉพาะชื่อของรายการที่สร้างขึ้นใหม่เท่านั้นPOST /myFeed?fields=title ...data...
เซิร์ฟเวอร์จะตอบสนอง:
200 OK <?xml version='1.0' encoding='utf-8'?> <entry xmlns='http://www.w3.org/2005/Atom'> <title type='text'>Entry 1</title> </entry>
- เมื่อคุณส่งคําขอ
PUT
สําหรับการตอบกลับบางส่วน คุณยังคงต้องระบุเวอร์ชันสําหรับการแก้ไขทรัพยากรแบบเต็มตามที่อธิบายไว้ในส่วนการอัปเดตรายการ ตัวอย่างต่อไปนี้ขอการตอบกลับบางส่วนที่มีเฉพาะค่า ETag ใหม่ของรายการที่แก้ไขPUT /myFeed/1/1?fields=@gd:etag ...data...
เซิร์ฟเวอร์จะตอบสนอง:
200 OK <?xml version='1.0' encoding='utf-8'?> <entry xmlns='http://www.w3.org/2005/Atom' gd:etag='"FkkOQgZGeip7ImA6WhVR"'/>
กําลังอัปเดตช่องที่เฉพาะเจาะจง (ทดลอง)
หาก API ที่คุณใช้รองรับการตอบกลับเพียงบางส่วนและมีช่องที่แก้ไขได้ คุณก็สามารถหลีกเลี่ยงการส่งข้อมูลที่ไม่จําเป็นเมื่อแก้ไขรายการได้ การอัปเดตบางส่วนให้คุณส่งข้อมูลไปยังช่องที่ต้องการเปลี่ยนแปลงเท่านั้น
หากต้องการใช้การอัปเดตบางส่วน ให้ส่งคําขอ PATCH
ไปยัง URI การแก้ไขเดียวกันกับที่คุณใช้ PUT
โดยข้อมูลที่คุณส่งด้วย PATCH
ต้องเป็นไปตามรูปแบบบางประการ แต่ทั้งนี้ กฎมาร์กอัปนั้นยืดหยุ่นพอให้คุณแทนที่ข้อมูลในทรัพยากรเป้าหมาย เพิ่มข้อมูล หรือแม้กระทั่งลบออกได้จากการส่งคําขอเพียงครั้งเดียว
หมายเหตุ: เช่นเดียวกับ PUT
คุณจะต้องระบุ ETag ของรายการเดิมเพื่อไม่ให้มีผลกับการเปลี่ยนแปลงของผู้อื่น
ดูข้อมูลเพิ่มเติมเกี่ยวกับ PATCH
และความหมายในการอัปเดตบางส่วนในเอกสารอ้างอิงโปรโตคอล
ตัวอย่างนี้แสดงคําขออัปเดตบางส่วนที่แก้ไขชื่อรายการ
PATCH /myFeed/1/1/ <entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' gd:etag="EksPTg1Bfyp7IWA6WhJT" gd:fields='title'> <title>New Title</title> </entry>
เมื่อเซิร์ฟเวอร์ได้รับคําขอ PATCH
เซิร์ฟเวอร์จะลบช่องที่ระบุโดยแอตทริบิวต์ gd:fields
ของรายการนั้นๆ (หากมี) จากนั้นจะรวมข้อมูลใดก็ตามที่ระบุไว้ในส่วนคําขอของเนื้อหาด้วยทรัพยากรเป้าหมาย ในตัวอย่างนี้ องค์ประกอบชื่อจะถูกนําออกจากทรัพยากรเป้าหมายก่อน แล้วจึงรวมค่าชื่อใหม่ คําขอนี้จะแทนที่ชื่อเก่าด้วยรายการใหม่อย่างมีประสิทธิภาพ
อย่างไรก็ตาม ความหมายของ PATCH
คือการรวมตัวแทนบางส่วนในทรัพยากรที่มีอยู่ คุณไม่จําเป็นต้องนําช่องออกเพื่ออัปเดตค่า
- หากช่องนี้เกิดขึ้นได้เพียง 1 ครั้งในรายการเป้าหมาย เมื่อรวมแล้ว ช่องในตัวแทนบางส่วนจะเขียนทับช่องที่สอดคล้องกันในรายการเป้าหมาย
- หากช่องมีมากกว่า 1 ครั้งในรายการเป้าหมายได้ เมื่อรวมแล้ว ระบบจะเพิ่มช่องบางส่วนลงในรายการเป้าหมาย
ความแตกต่างระหว่างการผสานช่องที่ซ้ําและไม่ซ้ําจะแสดงด้วยตัวอย่างถัดไป ซึ่งจะเพิ่มชื่อและผู้แต่งใหม่ลงในรายการโดยไม่ใช้แอตทริบิวต์ gd:fields
เพื่อนําช่องใดช่องหนึ่งออกก่อน
PATCH /myFeed/1/1/ <entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' gd:edtag="EksPTg1Bfyp7IWA6WhJT"> <title>A new title</title> <author> <name>Fitzwilliam Darcy</name> <email>darcy@gmail.com</email> </author> </entry>
เนื่องจากการนําเสนอบางส่วนไม่มีแอตทริบิวต์ gd:fields
ระบบจึงไม่นําช่องออก แต่ค่าใหม่สําหรับองค์ประกอบ <title>
และ <author>
จะรวมเข้ากับทรัพยากรเป้าหมาย ดังนี้
- เนื่องจาก Atom อนุญาตให้ใช้ได้เพียง 1 ชื่อต่อรายการ ชื่อใหม่จะเขียนทับค่าที่มีอยู่
- เนื่องจาก Atom อนุญาตให้มีผู้เขียนหลายคนต่อรายการ ผู้เขียนใหม่จึงต่อท้ายรายการองค์ประกอบผู้เขียนที่มีอยู่แล้วในทรัพยากรเป้าหมาย
หมายเหตุ: API บางรายการไม่เป็นไปตามมาตรฐาน Atom เช่น API บางรายการอนุญาตให้มีองค์ประกอบ
<author>
รายการได้เพียง 1 รายการต่อรายการเท่านั้น ส่วนบางรายการใช้ผู้เขียนรายการจากระดับฟีด ซึ่งทําให้ช่องเป็นแบบอ่านอย่างเดียว
หลังจากที่เซิร์ฟเวอร์ประมวลผลคําขอ PATCH
ที่ถูกต้อง เซิร์ฟเวอร์จะส่งคืนรหัสสถานะ HTTP 200
พร้อมกับสําเนาทั้งหมดของรายการที่อัปเดตแล้ว
หากต้องการให้เซิร์ฟเวอร์แสดงผลองค์ประกอบหรือแอตทริบิวต์บางอย่างเท่านั้น คุณสามารถใช้พารามิเตอร์การค้นหา fields
กับ PATCH
เพื่อขอการตอบกลับบางส่วน
แหล่งข้อมูลเพิ่มเติม
เอกสารของบุคคลที่สามต่อไปนี้อาจมีประโยชน์
- ภาพรวมของ Atom จาก IBM
- คําจํากัดความของเมธอด HTTP 1.1 ข้อกําหนดของ
GET
,POST
,PUT
และDELETE
- คําจํากัดความของรหัสสถานะ HTTP 1.1
- วิธีสร้างโปรโตคอล REST
- การสร้างบริการเว็บด้วย REST
- ข้อมูลเบื้องต้นทางเทคนิคเกี่ยวกับ XML
- เนมสเปซ XML ตามตัวอย่าง