Tìm hiểu về RESTful

REST, RESTful là gì?

REST viết tắt cho REpresentational State Transfer Khái niệm về 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 tài nguyên Mọi thứ trong REST đều được coi là tài nguyên và được định danh thông qua URI, 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

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, 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: Hiểu đơn giản là 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. Khả năng caching: Các response có thể lấy từ cache. Bằng cách cache các response, server giảm tải việc xử lý request, client cũng nhận được thông tin nhanh hơn. Chuẩn hóa Interface: Nhằm đơn giản hóa và tách biệt kiến trúc, cho phép từng phần phát triển độc lập,, người phát triển đã tạo ra API cơ bản để thiết kế bất kỳ dịch vụ REST nào (dù là web hay mobile thì đều có thể kết nối vào được). Tuy nhiên khi chuẩn hóa thì ta không thể tối ưu từng kết nối được. Phân lớp hệ thống: 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ó.

Tại sao nên dùng 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ư: html, xml, ...
  • Code ngắn gọn dễ hiểu
  • Hiệu suất tốt, tin cậy, dễ phát triển.

Resources

Do REST tập trung vào tài nguyên, nên ta sẽ tìm hiểu qua một chút về tài nguyên trong REST Các đặc tính của Resource:

  • Hiện thị dữ liệu: Dữ liệu có thể được thể hiện ở nhiều dạng khác nhau ( binary, JSON, XML .v.v)
  • Nhận diện rõ ràng: Mỗi URL tại một thời điểm chỉ trả về 1 tài nguyên xác định.
  • Dữ liệu điều khiển : cache-control.
  • Dữ liệu mô tả (metadata) : Kiểu nội dung, lần cập nhật mới .v.v

REST trong Rails

Sử dụng các phương thức HTTP một cách rõ ràng

Trong HTTP có các phương thức chuẩn gọi là verb: GET: Truy cập dữ liệu POST: Tạo ra dữ liệu mới PUT: Cập nhật dữ liệu DELETE: Xóa dữ liệu

URI giống cấu trúc thư mục

URI trong RESTful phải tự mô tả, hoặc tham chiếu được đến các tài nguyên liên quan. Mỗi tài nguyên chỉ có một URI duy nhất. Với URI có cấu trúc như thư mục cho phép nhà phát triển dễ dàng trong việc cài đặt service của mình hướng vào một loại tài nguyên cụ thể nào đó. Ví dụ:

http://www.myservice.org/discussion/topics/{topic}
http://www.myservice.org/discussion/2008/12/10/{topic}

Controller chuẩn

Rails hỗ trợ tạo routes theo chuẩn RESTful thông qua phương thức resource VD:

resources :users

Khi chạy lệnh rails routes ở Terminal sẽ hiện ra:

$ rails routes
    Prefix Verb   URI Pattern           Controller#Action
user_index GET    /user/index(.:format) user#index
 new_users GET    /users/new(.:format)  users#new
edit_users GET    /users/edit(.:format) users#edit
     users GET    /users(.:format)      users#show
           PATCH  /users(.:format)      users#update
           PUT    /users(.:format)      users#update
           DELETE /users(.:format)      users#destroy
           POST   /users(.:format)      users#create

Mã phản hồi HTTP

Chúng ta đều biết rằng nếu cố gắng một trang không tồn tại, server sẽ trả lại trang 404 Page not Found. Nếu chúng ta làm rối tung code rails lên, server sẽ trả lại lỗi ứng dụng 500 Application Error. Đây là mã phản hồi mà server gửi cho bạn để biết điều gì đang xảy ra, sau đây là các mã HTTP:

200 OK Nhận được từ phương thức GET, POST hoặc DELETE. Có nghĩa là yêu cầu đã được thực hiện thành công 201 Created Thông báo phương thức POST đã tạo thành công đối tượng 404 Not found Nhận được từ phương thức GET, POST hoặc DELETE. Không tìm thấy trang 406 Not Acceptable Lỗi này chỉ ra bạn không có quyền truy xuất tài nguyên nayg 500 Internal Server Error Có một lỗi rất lớn đang xảy ra

Kết luận