Web Services: REST vs. SOAP

อ้างอิง: Blognone: REST vs. SOAP Web Services โดย krunapon

ผมอ่านข่าวนี้ที่ blognone ด้วยความรู้สึกอยากจะตะโกนในใจว่า Take the Red Pill! Welcome to the Real World! ยังไงก็ไม่รู้

ใช่ครับ ถึงมันจะไม่ใช่ข่าวที่มีการประกาศใหญ่โตมโหฬาร (แบบ MS, Sun, IBM หรือว่าบริษัทชื่อใหญ่ๆ โตๆ ออกมาให้การสนับสนุนหรือว่าจับมือกันให้ความร่วมมือในเรื่องอะไรสักอย่าง) ที่อาจจะ catch ความสนใจและ convince คนที่อยู่ใน mainstream ได้ง่ายกว่า แต่ว่าก็ดีเหมือนกันที่คนเริ่มลืมตามองความเป็นจริงอันโหดร้ายของ SOAP-based Web Services มากขึ้น

ในหลักการแล้ว SOAP มันก็เป็น protocol ที่ดีนะ แต่ว่าในความเป็นจริงแล้ว เนื่องจากความต้องการของการใช้ Web Services ในปัจจุบัน มันเป็นการเข้าถึง resource แบบ CRUD เสียเป็นส่วนมาก การใช้งาน SOAP-based ในความรู้สึกของผม มันเลยกลายเป็นการขี่ช้างจับตั๊กแตนไปโดยใช่เหตุ และจะต้องมีองค์ประกอบอะไรต่างๆ มากมาย อีกทั้งปัญหาอย่างหนึ่งที่ตามมาในโลกความเป็นจริง ก็คือ ความหลากหลายของข้อมูล ความร้อยพ่อพันแม่ของ representation ทำให้การกำหนดมาตรฐานของ SOAP นั้น นับวันมันจะมีแต่ใหญ่ขึ้น และ bloated ขึ้นอย่างใช่เหตุ …. วิธีการ scale ของ SOAP มันสร้างความยุ่งยากและลำบากเอาเรื่อง

ก็เลยทำให้ตัว S ใน SOAP ซึ่งควรจะย่อมาจาก Simple กลายเป็นเรื่องตลก เพราะว่ามันเป็นทุกอย่าง ทุกอย่างจริงๆ นอกเหนือจาก Simple มันมีทุกอย่าง นอกจาก Simplicity

ที่เขียนนี่ ไม่ได้แปลว่า SOAP ไม่ดี หรือว่า REST คือคำตอบสำหรับทุกอย่างนะ ใครที่รู้จักผมจะรู้ดีว่า สำหรับกรณีแบบนี้ ผมแทบไม่เคย claim คำว่า 100% เพราะว่า exception มันมีแทบทุกเรื่องน่ะแหละ ยากที่จะหาอะไรบางอย่างที่มันเป็นจริงในทุกกรณี .. แต่ว่า exception มันจะต้อง catch และ handling แยกต่างหาก ไม่ใช่ยกมาพูดเป็น counter example หักล้างกับ general cases อยู่เรื่อยไป จนลืม handling กรณี “ทั่วไป” (general cases) อีก 80% ของกรณีทั้งหมด… เช่นกรณีนี้ คือ (น่าจะกว่า) 80% ของความต้องการการใช้งาน Web Services ในปัจจุบันนั้นคือ request resources แบบ remote ซึ่ง REST มันดีกว่าจม และไปอยู่บน (= ใช้ความสามารถของ) protocol ที่มาตรฐานมาก คือ HTTP อีกตะหาก

ในขณะที่บริษัทใหญ่ๆ ที่ชอบนั่งกำหนด standard ก็ยังคงบ้ากับ SOAP-based standard spec กันต่อไป บริษัทใหญ่ๆ ที่ต้องทำงานให้บริการข้อมูลจริงในโลกความเป็นจริง เช่น Google หรือ Amazon (ที่ Web Services มีผลอย่างมากกับ model ทางธุรกิจของตัวเองด้วย) กลับมีแนวโน้มจะกลับมาใช้ REST เพิ่มขึ้นเรื่อยๆ นี่ยังไม่นับถึงบริษัทเล็กๆ อีกนับร้อยนับพัน ที่ต้องให้บริการข้อมูลจริง เชื่อมโยงจริง ใช้งานจริง เป็นส่วนหนึ่งของระบบนิเวศน์ของข้อมูลขนาดใหญ่จริง .. ที่ใช้งาน WS แบบ REST มากกว่าที่จะเลือก SOAP (คนใช้ SOAP มันก็มีนะ ไม่ใช่ไม่มี)

การทำงานในโลกความเป็นจริง บางทีมันมีอะไรที่มากกว่า เรียบง่ายกว่า และ work กว่าการทำงานตามกฏเกณฑ์ข้อกำหนดข้อบังคับ ที่นั่งกำหนดกันบนกระดาษ ด้วยความรู้สึกที่ว่า ถ้าเป็นแบบนี้การทำงานจริงจะราบรื่น การทำงานจริงจะไม่มีปัญหา ฯลฯ หลายครั้ง สุดท้ายก็ต้องกลับสู่ความเรียบง่าย ด้วยการกลับมาดูธรรมชาติของตัวงานจริง

และ SOAP vs. REST ก็เป็นอีกบทพิสูจน์หนึ่ง …. ที่ยังคงดำเนินต่อไป

ปล. จริงๆ ผมเคยเขียน blog เรื่อง SOAP หรือว่าทำนองบ่นๆ เรื่อง SOAP ไปแล้วหลายครั้ง

เทอมหน้าวิชา WWW Programming ในส่วนของ Web Services จะสอน REST Web Services เป็นหลัก ส่วน SOAP คงจะยกยอดไป “ถ้ามีเวลา” แทน

[update 1]: ลืมไป ว่าเมื่อไม่นานมานี้ Tim Bray จาก Sun Microsystems ได้มาพูดถึง REST ไว้ด้วย และน่าสนใจทีเดียว และเขียนไว้หลายบทความ รวมถึงการให้สัมภาษณ์หลายครั้งด้วย ลองหาอ่านๆ ได้จาก blog ของเค้าครับ

  • tbray.org (link นี้เฉพาะในส่วนของ Web Services Technology เท่านั้นนะครับ) ภายในแต่ละ link ค่อนข้างยาวทีเดียว น่าอ่านครับ
  • InfoQ: Tim Bray on Rails, REST, XML, Java and More อันนี้สัมภาษณ์
  • Tim Bray: Issues in Web Frameworks เป็น PDF ของ slide ที่ Bray ไปพูดเรื่องเกี่ยวกับ Web Frameworks ครับ มีเรื่อง Web Services ด้วย

[update 2]: เพิ่งอ่านที่ James Clark เขียนเรื่อง Bytes not Infosets ที่ remark น่าสนใจหลายเรื่องเหมือนกัน ที่อาจจะไม่เกี่ยวกับ SOAP vs. REST ตรงๆ แต่ว่าโดนหางเลข เนื่องจาก WS-* แบบ SOAP มัน emphasis กับ XML infosets มากเลย …. และ James Clark (คนที่เราน่าจะฟังมากที่สุดคนนึงในเรื่องของ XML) ก็มี remark ว่า

My conclusion is this: one aspect of the WS-* approach that should not be carried over to the REST world is the emphasis on XML infosets.

เห็นด้วยไม่รู้จะเห็นด้วยยังไง

[update 3]: minor clarifications added