2017-02-21 65 views
0

我知道REST端點應該是名詞而不是動詞,但有時會允許輕微的偏差嗎?Restful端點命名約定

想象一下,應該發佈產品的一個端點(使其在網頁上可見,可能會向隊列中添加某些內容)。

我可以想出2種方法來解決這個問題。

1)PUT api/products/1 /發佈 - 我喜歡它,因爲它是明確的,避免了後端的複雜性,並且它自我記錄。

2)PATCH/PUT/PATCH API /產品/ 1

{ 
    "color": "green", 

    //some properties removed for brevity 

    "ispublished" : true 
} 

第二種方法需要後端服務來跟蹤0人推薦閱讀領域對後身體時已經翻轉爲true,開始出版過程。這感覺有點複雜和更多的維護。

所以我的問題是,從REST的角度來看,使用第一種方法可以嗎?有一些很大的缺點嗎?

回答

1

技術上沒有什麼能阻止你在URL中使用動詞,遵循RPC風格。 概念上這不是REST應該如何設計的。

REST代表重新表象小號泰特Ť轉讓(BOT)。這種架構風格是resource-oriented和協議獨立,但它是頻繁通過HTTP協議實現。

在通過HTTP協議實現REST應用程序時,資源由URI標識,並且對資源的操作由HTTP methods(不應該需要任何其他動詞)表示。要更改資源的狀態,應該向服務器發送資源新狀態的表示。表示可以是JSON,XML或任何其他能夠表示資源狀態的格式。請參見下面的話:

5.2.1.2 Representations

REST組件對資源執行的操作使用的表示,以捕獲資源的當前或預期狀態和傳送部件之間的表示。表示是一個字節序列,加上表示元數據來描述這些字節。表示的其他常用但不太精確的名稱包括:文檔,文件和HTTP消息實體,實例或變體。

[...]給定表示可以指示所請求的資源,爲所請求的資源,或者一些其它資源的值的所期望的狀態的當前狀態,[...]

在此之後方法,product資源可能具有status子資源。根據您的需要,status可以有不同的值,如draft,published,inactive ...

然後用PUT與請求負載發送一個JSON更換status子資源的狀態:

PUT /api/products/1/status HTTP/1.1 
Host: example.org 
Content-Type: application/json 

{ 
    "value" : "published" 
} 
+0

狀態「發表」作爲最終產品_state_。爲了達到這個狀態,「發佈」命令需要首先被觸發。建議的選項1看起來像是一個正確的[command](http://stackoverflow.com/a/5625525/4207332)觸發器。 –

+0

@SergeyShushlyapin REST不關於_commands_,REST關於_resources_及其_states_。 RPC是關於_commands_的。 –