Atom Publishing Protocol

พักนี้เจอชื่อ AtomPub หรือชื่อเต็ม Atom Publishing Protocol (APP) ค่อนข้างบ่อย เลยอ่านเสียหน่อย

AtomPub เป็นหนึ่งในสองมาตรฐานย่อยของ "Atom" อีกมาตรฐานหนึ่งใช้กันแพร่หลายพอสมควรคือ Atom Syndication Format (ถ้าไม่เคยเห็น ลองกดได้)

ตามชื่อที่ทำตัวหนาไว้

  • Atom Syndication Format เป็นฟอร์แมตของเนื้อหา
  • Atom Publishing Protocol เป็นโปรโทคอล (ที่ใช้รับส่งข้อมูลแบบ Atom Syndication Format)

มันเป็นส่วนเติมเต็มซึ่งกันและกัน เหมือน HTML กับ HTTP

Atom Syndication ออกมาสักระยะแล้ว (เคยเขียนถึงไปแล้วด้วย RSS 2.0 vs Atom 1.0) ส่วน AtomPub ออกมาตั้งแต่ปี 2006 ถึงจะยังไม่ดังมากแต่ก็มีคนใช้อยู่หลายราย ที่เด่นๆ ก็คือ Google Data API ซึ่งเป็น AtomPub + extension ของกูเกิลเอง

ทีนี้มาดูรายละเอียดของ AtomPub กัน

เอกสารเกี่ยวกับ AtomPub ที่ดีที่สุดที่ผมหาได้คือ Getting to know the Atom Publishing Protocol ของ IBM developerWorks อ่านง่ายมาก

AtomPub คือโปรโทคอลที่ทำ CRUD operation (create, read, update, delete) บนโปรโทคอล HTTP อีกชั้นหนึ่ง (เป็น RESTful)

  • Create = POST
  • Read = GET
  • Update = PUT
  • Delete = DELETE

ส่วนฟอร์แมตของข้อมูลที่รับส่งกันของ AtomPub ก็คือ Atom นั่นเอง (เป็น XML ธรรมดา)

ส่วนขั้นตอนการสื่อสาร จะคล้ายๆ กับ UDDI/WS-* แต่ไม่เลอะเทอะเท่า ตัวอย่างดังนี้ (ผมไม่ใส่โค้ดเพราะขี้เกียจ ตามไปอ่านใน developerWorks กันเองถ้าสนใจ)

  1. client ขอดูบริการที่ server มีให้ (เช่น โพสต์บล็อก พ็อดแคสต์ หรือรูปภาพ พูดง่ายๆ ว่าเป็น content type)
    __GET__ /servicedocument
  2. server ตอบชื่อบริการมาเป็น Atom (ในสเปกของ AtomPub เรียกบริการว่าเป็น collection)
  3. client เลือกสร้าง content ใหม่ขึ้นมา 1 ชิ้น ตาม type ที่มี เช่น บล็อก
    __POST__ /blog/entries
  4. ตอนนี้ server จะมีเนื้อหาชนิด blog 1 ชิ้น
  5. ถ้า client อยากรู้ว่า ปัจจุบันมีเนื้อหาอะไรบ้าง ก็สั่ง listing
    __GET__ /blog/entries
  6. server ตอบมาเป็น Atom (มีเนื้อหาเหมือนกับ Atom ในบล็อกอันนี้ คือมีหลาย entry)
  7. client อยากขอเนื้อหาเฉพาะ entry
    __GET__ /blog/entries/1
  8. server ตอบมาเป็น Atom แต่มี entry เดียว
  9. client อยากแก้ไขเนื้อหาของ entry อันเมื่อกี้
    __PUT__ /blog/entries/1 (ตามด้วยเนื้อหาที่ต้องการ ฟอร์แมตเป็น Atom)
  10. server อัพเดตเนื้อหา
  11. client อยากลบเนื้อหา entry ที่ระบุ
    __DELETE__ /blog/entries/1 HTTP/1.1

เนื่องจาก Atom เป็น XML และการอ้างตำแหน่งใช้ระบบพาธ ผมเลยรู้สึกว่า AtomPub นี้ใกล้เคียงกับ XSLT + XPath อยู่บางส่วน

บทความตอนที่สองของ developerWorks พูดถึงการทดลองใช้ AtomPub แบบจริงๆ ไม่ใช่สเปก

ปัจจุบัน implementation ที่มีคือ

  • Apache Abdera ซึ่งเป็นโค้ดที่ IBM บริจาคให้ Apache Incubator แน่นอนว่าเป็นจาวา (อ๊ากกกกกกก......)
  • AtomServer เป็น Atom data store พัฒนาต่อจาก Abdera + Spring
  • WordPress 2.3 ขึ้นไป
  • MovableType 4.1 ขึ้นไป
  • WCF ใน .NET Framework 3.5 (announcement)
  • BlogSvc AtomPub server for WCF and .NET (open source - C#)
  • Microsoft "Astoria"
  • mod_atom สำหรับ Apache (C)
  • amplee - Python
  • php-atompub-server
  • django-atompub - Python/Django
  • Atomojo - Java Atom Server
  • Atomic - Client-side implementation (Firefox Add-ons)
  • Google Data API - ไม่ใช่ AtomPub เป๊ะแต่เป็น superset ของ AtomPub บริการที่ใช้ได้เช่น Blogger, Google Calendar, YouTube
  • Windows Live
  • เข้าใจว่าด้วยอิทธิพลของ Blogger ทำให้ blog editor บางตัวเริ่มสนับสนุน AtomPub แล้ว (ในฐานะคู่แข่งใหม่ของ MetaWeblog API) เช่น Ecto, Mars Edit, Windows Live Writer
  • CMIS (ส่วนที่เป็น REST) ก็พัฒนาต่อจาก AtomPub เหมือน GData

ของ Drupal เหมือนยังไม่มี

ลิงก์อื่นๆ ที่เกี่ยวข้อง

Keyword
Submitted bysugreeon Sun, 09/21/2008 - 17:01

มีความพยายามจะทำโมดูล gdata แต่ไม่สำเร็จ

Submitted bymkon Sun, 09/21/2008 - 17:06

@sugree ดูจาก vision ของ Dries เรื่อง multiple output type คิดว่างานช้างเลยแหละ