2012-01-18 48 views
3

我有一個現有的應用程序來控制一臺機器,並且想要爲它添加一個REST接口。兩個高級命令是啓動和停止機器操作。我本來約雖然這些映射操作,POST和DELETE動詞,如:機器控制的REST接口設計

POST /control   // start machine operation 
DELETE /control   // stop machine operation 

但我們沒有真正刪除任何這樣,就停止操作。刪除似乎不太合適。另一個想法是在URL中進一步詳細說明的操作,如

POST /control/start_operation // start machine operation 
POST /control/stop_operation  // stop machine operation 

但是這似乎矛盾的網址不把動詞的REST概念。來自堆棧溢出讀者的任何建議如何最好地映射這種操作?

+1

請注意,* start *和* stop *命令都是冪等的,因此您可以安全地使用'PUT'。 – 2012-01-18 17:53:36

回答

2

REST代表具有代表性的狀態轉移,其中交互重點在於傳輸資源的狀態

爲了設計一個「正確」的REST接口,你首先必須定義哪些資源的狀態正在傳輸。

從你所說的話看來,唯一可以轉移的狀態是機器的當前狀態。爲此,您實際上只是使用REST調用更新該狀態,並且恰好會有基於此狀態發生的其他活動。

最適合「更新狀態併發生其他事情」模型的HTTP動詞是POST。您將張貼到/myMachineController/status並且有效載荷將是onoff

一般來說,REST非常適合以數據爲中心的服務範例,並且通常不適用於沒有太多數據可操作的地方。

+0

謝謝,這是很好的反饋,我同意。 – 2012-01-18 18:01:41

1

例如如果它是一個3d打印機:

POST http://localhost/3d-printer/state HTTP/1.1 
Content-Type: application/x-www-form-urlencoded 

state=on 
+0

感謝您的反饋意見。在向REST服務發送數據時,數據通常是以x-www-form-urlencoded類型發送的,還是以JSON形式發送有效載荷也可以接受? – 2012-01-18 22:08:33

+0

JSON完全有效。 – roberkules 2012-01-18 22:57:28