2017-06-12 33 views
0

我是新來表達和apis,我目前正在使用Express構建一個RESTful API。例如,假設這是我的模型。RESTful API應具有哪些操作?

Sheep = { 
name: String, 
age: Number, 
color: String 
} 
從我從 this tutorial看到,如創建一個羊,通過ID讀羊,通過ID更新羊,並通過ID刪除羊是否有其他操作我應該在我的API基本的CRUD操作

除了?

特別是我想知道是否應該制定路線,例如按名稱/年齡/顏色尋找羊,以及如何在最佳實踐中處理路線。

我可能缺乏信息,但通過上面的教程,通過id找到一條羊的路線是"/sheeps/:sheepId"。我將如何建立一個名稱查找路線?如果我確實"/sheeps/:sheepName"與通過ID查找綿羊不同,因爲如果我去我的瀏覽器並舉例:"localhost:8080/sheeps/someNameOrId"瀏覽器或特別是客戶端如何識別它是否是名稱或ID?

我正在與AngularJS作爲我的客戶,如果這可以幫助建立一個更有幫助的答案。

回答

0

首先,雖然REST有其標準和最佳實踐,但它不是協議。所以,人們可能會提出不同的解決方案來解決這個問題,並且他們都有可能是正確的。

現在回到你的問題,原則上uri應該代表你想要做手術的資源。它可能有也可能沒有查詢參數,用於搜索,過濾等。 因此,表示/綿羊/ {綿羊id /名稱}對羊來說是完美的。現在,您的問題聲明,下面可能是實施有效的RESTful方式:??

  • /羊sheepId = '123' 和/羊sheepName = '夏娃'
  • /羊/ { sheepId} AND /羊/名/ {} sheepName

語法上他們都很好。現在,如果我們認爲沒有過分關注REST這個術語,我們會發現,在我們的兩個選項中,我們的API的性能都是一樣的。所以,它更多的是可讀性,這意味着哪個選項可以更好地瞭解我們正在做什麼。我認爲在這兩種情況下程序員都會很容易理解我們在做什麼。

所以,如果認爲只有一個選項是正確的,並選擇你認爲更好的想法。

在上面的實現中需要注意的其他事情是,當您執行搜索時,比如/ sheeps?sheepId ='123',並且如果找不到與參數匹配的內容,則理想情況下會傳遞204無內容。 在/ sheeps/{sheepId}的情況下,它應該是404 Not Found。 你的情況更有意義嗎?根據你的理解選擇。

這是爲了sheepId和sheepName的衝突。現在要求按名稱/年齡/顏色獲取羊,下面的方法似乎非常合乎邏輯。

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

你是一個非常經典的案例,我們需要爲每個操作編寫RESTful資源。正如您所說的,REST無法知道您是否傳遞了ID或名稱。理想情況下,在這種情況下,您需要將每個資源的操作分組。

在你的情況,你需要做的CRUD byId或綽號,那麼你需要寫你的REST資源爲 「/羊/ ID /:sheepID」 或 「/羊/ /:sheepName」。