Tìm hiểu về RESTful

Xin chào tất cả các bạn đã đến với bài giới thiệu của mình, như tiêu đề đã nói, hôm nay mình xin được viết bài về việc tìm hiểu về RESTful của mình. Dựa trên một bài presentation của một người bạn (mình xin phép được giấu tên bạn) mình cảm thấy chủ đề này rất hay và đã có một vài tìm hiểu về RESTFUL như sau.

1: REST là gì?

Theo như mình tìm hiểu được, REST được ghép bởi những chữ cái đầu tiên của:

  • REpresentational
  • State
  • Transfer

REST lần đầu tiên được giới thiệu vào năm 2000 trong luận văn Tiến sĩ của Roy Fielding (đồng sáng lập giao thức HTTP). Là 1 kiểu kiến trúc lập trình, định nghĩa các quy tắc để thiết kế web service chú trọng vào resource. Mọi thứ trong REST đều được coi là tài nguyên và được định danh thông qua URI (Uniform Resource Identifier), và có thể được biểu diễn thông qua dạng văn bản, XML, JSON... RESTful là những ứng dụng mà có sử dụng kiến trúc REST

2. Những ràng buộc trong REST

Client - Server: Hoạt động theo mô hình Client - Server, việc tách biệt này nhằm đơn giản hóa việc thực hiện các thành phần (kiểu chia để trị), giảm sự phức tạp của ngữ nghĩa kết nối, nâng cao hiệu quả của việc điều chỉnh hiệu năng, tăng khả năng mở rộng của máy chủ.

Stateless: Server và Client không lưu trạng thái của nhau. Với mỗi một request được gửi đi đều phải được đóng gói đầy đủ thông tin để server có thể nhận và hiểu được. Điều này giúp hệ thống dễ phát triển, bảo trì, mở rộng vì không tốn công CRUD trạng thái của Client. Tuy nhiên có mặt hạn chế là làm tăng lưu lượng thông tin cần truyền tải giữa client và server.

Cacheable: Mọi thứ trên web đều có thể được lưu trữ, do đó response phải xác định rõ ràng liệu chúng có thể lưu trữ được hay không, tránh lưu trữ bộ nhớ đệm không phù hợp hoặc lưu trữ các thông tin cũ, không cần thiết.

Layered system: Giảm mức độ phức tạp của hệ thống, giúp các thành phần tách biệt nhau từ đó dễ dàng mở rộng. Với mỗi một lớp chỉ trao đổi trực tiếp với lớp ngay dưới và trên nó.

Code on demande: Đây là "optional" duy nhất trong ràng buộc của REST. Máy chủ có thể tạm thời mở rộng hoặc tùy chỉnh các chức năng của một máy khách bằng cách chuyển mã thực thi, như javascript.

3. Vậy REST bao gồm những gì?

Nếu là một lập trình viên không thể không biết đến CRUD, và nó cũng chính là 4 method được sử dụng bở REST, được thể hiện qua các method như sau:

  • POST (Create): Thêm dữ liệu vào database
  • GET (Read): Xem dữ liệu từ database
  • PUT (Update): Cập nhật dữ liệu vào database
  • DELETE (Delete): Xóa dữ liệu khỏi database
  • PATCH (Thực chất là một phần của PUT)

Trong Rails, REST được viết trong routes với cấu trúc cơ bản như sau:

 resources :users do
   resources :user_subjects
 end

Và các method tương ứng sẽ là:

  • GET: users/:id
  • POST: users/:id/user_subjects
  • PUT/PATCH: users/:id/user_subjects/:id
  • DELETE: users/:id/user_subjects/:id

4. 7 mô tả về thuộc tính của REST API

Kiến trúc REST chỉ đơn giản là tuân theo các nguyên tắc nhất định về cách ứng dụng web được thiết kế - sau đó dẫn đến trang tiếp theo - đại diện cho trạng thái tiếp theo của ứng dụng - rồi tới người dùng.

  • Performance: cách các thành phần tương tác ảnh hưởng như thế nào
  • Modifiability: khả năng thay đổi của thành phần để đáp ứng nhu cầu thay đổi
  • Scalability: có thể hỗ trợ một số lượng lớn các thành phần
  • Portability: khả năng di chuyển của mã chứa dữ liệu
  • Visibility: giao tiếp rõ ràng giữa các thành phần
  • Simplicity: sự đơn giản giữa giao diện tương tác
  • Reliability: độ tin cậy của sự chống lại thất bại ở cấp hệ thống

5. Tại sao nên dùng REST?

Ưu điểm của REST:

  • Thiết kế web trước đây sử dụng SOAP (Simple Object Access Protocol) và WSDL (Web Service Definition Language), tuy nhiên bây giờ REST tối ưu hơn so với 2 phương pháp này.
  • Rõ ràng về URL (REST URL đại diện cho resource xác định chứ không phải hành động)
  • Trả về nhiều định dạng khác nhau như: json, xml, ...
  • Hiệu suất tốt, tin cậy, dễ phát triển.
  • Theo triết lý của web mở

Nhược điểm:

  • Bảo mật kém hơn so với SOAP
  • Do không lưu trạng thái giữa Client - Server nên khối lượng thông tin truyền tải lớn -> tốn tài nguyên
  • Chỉ hoạt động trên giao thức HTTP

6. Vậy, khi nào thì nên sử dụng REST?

Đó là khi ứng dụng của bạn không đặt nặng vào vấn đề bảo mật, hoặc khi máy chủ của bạn không đủ mạnh để có thể kiểm soát tài nguyên thì bạn hãy sử dụng REST.

7. Kết luận

Trên đây là những gì mình tìm hiểu được về REST và RESTful, thiếu sót là không thể tránh khỏi, vậy bất cứ khi nào phát hiện ra lỗi của mình hoặc thiếu sót các bạn hãy nhiệt tình đóng góp để mình có thể sửa và bổ sung. Cảm ơn các bạn!