我有兩個實體Hotel
,Merchant
其中每個商家可以有很多酒店。現在我有一個API端點這樣的:嵌套資源的RESTful API
/api/v1/merchants/{id}/hotels/{id}
但是我在想什麼是錯的這個語義:
/api/v1/hotels/{id}
後來一個很短了。
我有兩個實體Hotel
,Merchant
其中每個商家可以有很多酒店。現在我有一個API端點這樣的:嵌套資源的RESTful API
/api/v1/merchants/{id}/hotels/{id}
但是我在想什麼是錯的這個語義:
/api/v1/hotels/{id}
後來一個很短了。
根據我的經驗,後者是可取的,因爲它給你後來更多的靈活性。在六個月內,有人會說「嘿,我希望能夠查找Agraba的所有酒店」。第一個URL方案令人痛苦 - 您需要添加一個新的端點。第二個URL方案支持查詢參數:GET /hotels?location=Agraba
。
您可能希望保留/merchants/{id}/hotels
作爲集合端點,以便您可以POST/DELETE從特定商家添加/刪除酒店。
在REST
中,每個URL
應該唯一地標識單個資源。
因此,如果酒店的id
是全球唯一的,那麼當然,使用較短的鏈接沒有問題。但是,如果酒店ID爲1意味着商家1與商家2不同,那麼您應該堅持第一個URL
(基本上是一個獨特的組合鍵)。
我有一個'酒店'表,因此它的ID可能是唯一的。 – CodeYogi
我同意,因爲理想情況下,我們應該爲實體的每個實例生成唯一的ID。我只是對REST語義感到困惑。 – CodeYogi
REST在URL設計上無話可說。在REST中,URL是不透明的 - 它們不包含語義值。 URL中的語義內容只是開發人員的API設計便利。 –
這意味着以前的答案是錯誤的? – CodeYogi