2015-09-23 19 views
4

使用ASP.NET Web API設計RESTful API時,我可以創建幾條路徑來檢索相同的數據。但我應該嗎?它被認爲是有用或混淆?深度對象路由的Web API最佳實踐

舉例來說,如果我有家長>兒童>項目的目標的關係,我可能有三條路線返回相同的單個項目:

  • API /父母/:家長/孩子/:兒童/項目/:項目
  • API /兒童/:兒童/項目/:項目
  • API /項目/:項目

是否有用提供三條路線,還是應該僅限於簡單的避免混淆的路線?在這方面是否有最佳做法?

回答

2

選擇使用哪些URI /路由是一個期望的目的,而不是內容。有沒有可能或可以建議用戶在沒有特定父母的情況下尋找孩子?如果是,則以單獨的根URI提供數據,如果不是,則通過要求用戶提供parentId來限制對子數據的訪問。

URI api/children將返回所有孩子,不管他們的父母是誰,因此實現另一個目的而不是api/parents/:parentId/children這將只返回parentId實例實際上有一個引用的孩子。結果將始終包含也可以使用api/children獲取的數據,但它攜帶附加信息,因爲這些孩子「屬於」指定的父級。

在我看來,你所有的選擇都是有效的,因爲它們都有不同的目的。不過,我會避免使用不同的URI來達到同樣的目的。

+0

這使得有很大的意義。謝謝你的想法。 – Andy

0

如果用戶訪問最低級別的唯一標識符(:項目在你的情況下),那麼他們應該叫

API /項目/:項目

關於父的信息會多餘/無關。

我會去:

api/parents 
api/parents/:parentid 
api/parents/:parentid/children 
api/children 
api/children/:childid 
api/children/:childid/items 
api/items 
api/items/:itemid