2017-07-13 197 views
0

我有兩個實體Hotel,Merchant其中每個商家可以有很多酒店。現在我有一個API端點這樣的:嵌套資源的RESTful API

/api/v1/merchants/{id}/hotels/{id}

但是我在想什麼是錯的這個語義:

/api/v1/hotels/{id}

後來一個很短了。

回答

1

根據我的經驗,後者是可取的,因爲它給你後來更多的靈活性。在六個月內,有人會說「嘿,我希望能夠查找Agraba的所有酒店」。第一個URL方案令人痛苦 - 您需要添加一個新的端點。第二個URL方案支持查詢參數:GET /hotels?location=Agraba

您可能希望保留/merchants/{id}/hotels作爲集合端點,以便您可以POST/DELETE從特定商家添加/刪除酒店。

+0

我同意,因爲理想情況下,我們應該爲實體的每個實例生成唯一的ID。我只是對REST語義感到困惑。 – CodeYogi

+0

REST在URL設計上無話可說。在REST中,URL是不透明的 - 它們不包含語義值。 URL中的語義內容只是開發人員的API設計便利。 –

+0

這意味着以前的答案是錯誤的? – CodeYogi

0

REST中,每個URL應該唯一地標識單個資源。

因此,如果酒店的id是全球唯一的,那麼當然,使用較短的鏈接沒有問題。但是,如果酒店ID爲1意味着商家1與商家2不同,那麼您應該堅持第一個URL(基本上是一個獨特的組合鍵)。

+0

我有一個'酒店'表,因此它的ID可能是唯一的。 – CodeYogi