簡體   English   中英

RESTful API應該執行哪些操作?

[英]What operations should a RESTful API have?

我是Express和API的新手,目前正在使用Express構建RESTful API。 例如,假設這是我的模型。

Sheep = {
 name: String,
 age: Number,
 color: String
}

除了從本教程中看到的基本CRUD操作之外,例如創建羊,按id讀取羊,按id更新羊和按id刪除羊,我還應該在api中包含其他操作嗎?

特別是我想知道是否應該通過名稱/年齡/顏色來確定要尋找綿羊的路線,以及在最佳實踐中如何處理該路線。

我可能缺少信息,但是在上面的教程中,通過id查找綿羊的途徑是"/sheeps/:sheepId" 我該如何尋找按名稱查找的路線? 如果我執行"/sheeps/:sheepName" ,那么通過id查找羊就不一樣了,因為如果我轉到瀏覽器並進入例如: "localhost:8080/sheeps/someNameOrId" ,瀏覽器或客戶端將如何邊識別出它是名稱還是ID?

我正在以AngularJS作為客戶端,如果那可以幫助建立更有用的答案。

您的情況非常經典,我們需要為每種操作編寫RESTful資源。 正如您正確地說的那樣,REST無法知道您是在傳遞ID還是Name。 理想情況下,在這種情況下,您需要對每個資源的操作進行分組。

對於您的情況,您需要執行CRUD byId或byName,然后需要將REST資源寫為“ / sheeps / id /:sheepID”或“ / sheeps / name /:sheepName”。

首先,盡管REST有其標准和最佳實踐,但它不是協議。 因此,人們可能會針對問題提出不同的解決方案,並且從他們自己的角度來看,他們可能都是正確的。

現在來問您的問題,原則上uri應該代表您要對其進行操作的資源。 它可能具有或不具有用於搜索,過濾等的查詢參數。因此,表示形式/ sheeps / {sheep id / name}非常適合綿羊。 現在為您的問題陳述,以下可能是有效的RESTful實現方式:

  • / sheeps?sheepId ='123'和/ sheeps?sheepName ='Eve'
  • / sheeps / {sheepId}和/ sheeps / name / {sheepName}

從語法上講,它們都很好。 現在,如果我們認為不必太關注REST一詞,就會發現在這兩種選擇中,API的性能都將是相同的。 因此,更多的是關於可讀性,這意味着哪個選項可以更好地了解我們在做什么。 我認為在這兩種情況下,程序員都將很容易理解我們在做什么。

因此,如果只有一種選擇是正確的想法就擺脫,然后選擇您認為更好的選擇。

在上述實現中要注意的另一件事是,當您執行搜索時(例如/ sheeps?sheepId ='123'),並且如果找不到與參數匹配的內容,則最好傳遞204 No Content。 如果是/ sheeps / {sheepId},則應為404 Not Found。 在您的情況下,什么更有意義? 根據您的理解選擇。

這是因為SheepId和SheepName沖突。 現在,由於需要按名稱/年齡/顏色來獲取綿羊,以下方法似乎非常合乎邏輯。

  • /羊?年齡= '5'
  • /羊?顏色=“黑”
  • ?/羊年齡= '5';顏色= '黑'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM