SOAP is dead, REST is coming

มันเป็นอะไรที่ค่อนข้างสับสนระหว่าง SOA, Web Service, SOAP

เท่าที่ผมเข้าใจ

  • SOA (Service-Oriented Architecture) เป็นแนวคิดที่คล้ายกับ OOP (Object-Oriented Programming แต่ไม่เหมือนซะทีเดียว คือการเอา natural behavior มาจับแนวคิดในการมองการทำงานของโปรแกรม มันเป็นแค่แนวคิด และสามารถเอาไปใช้กับอะไรก็ได้
  • Web Service เป็นการนำ SOA มาใช้กับเว็บ โดยทั่วไปแล้วจะแบ่งการ implement เป็น 2 วิธี คือ Web Service แบบ SOAP กับแบบ REST ซึ่งถ้าเรียก Web Service เฉยๆ ทุกวันนี้จะหมายถึงแบบ SOAP
  • SOAP เป็นโปรโตคอลหนี่งสำหรับ Web Service โดยจะใช้แนวคิด Message Exchange Pattern คืออยากได้อะไรก็ส่งจดหมายน้อยหากันไปเรื่อยๆ โดย message จะเป็นโปรโตคอลของ SOAP เอง และมีฟอร์แมตเป็น XML

SOAP is dead หมายถึง Web Service แบบ SOAP กำลังจะตาย ยืนยันได้จากกระแส Web Service (ซึ่งแฝงความหมายว่าเป็นแบบ SOAP) ที่ใครๆ ก็พูดกันเมื่อ 2-3 ปีก่อน เริ่มจะเงียบ

คิดว่า Web Service แบบ SOAP พยายามเลียนแบบความสำเร็จของ UNIX (โปรแกรมเล็กๆ ช่วยกันทำงาน) แต่พอเอาเข้าจริงแล้วมันกลับซับซ้อนกว่ากันเยอะ

ใน UNIX เรามีแค่ pipe กับ redirect เป็นช่องส่งของ ตัวจดหมายอยู่ในรูป plain text ธรรมดา พอมาเป็น Web Service แบบ SOAP เรามีช่องส่งของซับซ้อนชื่อ SOAP ต้องลงทะเบียนกับไปรษณีย์ชื่อ UDDI และเข้ารหัสจดหมายด้วยรหัส WSDL

อันนี้จะไปโทษ SOAP ก็ไม่ถูก เพราะ requirement มันต่างกันเยอะ UNIX ส่งแค่ text ใน local แต่ Web Service ส่งรูปเสียงวิดีโอสารพัดใน untrusted network ซึ่งก็ต้องมีประเด็นอื่นที่ต้องเอามาคิดอีกมาก แต่เอาเป็นว่ามันทำให้ learning curve สูงจนไม่คุ้มลงทุนเรียน

ตอนนี้จึงเริ่มมีวิธีใหม่ที่เรียกว่า REST (Representational State Transfer) เข้ามาแทนที่

SOAP นั้นเป็นโปรโตคอลแบบ RPC (Remote Procedure Call) ที่เน้นการกระทำหรือ verb เป็นหลัก (เช่น getUser() หรือ addUser()) ส่วน REST จะมองตัว resource หรือ noun แทน ในกรณีของ REST จะใช้ User {} เป็นต้น

ในขณะที่ SOAP เป็นการ extend HTTP ออกไปอย่างมาก REST กลับใช้ความสามารถพื้นฐานของ HTTP (GET, PUT, ...) เป็นส่วนใหญ่ จุดนี้ทำให้ลด learning curve ลงได้เยอะ

เนื่องจาก REST ไม่ได้เป็นสเปกชัดเจนแบบ SOAP เป็นภาพกว้างๆ และค่อนข้างจะไม่มีอะไรใหม่ แอพพลิเคชันปัจจุบันจำนวนมากจึงถือว่าเป็น REST (Accidentially RESTful) ตัวอย่างง่ายๆ คือการสมัคร feed เป็นต้น

คงต้องรอซักพักกว่า REST จะ mature และบอกได้ว่ามันแทน SOAP ได้มั้ย

จบแล้ว (เขียนผิดก็แก้ให้ด้วยนะครับ)

References

  • XML.com - What Is Service-Oriented Architecture บทความนี้แยกแยะความแตกต่างของ SOA, Web Service, SOAP และ REST ผมพอเข้าใจแนวคิดก็จากบทความนี้ล่ะ
  • Tim Bray - Styles: Beyond WS and REST ผมเป็นแฟน Tim Bray มานาน เห็นด้วยกับเค้าที่ว่า Web Service เป็นคำที่แย่ บล็อกอันนี้บอกว่าทำไมควรใช้ REST
  • Tim Bray - The End of SOA อันนี้สั้นๆ ต่อจากอันบน "SOA isn’t the future, Web style is."
  • Loud Thinking: Don't blame me, I'm just a contractor David Heinemeier Hansson คนสร้าง Ruby on Rails เสียดสี WS-* ไว้ว่ามันเหมือน Death Star

Comments

SOAP ไม่ได้ตาย

  • SOAP เป็นวิธีเก็บข้อมูลทุกประเภทให้อยู่ในรูปแบบของ XML โชคร้ายนิดที่มันอลังการณ์เกินไป เลยไม่ค่อยมีใครใช้ ที่แย่สุดก็คือมาตรฐานหลากหลายจริงๆ
  • WSDL เป็นข้อกำหนดข้อมูลที่เก็บใน SOAP

UDDI ไม่จำเป็น มีก็ดี สิ่งที่ทำให้ WS ดูดีคือ WSDL เพราะมันทำให้ข้อจำกัดเรื่องภาษาหมดไป แค่มี WSDL ก็เอาไปสร้างไลบรารีฝั่งไคลเอนต์ได้สบายๆ ส่วน SOAP ที่ตอนแรกพูดถึงกันมากเพราะว่ามันดูน่าสนใจดีที่สามารถส่ง object ข้ามภาษาได้จริงๆ ซะที ก่อนหน้านั้นยึดติดกับ IDL ของ CORBA ในขณะที่ความจริงแล้วมีไม่กี่คนที่เคยเห็นว่า SOAP เป็นยังไง และต้องทำอะไรกับ SOAP เพราะขั้นตอนพวกนี้ถูกเขียนขึ้นเป็นคำสั่งสำเร็จรูปไปเรียบร้อย

แต่ก็เพราะ WSDL มันยาวซะเหลือเกิน น้อยคนจะเคยเขียน สุดท้ายแล้วงานพวกนี้ก็หายไปหมด เพราะ IDE สร้างให้ได้ทั้งหมด (ยกเว้นภาษาที่เป็น dynamic type อย่าง Python และ Ruby)

REST มันดูง่ายกว่าก็จริง แต่มันก็ไม่สะดวกนักกับการที่จะต้องสร้าง URL ขึ้นมาเอง และยังต้องคิดวิธีเข้ารหัสข้อมูลเืพื่อส่งระหว่างกัน ตอนนี้มีน่าสนใจหลายตัว เช่น XML-RPC JSON และ BitTorrent การเข้ารหัสพวกนี้เก็บได้แค่ข้อมูลพื้นฐานพวก เลข อักษร ลิสต์ และดิกชั่นนารี เพราะฉะนั้นมันก็ส่ง object ไปด้วยตัวเองไม่ได้ ต้องสมมติกันเอาเอง

สรุปว่า SOAP ยังไม่ตาย มันแค่กลืนหายเข้าไปในกลไกพื้นฐานข้างล่าง อย่างน้อยพวก Enterprise ก็ยังเปิดกว้าง สิ่งที่มาแรงจริงๆ คือ WSRF

ของพวกนี้สุดท้ายแล้วจะรอดไม่รอดก็อยู่ที่ IDE เหมือน RoR ไง ลองนึกดูถ้าเมื่อวานใช้ vi ค่อยๆ เขียน มันจะน่าประทับใจเหรอ ไอ้ที่พิมพ์ๆ ไปน่ะไม่น้อยนะ แต่มันถูกเขียนขึ้นโดยใช้ความสามารถของ IDE ทั้งสิ้น เพราะงี้เมื่อวานเลยไม่ได้เขียนโค้ดให้ดู vi มันเขียนเร็ว แต่โค้ดน่ะมันยาว ค่อยๆ พิมพ์ก็ยังนานอยู่ดี ไม่ได้แข่งกันเขียนสั้นนี่หว่า

มั่วไปใหญ่แล้ว SOAP ไม่ตายหรอกครับ

SOAP มันมี header/body/fault อะไรเยอะแยะมาให้พร้อม สามารถทำอะไรหลายๆอย่างได้

REST มันเด็กๆ เอาไว้ใช้เล่นๆ แบบไม่ต้องคิดมาก ที่พูดงี้ไม่ใช่ว่า REST จะทำสิ่งที่ SOAP ทำไม่ได้ แต่ถ้าจะทำให้มันทำได้ ก็ต้องมา implement ไอ้สิ่งต่างๆที่ SOAP มีให้ลงไปเอง เสียเวลาเสียเงินเสียรู้เสียโง่ ทำไม่มีดีมี bug แถมมาด้วย คำว่า standard ก็จะหายไปอีก ชาวบ้านจะมาใช้ของเราก็ต้องมารู้การ handle สิ่งต่างๆเอง

สุดท้าย ขอนั่งยัน ยืนยัน นอนยัน SOAP ยังอีกไกล