假設我有兩個物件:Student和Homework. Homework有Studentfk:
CREATE TABLE student (
id serial PRIMARY KEY,
name varchar(100)
)
CREATE TABLE homework (
id serial PRIMARY KEY,
topic varchar(255),
student_id int REFERENCES student(id)
)
對于為 CRUD 構建 API 端點的正確方法是否有任何約定?
如果我想為學生創建一個新作業,我可以發送一個帶有學生 ID 的 json 正文
{
"student_id": 1,
"topic": "topic
}
到POST https://website.com/api/v1/homework.
或者我可以發送
{
"topic": "topic
}
從POST https://website.com/api/v1/students/{student_id}/homeworkURL 獲取學生 ID。
在第二種情況下,我將發送一個包含不完整欄位的 POST 請求,在第一種情況下,我將有一個額外的端點(因為/students/{id}/homework無論如何我都需要獲取特定學生的作業。)
uj5u.com熱心網友回復:
您有兩個物體Student和Homework. 一個Homework物體屬于Student。
所以語意上更正確的方法是:
創建作業端點:
POST https://website.com/api/v1/students/{student_id}/homeworks/add洗掉作業端點:
DELETE https://website.com/api/v1/homeworks/{homework_id}
沒有公認的規則,但這通常是一種廣泛遵循的模式:
如果A擁有B,并且您想創建一個新B物體,您的路徑將類似于/A/{A_Id}/B/add。
樣板請求:
POST /ParentEntity/ParentId/ChildEntity/add
現在B已創建并且您id與它有關聯,因此您可以直接更改B(例如對于任何突變操作,POST, DELETE, PUT, PATCH)。
DELETE /B/{id}
PUT /B{id}
要么
POST /B/{id}/delete
POST /B/{id}/update
(這之后是 StackOverflow,您的請求意圖/操作在 URL 后綴中定義,而不是由您的 HTTP 方法定義)
為什么我們直接改變B?為什么不做類似的事情:
DELETE /A/{Aid}/B/{Bid}
因為/A/{Aid}會是冗余資訊。{Bid}因為即使多個B物體可以屬于單個物體,也可以保證它始終是唯一的A。
其他參考:
您可以在此處查看 Stackoverflow 用于其 API 的 API 模式,以供將來參考。https://api.stackexchange.com/docs?tab=category#docs
uj5u.com熱心網友回復:
我會推薦第二種方法:
沒有相關學生,家庭作業就無法存在。
最佳實踐:
REST 嵌套資源的最佳實踐是什么?.
和資源Raming:
https ://restfulapi.net/resource-naming/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/426491.html
上一篇:如何發送這種Json回應
