2012-06-22 59 views
0

有產品和產品評論。 所以,我能得到的產品列表這樣的...如何設計具有資源層次結構的Restful API?

GET /products 

我也可以獲取一個產品或評論或像這樣的產品......

GET /products/{productID} 
GET /products/{productID}/reviews 

這些都是明確的。但是當我想獲得我寫的所有評論時,問題就會發生。 我可以創建URI這樣的..

1. GET /products/reviews?author=myId 

2. GET /reviews?author=myID 

然而,第一個問題來自{productID}和評論之間的衝突。 下一個問題來自關係產品和評論,因爲評論應該根據層次結構在產品之下。

如何獲得我用RESTful API編寫的所有評論?

回答

0

通常的路線是這樣的

GET /產品/:PRODUCT_ID /評論作者=本身份識別碼

這樣的參數是 - PRODUCT_ID - 作者

與,你會得到什麼?對某個產品和作者的所有評論。

不過,如果你希望所有的評論,那麼這是正確的:?

GET /評論作者=本身份識別碼

0

要獲取由給定筆者所有產品編寫的所有評論中, RESTful的方式做這將是

GET /作家/ {} AUTHORID /評論

如果你想獲得一個給定作者所寫的所有評論爲產品,那麼你可以使用

(一)GET /作家/ {} AUTHORID /產品/ {}的productId /評論

我喜歡這種方法,在查詢字符串指定的productId或AUTHORID。作者包含產品,產品包含評論,所以這是一個很好的RESTful URL。但是,如果你想使用的查詢字符串,那麼你可以使用下面的任一:?

(B)GET /產品/ {productId參數} /評論的AuthorID = {AUTHORID}

(C)GET /作者/ {authorId}/reviews?productId = {productId}

但我個人更喜歡選項(a)而非選項(b)或(c)。我認爲它以更清晰的方式描述了對象層次結構。

0

如果我是你,我會使用第二個URI,因爲平面URI通常比分層URI短,而較短的URI更容易路由:很難錯誤地輸入URI模板。

因此,使用

  • GET /reviews?author={myID}
  • GET /reviews?product={productID}

是確定了。 (如果您有不同的評論類型,最好使用product-reviews而不是reviews。)

爲了避免誤解REST沒有URI結構約束,那些是實現細節,所以您可以同時使用您提出的URI 。你應該記錄它們並應用HATEOAS約束。