我知道一個衆所周知的問題在這裏:PUT vs POST in REST選擇在REST創建多個資源
不過我有點在我的情況的一個困惑,希望尋求提醒正確設計我的REST風格的WS:
假設我的系統的工作是這樣的:
我的系統定義了多個批處理作業(如JOB1
,JOB2
)。
每一天,我會要求我的系統創建批處理作業計劃的列表,通過提供特定日期(例如,我通過了情節中字,則系統會JOB1(2014-12-25)
和JOB2(2014-12-25)
。
用戶可以觸發一個批處理作業計劃執行
我想尋求提醒適當的揭露這些爲資源:
我應該做一個POST或PUT到資源/batchSchedules
觸發了創作的batchSchedules
具體的日期?URL應該如何看起來像mak它是一個適當的RESTful API?
「計劃觸發」應該是什麼樣子?
我想這兩種選擇的,但兩者並不聽起來很正確的對我說:
方法1:
要爲特定日期創建時間表:PUT
到/batchSchedules/2014-12-25
空請求正文,因爲我似乎正在創建「一堆日程表」作爲在URL中聲明的資源。(然而,它似乎是對的,因爲如果我再次調用它,看起來不太好,我不打算替換它)
要觸發計劃執行:PUT
到/batchSchedules/2014-12-25/JOB1
,因爲它似乎取代了批處理計劃資源GET
/batchSchedules/2014-12-25/JOB1
要獲得計劃的狀態與有意義的輸入(但它看起來很奇怪怎麼我我沒有真正更換的資源,不能因爲我其實不是生成URL以下的兒童的資源在這裏乘坐POST)
要獲得計劃的狀態:GET
/batchSchedules?id=12345
其中12345是一個時間表
方法2 ID: 要創建一個特定的日期安排:POST
到/batchSchedules
帶日期的請求主體,因爲它似乎是我創建批處理調度的子資源
要觸發一個時間表執行:PUT
到/batchSchedules/2014-12-25/JOB1
,因爲它似乎取代了批處理調度資源(但它看起來很奇怪,因爲我實際上並不真正替換資源,因爲我實際上並沒有在URL下面生成一個子資源)
要使用有意義輸入得到一個時間表的狀態:GET
/batchSchedules/2014-12-25/JOB1
爲了得到一個時間表的狀態:GET
/batchSchedules?id=12345
這12345爲時間表ID
方法3:
要獲得具有有意義輸入的時間表狀態:GET
/batchSchedules?job=JOB1&date=2014-12-25
要獲得時間表的狀態:GET
/batchSchedules/12345
其中12345是一個時間表
要爲特定日期創建時間表ID:POST
到/batchSchedules
帶日期的請求主體,因爲它似乎是我創造/batchSchedules
下一堆批處理調度的子資源(沒有按「T似乎相當不錯)
要觸發計劃執行:PUT
或POST
到/batchSchedules?job=JOB1&date=2014-12-25
,因爲它似乎取代了一批資源調度(看起來真的很奇怪,我)
其中哪些是以適當的REST方式公開我的WS的適當方式?
感謝您的回覆,我會盡力進一步閱讀。只是一件事:我想避免使用GET來創建這些「日程安排」,因爲我希望創建是明確的,並且GET/schedule/DATE應該爲我提供特定日期的日程安排(即以前創建的日程安排)。如果這是我的設計決策,我應該如何以REST方式公開它?我相信我對工作時間表的想法更像是你的「時間表執行」:我的「時間表」是一項計劃在特定日期執行的工作。 –
那麼,如果你決定使用PUT/POST,那麼它就是客戶所擁有的信息。如果客戶可以*完全*指定時間表,那麼PUT是適當的。如果有什麼信息可以改變客戶端沒有的信息,你*必須*使用POST。 –