2010-03-15 23 views
14

Tôi hiểu cách sử dụng REST để thực hiện tương tác thực thể chung - sử dụng các tên url để ánh xạ tới thực thể và động từ HTTP để ánh xạ tới các hành động trên các thực thể đó. Nhưng cách nhìn chung được chấp nhận là nhìn vào "hành động" giống như RPC là gì?Dịch vụ REST - hiển thị các hành động không phải dữ liệu "

Ví dụ: giả sử tôi muốn gửi lệnh cho thiết bị để đặt lại? Không có "thực thể" thực sự ở đây hoặc tôi làm một cái gì đó như POST tới http://mydevice/device/reset?

Trả lời

13

/device/reset hoặc /system/reset là ok.

phần còn lại "thiết kế mẫu" không khuyến khích bạn KHÔNG sử dụng bất kỳ động từ .. Bạn có thể làm:

POST http://mydevice/system/state  
<stateType>RESET</stateType> 

thông tin liên quan:

+1

Vâng, đó là một giải pháp khả thi. –

2

Tôi thường đặt tên cho thực thể là "hệ thống" hoặc đại loại như thế. Vì vậy, bạn làm "/ system/reset". Bạn đã chọn thiết bị để hoạt động quá.

Nhưng yea, tôi thường xem các loại hành động này là bản cập nhật, sẽ sử dụng phương thức POST. Vì vậy, tôi nghĩ bạn có quyền POST/device/reset

+0

Hài hước bạn nên quan tâm đến điều PUT/POST - Tôi vừa hỏi về điều đó: http://stackoverflow.com/questions/2447677/rest-verbs-which-convention-is-correct/2447714#2447714 – ctacke

+0

Tôi sẽ bình luận về điều đó, nhưng tôi cũng sử dụng biến thể REST vì không phải tất cả các máy khách đều xử lý PUT/DELETE. Đọc trang wikipedia cho REST: http://en.wikipedia.org/wiki/Representational_State_Transfer – Seaux

+0

Có, tôi đã đọc bài viết trên Wikipedia. Vì tôi đang kiểm soát cả dịch vụ và khách hàng, tôi đã có sự sử dụng tất cả 4 động từ. – ctacke

9

Tôi không nghĩ đó là trường hợp sử dụng POST. Các "hành động RESET" là một hành động idempotent (nếu bạn gọi nó là n lần bạn sẽ luôn luôn có được kết quả tương tự), vì vậy IMHO bạn nên sử dụng một cuộc gọi PUT thay vì POST (như POST không phải là idempotent).

Ngoài ra, như bạn đang Đưa một tài nguyên, bạn có thể sử dụng

PUT http://system 
<device> 
    <status>RESET</status> 
</device> 

hoặc

PUT http://system/status/reset 

Nhưng tôi nghĩ rằng một 1 là "ngon hơn", kể từ khi bạn đang đặt một tài nguyên, trong khi onde thứ hai bạn chỉ sử dụng url.

+0

vì vậy bạn muốn nói rằng PUT là một UPDATE và POST là một INSERT (IBM thay vì định nghĩa Sun)? Xem điều này: http://stackoverflow.com/questions/2447677/rest-verbs-which-convention-is-correct/2447740#2447740 – ctacke

+0

Không thực sự. Nếu bạn nghĩ về CRUD, bạn có thể sử dụng sự tương tự này, và nó là chính xác để nói rằng nếu bạn có một INSERT và một UPDATE, bạn nên sử dụng POST và PUT, tương ứng. Nhưng sự thiếu chính xác là nhiều hơn thế. Hãy tưởng tượng có một tài nguyên mà bạn chỉ có thể chèn một lần vào DB của bạn và bạn sẽ không bao giờ thay đổi nó. Đó là một sự chèn và một hành động không cần thiết, vì vậy trong tình huống này tôi nghĩ rằng PUT sẽ được sử dụng. –

+2

PUT http: // system/status/reset với một cơ thể trống chỉ cập nhật tài nguyên để trống. Đầu tiên là cách RESTful chính xác. –

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