Trang chủ > Uncategorized > URI và REST

URI và REST

Thêm một tí về REST.

Hiểu HTTP

Đúng ra bài viết  là về HTTP, vì REST không bắt buộc dùng HTTP. Tuy vậy những vấn đề về URI chủ yếu được để ý khi mọi người “viết REST”, còn lúc làm web bình thường thì URI kiểu nào cũng không bị để ý. Trong khi đó những khái niệm về URI đều từ HTTP mà ra cả, không hề liên quan tới REST.

Về HTTP thì đọc RFC là tốt nhất. RFC tương đối ngắn gọn, súc tích, dạng plain text rõ ràng, nhưng lại hay bị bỏ qua. Dưới đây tôi cũng chủ yếu tóm lược lại và link tới những tài liệu quan trọng để bạn có thể dễ dàng tìm đọc và hiểu đúng, chứ tôi viết thì cũng có thể sai sót.

POST, PUT, tạo và cập nhật

Thường thì hai loại method này được hiểu là POST dùng cho tạo, PUT dùng cho cập nhật. Điều này không hoàn toàn đúng. Có hai chỗ bạn có thể đọc thêm, một là RFC 2615, hai là trong quyển RESTful web services. RFC là chính xác nhất. Dịch thì cũng hơi khó, nhưng ý tưởng cơ bản là như sau:

  • POST là để cung cấp thành phần phụ cho một resoure xác định bởi URI, theo kiểu thêm một bài viết vào blog, hay thêm bình luận vào một bài viết (bài viết là resource), v.v. POST cũng có thể dùng để đẩy dữ liệu tới một quá trình xử lí nào đó. Kết quả của POST có thể không phải là một resource được xác định bởi một URI, chẳng hạn như khi bạn xem bình luận của một bài viết không phải là resource. Tất nhiên kết quả của POST cũng có thể là một resource với URI xác định. Điều này thường dùng trong viết REST khi chúng ta tạo một đơn vị resource mới trong một tập các resource cùng loại, ví dụ POST /article để tạo ra một bài báo mới ở article/{id}. Trong trường hợp có resource tạo ra như vậy thì phải trả về 201, chứ không phải 200 hay 204.
  • PUT là để đưa dữ liệu tới một resource xác định bởi URI. Tùy thuộc vào resource đã tồn tại hay chưa mà hành động này là create hay cập nhật. Chẳng hạn PUT /user/nmh để tạo hay cập nhật user nmh, chứ server không thể tạo user abc để trả về được. Chính vì vậy là không thể nói là POST dùng cho tạo, PUT dùng cho cập nhật.

Tóm lại có thể nói đơn giản là POST có thể dùng cho những việc hoàn toàn không liên quan đến tạo resource. Trong trường hợp POST dùng để tạo resource, thì resource sẽ được tạo ra chưa có URI xác định lúc gửi request. Với PUT thì resource sẽ được tạo ra hay cập nhật luôn có URI xác định ngay lúc gửi request.

Path variable, request parameter, và matrix URI

Dùng path variable hay request parameter? Câu trả lời là thế nào cũng được. Nhưng trong quyển RESTful web services có một đề xuất dựa trên RFC 3986. Dùng path variable nếu bạn muốn thể hiện sự phân cấp, ví dụ node/{id}/comment thay cho comment?node={id}. Trong trường hợp các biến không thể hiện sự phân cấp, hoặc có thể có có thể không, thì nên dùng request parameter.

Matrix URI thì là một thứ hơi khó hiểu và ít được nhắc đến. Về những ví dụ cụ thể có thể xem ở các web framework hỗ trợ nó, như Spring chẳng hạn. Về lí do ra đời thì có thể hiểu đơn giản là đâu đó có thể có nhu cầu dùng một associate array dưới dạng path variable, trong đó một số element có thể có hoặc không. Ví dụ (từ Restful web service) bạn muốn cho kinh độ và vĩ độ vào path variable để tạo URI thể hiện một điểm nào đó trên bản đồ, trong khi đó kinh độ và vĩ độ ngang hàng nhau nên không thể xếp một trong yếu tố đứng trước hoặc sau. Trong tình huống này bạn cần dùng matrix URI.

Tags: ,
  1. Chưa có phản hồi.
  1. No trackbacks yet.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: