2012-04-23 29 views
13

Tôi đã đọc các bài viết về các dịch vụ RESTful trong một thời gian và tôi hiểu tầm quan trọng của việc sử dụng ĐỘNG TỪ đối với TÀI NGUYÊN.Hành động tùy chỉnh trong dịch vụ RESTful

Nhưng có một điều tôi không hiểu. Điều gì sẽ xảy ra nếu chúng ta cần phải gọi một hành động nào đó mà không phải là một phần của CRUD?

Ví dụ: hãy xem xét tôi muốn thực hiện một bước nhảy mèo. Chúng ta nên sử dụng định dạng nào?

Có phải RESTful sau đây không?

http://host/cats/123/jump 

Trả lời

9

Nếu cats/123 đại diện cho một nguồn tài nguyên sau đó suy nghĩ về nó theo cách này: tài nguyên có thể có nhiều bang (ăn uống, đi bộ, ngủ, nhảy, pissing, ...). Khi bạn đang thiết kế một API bằng cách sử dụng kiểu kiến ​​trúc REST, bạn muốn cho phép ứng dụng khách tạo các yêu cầu cho phép đối với tài nguyên sẽ thay đổi trạng thái của nó.

Trong ngữ cảnh cats/123, bạn có thể thực hiện việc này thông qua một loạt các yêu cầu POST sẽ làm cho trạng thái tài nguyên thay đổi. Lợi dụng khả năng hypermedia trong REST, bạn có thể tạo một quá trình như các yêu cầu và phản hồi được hiển thị bên dưới. Lưu ý rằng các liên kết cho phép thay đổi như một phản hồi cho POST. Ngoài ra, ứng dụng khách sẽ được mã hóa cho các thuộc tính có trong mảng Liên kết chứ không phải là các URI thực có trong các thuộc tính Href.

Yêu cầu:

GET cats/123 

đáp ứng:

{ 
    "Color" : "black", 
    "Age" : "2", 
    "Links":[ 
    { 
     "Food":"kibbles", 
     "Method":"POST", 
     "Href":"http://cats/123", 
     "Title":"Feed the cat" 
    }, 
    { 
     "Scare":"yell real loud", 
     "Method":"POST", 
     "Href":"http://cats/123", 
     "Title":"Scare the cat" 
    }] 
} 

Yêu cầu:

POST cats/123 

{ 
    "Food":"kibbles" 
} 

đáp ứng:

{ 
    "Color" : "black", 
    "Age" : "2", 
    "Tummy" : "full" 
    "Links":[ 
    { 
     "Sleep":"lap", 
     "Method":"POST", 
     "Href":"http://cats/123", 
     "Title":"Pet the cat" 
    }, 
    { 
     "Scare":"yell real loud", 
     "Method":"POST", 
     "Href":"http://cats/123", 
     "Title":"Scare the cat" 
    }] 
} 
+1

+1. Cảm ơn. Nhưng tôi nghĩ chúng ta nên sử dụng PUT thay vì POST để cập nhật tài nguyên? Tôi đọc rằng POST nên được sử dụng để tạo ra? – SiN

+0

Thật không may, các cuộc thảo luận ("đối số") về phong cách kiến ​​trúc REST xoay quanh việc hiểu các đặc tả HTTP và các định nghĩa của nó. Tóm lại, [HTTP spec] (http://www.ietf.org/rfc/rfc2616.txt) nói rằng phương pháp PUT là cách gửi toàn bộ * biểu diễn tài nguyên * (một thực thể như được cập nhật bởi máy khách) tới máy chủ để nó có thể thay thế đại diện hiện tại của tài nguyên giả sử khách hàng có phiên bản mới nhất. Trong câu hỏi, "hành động" của bạn đang yêu cầu chuyển đổi trạng thái thay vì thay thế bán buôn tài nguyên bằng phiên bản cập nhật. –

+0

{Rời khỏi không gian :)} Ngoài ra, POST là một cách được chấp nhận gây ra một biểu diễn tài nguyên để chuyển đổi từ trạng thái này sang trạng thái khác. –

Các vấn đề liên quan