2015-09-21 53 views
1

我怎麼可能包括,利用JsonApi,鏈接到我的REST API方法?比如我有這樣的事情:JsonApi方法調用

POST api/v1/customer/1/deactivate 
POST api/v1/customer/1/activate 

要激活並相應地停用客戶。我的數據對象應該如何包含(或不包含)? specification不包含數據對象的「方法」部分。

回答

2

根據您的更改並基於guillaume31的回答進行更新。

如果它確實是一種更新的資源,那麼你應該發出一個補丁: API/V1 /客戶/ 1

並配有jsonapi順應體更新的資源:

{ 
    "data": { 
    "type": "customer", 
    "id": "1", 
    "attributes": { 
     "status": "deactivated" 
    } 
    } 
} 

如果意圖是要真正刪除資源,那麼刪除可能更合適。根據您的描述,PATCH可能是最佳路徑,因爲資源仍然存在,並且可能會根據其他呼叫進行恢復

+0

我更新了我的問題來澄清一點,你認爲你的解決方案可以適用於這種情況嗎? – HeCtOr

+0

我認爲這是使用JsonApi的正確方法 – HeCtOr

0

通過將「停用」作爲URI的一部分,您可以使停用資源,這似乎不正確。此IMO不符合REST level 1

據我所知,激活/停用客戶等於更新資源。 JsonApi建議發送PATCH請求以修改資源:http://jsonapi.org/format/#crud-updating

但是,它可能更忠實於REST,將激活建模爲POST或PUT並將其停用爲DELETE。您可以從PUT和DELETE的idempotency中受益 - 在連續兩次激活或停用客戶時,應該使其處於相同狀態。但是這也取決於你的域名以及這些行爲會帶來什麼後果。

在我知道的REST框架中,動詞不包含在開箱即用的鏈接中。 JSON API either似乎不是這種情況。

+0

是的,這不是一個RESTFUL的觀點。我喜歡使用Post/Put和Delete來激活和停用。 – HeCtOr

1

POST api/v1/customer/1/deactivate

POST api/v1/customer/1/activate

這不是RESTful的。但客戶的「主動」狀態可以被看作是一種資源!因此最簡單的解決方案是:

PUT api/v1/customer/1/active  # Activates customer 1 
DELETE api/v1/customer/1/active # Deactivates customer 1 

通過@ guillaume31介紹的修補程序解決方案也是一種有效的方法,但implementing RESTful PATCH correctly要求變化與操作,數據指針和新的價值描述(也見JSON Patch RFC)。這對於這種簡單的情況可能有點矯枉過正。

+0

用於RESTful解決方案。這或多或少是我在回答中提到的。我可能更願意使用不同的'/ prospect/1','/ customer/1'或'/ customers/inactive/1'資源和關聯的POST/DELETE動詞來反映不同的狀態。 – guillaume31