RESTful api คืออะไร

เคยได้ยินกันไหม เดี๋ยวก็ REST API เดี๋ยวก็ RESTful API วันนี้เราจะมาดูกันว่าทั้งสองมันคืออะไร

Rest (Representational state transfer) – เป็นรูปแบบสถาปัตยกรรมซอฟต์แวร์(architecture) ที่ใช้ประโยชน์จากเทคโนโลยี Web Protocol เพื่อใช้ในการสร้าง Web Service ซึ่งเจ้าตัว Rest ถูกพัฒนาโดย Roy Fielding Ph.d ตั้งแต่ปี ค.ศ.2000

restdesign

Architectural properties

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

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

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

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 สามารถค้นหาได้ง่าย

HTTP Method ที่สำคัญ

  1. Get เป็นการร้องขอข้อมูลจาก resource
  2. Post เป็นการสร้างข้อมูลใหม่ใน resource
  3. Put เป็นการอัพเดตข้อมูลที่มีอยู่แล้ว หรือสร้างใหม่ resource
  4. Delete เป็นการลบข้อมูลที่มีอยู่แล้วใน resource

HTTP Response Status Code

2xx (success code)

  • 200 OK – มาตรฐาน HTTP response success สำหรับ GET, PUT หรือ POST
  • 201 Create – respose สำหรับข้อมูลที่ถูกสร้างขึ้นใหม่ ใช้สำหรับ POST
  • 204 No Content – response สำหรับ request ที่ดำเนินการ success แล้วไม่ return ข้อมูลกลับมา

3xx (Redirection)

  • 304 Not Modified – บอกว่า client ได้รับการ response แล้วอยู่ใน cache และไม่จำเป็นต้องส่งข้อมูลเดิมอีกครั้ง

4xx (Clien Error)

  • 400 Bad Request – request ที่ส่งมาโดย client นั้นไม่ถูกดำเนินการ
  • 401 Unauthorized – client ไม่ได้รับอนุญาตในการเข้าถึง resource และควรจะ request ใหม่ด้วย credential
  • 403 Forbidden – บ่งบอกว่า request นั้นถูกต้องและ client ได้รับการอนุญาต แต่ client ไม่ได้รับอนุญาตให้เข้าถึง resource ด้วยเหตุผลบางประการ
  • 404 Not Found – resource ที่ request มานั้นไม่ว่างใช้งานตอนนี้
  • 405 Gone – resource ไม่มีอยู่แล้ว หรือถูกย้ายไปที่อื่น

5xx (Server Error)

  • 500 Internal Server Error – request ถูกต้อง แต่ server มีความสับสนและจะบริการด้วยเงื่อนไขที่คาดการณ์ไม่ได้
  • 503 Service Unavailable – server ใช้การไม่ได้ (โดยส่วนใหญ่ server อยู่ในช่วงบำรุงรักษา)

ตัวอย่างเครื่องมือที่ใช้ทดสอบ RESTful API

restful-api

Conclusion

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

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

Cr. Sakul Montha, Phayao Boonon, WikipediaArnodora

4Xtreme