我怎麼可能包括,利用JsonApi,鏈接到我的REST API方法?比如我有這樣的事情:JsonApi方法調用
POST api/v1/customer/1/deactivate
POST api/v1/customer/1/activate
要激活並相應地停用客戶。我的數據對象應該如何包含(或不包含)? specification不包含數據對象的「方法」部分。
我怎麼可能包括,利用JsonApi,鏈接到我的REST API方法?比如我有這樣的事情:JsonApi方法調用
POST api/v1/customer/1/deactivate
POST api/v1/customer/1/activate
要激活並相應地停用客戶。我的數據對象應該如何包含(或不包含)? specification不包含數據對象的「方法」部分。
根據您的更改並基於guillaume31的回答進行更新。
如果它確實是一種更新的資源,那麼你應該發出一個補丁: API/V1 /客戶/ 1
並配有jsonapi順應體更新的資源:
{
"data": {
"type": "customer",
"id": "1",
"attributes": {
"status": "deactivated"
}
}
}
如果意圖是要真正刪除資源,那麼刪除可能更合適。根據您的描述,PATCH可能是最佳路徑,因爲資源仍然存在,並且可能會根據其他呼叫進行恢復
通過將「停用」作爲URI的一部分,您可以使停用資源,這似乎不正確。此IMO不符合REST level 1。
據我所知,激活/停用客戶等於更新資源。 JsonApi建議發送PATCH請求以修改資源:http://jsonapi.org/format/#crud-updating
但是,它可能更忠實於REST,將激活建模爲POST或PUT並將其停用爲DELETE。您可以從PUT和DELETE的idempotency中受益 - 在連續兩次激活或停用客戶時,應該使其處於相同狀態。但是這也取決於你的域名以及這些行爲會帶來什麼後果。
在我知道的REST框架中,動詞不包含在開箱即用的鏈接中。 JSON API either似乎不是這種情況。
是的,這不是一個RESTFUL的觀點。我喜歡使用Post/Put和Delete來激活和停用。 – HeCtOr
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)。這對於這種簡單的情況可能有點矯枉過正。
用於RESTful解決方案。這或多或少是我在回答中提到的。我可能更願意使用不同的'/ prospect/1','/ customer/1'或'/ customers/inactive/1'資源和關聯的POST/DELETE動詞來反映不同的狀態。 – guillaume31
我更新了我的問題來澄清一點,你認爲你的解決方案可以適用於這種情況嗎? – HeCtOr
我認爲這是使用JsonApi的正確方法 – HeCtOr