12/08/2018, 15:15

REST trong Rails

Đầu tiên chúng ta cần tim hiểu REST là gì REST là viết tắt của REpresentational State Transfer, là một kiến trúc lập trình được sử dụng trong giao tiếp giữa client và server, định nghĩa các quy tắc chú trọng vào tài nguyên hệ thống. REST được trình bày lần đầu bởi Roy Thomas Fielding vào năm ...

Đầu tiên chúng ta cần tim hiểu REST là gì

REST là viết tắt của REpresentational State Transfer, là một kiến trúc lập trình được sử dụng trong giao tiếp giữa client và server, định nghĩa các quy tắc chú trọng vào tài nguyên hệ thống. REST được trình bày lần đầu bởi Roy Thomas Fielding vào năm 2000. Ý tưởng của ông là tạo ra tập hợp các quy tắc mà tất cả các lập trình viên phải tuân theo. Nói một cách dễ hiểu là hầu như những ứng dụng hiện nay đều sử dụng 4 thao tác với cơ sở dữ liệu là: tạo(create), sửa(edit), cập nhật(update), xóa(delete). REST là các quy tắc, ràng buộc mà lập trình viên nào cũng phải tuân theo mỗi khi tạo ra một ứng dụng có 4 chức năng này.

RESTful là gì?

RESTful là tên gọi của các ứng dụng được phát triển dưới kiến trúc REST

Tại sao nên sử dụng REST

REST đã được chọn sửa dụng rộng rãi thay thế cho các web service dựa trên SOAP và WSDL. Do REST giảm thiếu tối đa các liên kết giữa client và server RESTful. Một ví dụ cho điều này là khi web site cập nhật một thứ gì đó, hay thêm một số trang html. Phía client không cần phải cập nhật để có thể thấy được update của server, hay vào các trang mới mà web site cập nhật. Điều này làm cho web service nhẹ hơn, có khả năng dễ mở rộng và bảo trì.

Các nguyên tắc thiết kế RESTful

1.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 Phương thức GET thật ra có thể dùng để cập nhật dữ liệu, nhưng chúng ta đang làm rõ các phương thức HTTP, nên thay vì dùng GET để cập nhật, ta phải dùng phương thức PUT

2. Giao tiếp phi trạng thái

Điều này có nghĩa là Client và Server sẽ không lưu trạng thái của nhau, mỗi khi có một request gửi lên server, client phải đóng gói các giao thức cần thiết để server có thể hiểu. Giúp hệ thống trở nên dễ phát triển, bảo trì. Ngoài ra còn giúp tách biệt client khỏi những thay đổi của server(Như đã nói ở ví dụ bên trên). Ngoài ra, điều này cũng có một nhược điểm là sẽ làm gia tăng lượng thông tin cần truyền tải giữa client và server

3. 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}

Một vài quy tắc bổ sung: • Giấu các đuôi tài liệu mở rộng của bản gốc trong máy chủ (.jsp, .php, .asp), nếu có, vì vậy bạn có thể giấu một số thứ mà không cần thay đổi địa chỉ Urls. • Để mọi thứ là chữ thường. • Thay thế các khoảng trống bằng gạch chân hoặc hoặc gạch nối (một trong hai loại). • Tránh các chuỗi yêu cầu càng nhiều càng tốt. • Thay vì sử dụng mã (404 Not Found) khi yêu cầu không tìm thấy, luôn luôn cung cấp một trang mặc định hoặc tài nguyên như một phản hồi.

4. Nhiều cách thức hiển thị

Dữ liệu bạn nhận được có thể ở nhiều dạng ( binary, JSON, XML .v.v). Nó cho phép ứng dụng được nhiều khách hàng khác nhau sử dụng, viết bằng các ngôn ngữ khác nhau, chạy trên nền và thiết bị khác nhau.

REST trong Rails

1. Controller chuẩn RESTful

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

Trong đó: có 3 phương thức GET dùng để lấy form tạo user mới, lấy form sửa thông tin user và hiện lên user, còn lại là 4 phương thức PATCH, PUT, DELETE và POST Chú ý: PUT và PATCH cùng dùng để update nhưng PUT là cập nhật tất cả các thuộc tính của user, còn PATCH là chỉ cập nhập những thuộc tính được thay đổi của user đó.

2. PUT và DELETE

Trong Rails, khi muốn update, Rails sử dụng phương thức POST thay vì PUT. Điều này xảy ra vì broswer chỉ thực hiện 2 phương thức là GET và POST. Khi đó muốn update, Rails sẽ thêm hidden_field với tên phương thức là PUT hoặc DELETE tùy mục đích là update hay xóa dữ liệu.

3. 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 này 500 Internal Server Error Có một lỗi rất lớn đang xảy ra

Kết luận

REST không phải là sự lựa chọn luôn đúng. Đã có trường hợp khi thiết kế Web service, nó có sự kém độc lập đối với phần mềm trung gian (ví dụ: một ứng dụng máy chủ) so với loại dựa trên SOAP hặc WSDL.

Đưa một tài nguyên hệ thống thông qua một RESTful API là một cách linh động để cung cấp các loại ứng dụng khác nhau với dữ liệu đã được định dạng theo cách tiêu chuẩn. Nó giúp đáp ứng các yêu cầu tích hợp, điều rất quan trọng để xây dựng hệ thống khi dữ liệu được kết hợp dễ dàng (mashups) và để mở rộng hoặc xây dựng trên một gói hệ thống căn bản.

0