REST กับ RESTful API ต่างกันนะรู้ยัง

Sakul Montha
Jun 1 · 3 min read

สวัสดีนักอ่านทุกท่านครับ สืบเนื่องมาจากผมมีความจำเป็นต้องอธิบายเรื่อง REST แล้วก็นึกสงสัยขึ้นมาว่า เออ แล้ว REST กับ RESTful API มันเหมือนกันรึเปล่านะ มันต้องไม่เหมือนสิชื่อมันไม่เหมือนกัน เอ๊ะ หรือเหมือน แค่ย่อชื่อเฉย ๆ

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

บทความนี้ไม่ได้อธิบายถึงวิธีการสร้าง Web Service นะครับ

REST

REST มาจาก Representational state transfer ส่วน API มาจาก Application Program Interface โดยที่ REST เป็นรูปแบบของสถาปัตยกรรมซอฟต์แวร์ ที่คุณ Roy Fielding Ph.d ได้อธิบายไว้ในวิทยานิพนธ์ ตั้งแต่ปี ค.ศ. 2000, ผ่านมาแล้วเกือบ 20 ปี
REST เป็น “รูปแบบสถาปัตยกรรม” ที่ใช้ประโยชน์จากเทคโนโลยี Web protocol เพื่อใช้ในการสร้าง Web Service.

Architectural properties

ข้อกำหนดของ REST architectural style ทั้ง 7 ประกอบไปด้วย

  • Performance: ประสิทธิภาพในการโต้ตอบ
  • Scalability: มีความสามารถในการปรับขยายได้ทำให้สามารถรองรับส่วนประกอบจำนวนมาก
  • Simplicity: ความเรียบง่ายของอินเตอร์เฟซที่เหมือนกัน
  • Modifiability: ความสามารถในการปรับเปลี่ยนส่วนประกอบเพื่อตอบสนองความต้องการที่เปลี่ยนแปลง (แม้ในขณะที่แอปพลิเคชันทำงานอยู่)
  • Visibility: การมองเห็นการสื่อสารระหว่าง Component ผ่าน Service agents
  • Portability: ง่ายต่อการโยกย้ายในส่วนของ Program และ Data
  • Reliability: ความน่าเชื่อถือในการต้านทานความล้มเหลวในระบบ

RESTful Web Services (RWS)

Web Service ที่ใช้ REST architectural style เป็นที่รู้จักกันในชื่อ RESTful web services (RWS). RESTful Web service อนุญาตให้ระบบ Request และเข้าถึง Resource บนเว็บโดยใช้ชุดคำสั่งที่กำหนดเอาไว้ล่วงหน้า โดยที่การโต้ตอบของระบบที่ใช้ REST จะอยู่บนพื้นฐานของ Hypertext Transfer Protocol (HTTP). Request จะส่งคำขอไปยัง URI ที่กำหนด และล้วงเอา response กลับมาเป็น Payload ในแบบ HTML, XML, JSON หรือ format อื่น ๆ

RESTful ประกอบไปด้วย

Client ผู้ที่จะเข้ามา Request resources
Server ผู้เป็นผู้ให้บริการ Resoueces

Architectural constraints of RESTful API

6 ข้อกำหนดของ RESTful API ซึ่งถือเป็นสิ่งที่สำคัญในการสร้าง RESTful API ตามมาตรฐานซึ่งทำให้ง่ายต่อการพัฒนา และทำให้เป็นที่ยอมรับ (หากไม่ทำตามให้ครบทั้ง 6 ข้อจะไม่ถือว่าเป็น RESTful API ยกเว้น optional)

  • Client-server architecture: Client ไม่จำเป็นต้องรู้อะไรเกี่ยวกับ Business logic ภายใน ไม่มีหน้าที่เกี่ยวกับการจัดเก็บข้อมูล ส่วน Server มีหน้าที่เก็บ Resource และไม่จำเป็นต้องรู้อะไรเกี่ยวกับ UI Frontend หรือสถานะของผู้เรียก
  • Statelessness: ส่ง Request รับ Response จาก Server แล้วเลิก
  • Cacheability: สามารถ cache response ได้ การ Response จะต้องสามารถกำหนดได้ว่าจะ Cache หรือไม่ เพื่อป้องกันไม่ให้ User หรือ Client ได้รับข้อมูลเก่า หรือท่านสามารถดูเพิ่มเติมเรื่อง idempotent ได้ที่นี่
  • Layered system: ปกติ Client ไม่รู้ว่าที่ทำการเชื่อมต่อนั้น ได้เชื่อมต่อโดยตรงกับ Server ปลายทาง หรือไปยังตัวกลางอื่น ๆ ระหว่างทาง, Server ตัวกลางควรสามารถปรับปรุงความสามารถในการขยายระบบได้ โดยการใช้งานการทำ Load balance
  • Code on demand (optional): Server สามารถขยายได้ชั่วคราว หรือปรับแต่งการทำงานของไคลเอนต์ได้ ตัวอย่างเช่น ทำ client-side scripts ใน JavaScript
  • Uniform interface: ถือเป็นข้อสำคัญจะที่แยกระหว่าง REST API และ Non-REST API มันแสดงให้เห็นถึงวิธีการที่จะคุยกับ Server โดยไม่คำนึงถึงประเภทของอุปกรณ์ หรือประเภทของ application
    Uniform interface ได้แยกออกไปอีก 4 อย่าง
    1. Resource-Based: เช่น API/users
    2. Manipulation of Resources Through Representations: เช่น User get user_id หรือ Request list of users แล้วทำการ Delete หรือ Modify user
    3. Self-descriptive Messages: แต่ละ Message มีข้อมูลเพียงพอที่จะนำมาอธิบายวิธีการ Process message เพื่อให้ Server ทำการวิเคราะห์ได้ง่าย
    4. Hypermedia as the Engine of Application State (HATEOAS): จำเป็นต้องมี Links สำหรับทุก ๆ Response เพื่อให้ Client สามารถค้นหาได้ง่าย

Standard operations = GET, HEAD, POST, PUT, PATCH, DELETE, CONNECT, OPTIONS and TRACE


Conclusion

REST เป็นรูปแบบของสถาปัตยกรรมซอฟต์แวร์ ที่ใช้ประโยชน์จากเทคโนโลยี Web protocol เพื่อใช้ในการสร้าง Web Service ขณะที่ RESTful มักใช้เพื่ออ้างถึง Web Service ที่ใช้สถาปัตยกรรม REST

REST เป็นกระบวนทางสถาปัตยกรรม หรือ architectural paradigm.
RESTful เป็นการใช้ หรืออ้างถึงสถาปัตยกรรม หรือ using that paradigm.

การที่จะเรียก RESTful API ได้นั้นก็จำเป็นที่จะต้องทำ 6 ข้อด้านบนให้ครบด้วย (ที่จริงเหลือ 5 เพราะมีข้อที่เป็น Optional)

ที่จริงตรงนี้ถือเป็นความรู้รอบตัว แต่ถ้าภาษาพูดกันระหว่าง Dev หรือ Partner ไม่ว่าคุณจะเรียก REST หรือ RESTful API ชาวบ้านเค้าก็เข้าใจนั่นแหละครับ

คุณสามารถไปอ่านเรื่อง Method ต่าง ๆ ที่ผมเคยเขียนไว้ได้ที่ Method POST, PUT และ PATCH ต่างกันยังไง อย่าลืมนะครับเลือกให้ให้ให้ตรง Method กันด้วย

ผิดพลาดประการใดขออภัยมา ณ ที่นี้ด้วยครับ


Sakul Montha

Written by

Software Engineer Team Lead, A man who doesn’t believe in TDD, but trust in Unit test.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade