我正在尋找在現有項目之上公開一些域RESTful API。我需要建模的一個實體具有單個文檔:設置。設置是使用應用程序創建的,並且是單例文檔。我想通過設計良好的基於資源的RESTful API公開它。對於許多項目資源如何爲單個資源建模RESTful API?
通常建模的API時,它是這樣的:
GET /employees/ <-- returns [] of 1-* items
GET /employees/{id}/ <-- returns 1 item
POST /employees/ <-- creates an item
PUT /employees/{id}/ <-- updates all fields on specific item
PATCH /employees/{id}/ <-- updates a subset of fields specified on an item
DELETE /employees/{id}/ <-- deletes a specific item
選項1:
GET /settings/ <-- returns [] of 1-* items
[{ "id": "06e24c15-f7e6-418e-9077-7e86d14981e3", "property": "value" }]
GET /settings/{id}/ <-- returns 1 item
{ "id": "06e24c15-f7e6-418e-9077-7e86d14981e3", "property": "value" }
PUT /settings/{id}/
PATCH /settings/{id}/
:如果我以同樣的方式,則下列API構建模型設置
這對我來說有一些細微差別:
- 我們返回時,只有1個項目可以和是永遠存在的數組。設置是應用程序創建的單例。
- 我們需要知道的ID,以請求只返回1項
- 我們需要一個單獨的ID只是把或修補它
選項2:然後我的頭腦繼續在這個方向:
GET /settings/ <-- returns 1 item
{ "id": "06e24c15-f7e6-418e-9077-7e86d14981e3", "property": "value" }
PUT /settings/
PATCH /settings/
該設計消除了以下帶來的細微差別,並且不需要ID爲PUT或PATCH。這對我來說是最一致的,因爲所有請求都具有相同的形狀。
OPTION 3:另一種選擇是將ID添加回PUT和PATCH要求其進行更新,但隨後一個API的用戶必須執行一個GET只是爲了獲得一個單身的ID:
GET /settings/ <-- returns 1 item
{ "id": "06e24c15-f7e6-418e-9077-7e86d14981e3", "property": "value" }
PUT /settings/{id}/
PATCH /settings/{id}/
這似乎不一致,因爲GET 1與UPDATE 1請求的形狀不同。它也不要求消費者執行GET來找到單身人士的標識符。
- 有沒有一種首選的方法來建模?
- 有沒有人有任何關於爲單身人士資源建模RESTful API的參考資料?我目前傾向於選項2,但我想知道是否有我可以研究的良好資源或標準。
- 是否有迫切的理由要求API消費者爲某個資源的id創建一個GET,然後在更新請求中使用它(也許出於安全原因等)?