如何使用资源层次结构设计Restful API?

时间:2012-06-22 08:39:31

标签: rest uri restful-url

有产品和产品评论。 所以,我可以得到这样的产品清单......

GET /products

我也可以获取一个产品或评论或这样的产品......

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

那些很清楚。但当我想得到我写的所有评论时,问题就出现了。 我可以像这样创造uri ..

1. GET /products/reviews?author=myId

2. GET /reviews?author=myID

然而,第一个问题来自{productID}和评论之间的冲突。 下一个问题来自关系产品和评论,因为评论应该根据层次结构在产品之下。

如何获得我使用RESTful API撰写的所有评论?

3 个答案:

答案 0 :(得分:0)

通常路线就像这样

GET / products /:product_id / reviews?author = myID

所以参数是    - product_id    - 作者

通过这种方式,您将获得某个产品和作者的所有评论。

但是,如果您想要所有评论,那么这是正确的:

获取/评论?author = myID

答案 1 :(得分:0)

要获取给定作者为所有产品撰写的所有评论,请使用RESTful方式执行此操作

GET / authors / {authorId} / reviews

如果您想获得给定作者为产品撰写的所有评论,那么您可以使用

(a)GET / authors / {authorId} / products / {productId} / reviews

我喜欢这种方法,而不是在查询字符串中指定productId或authorId。作者包含产品,产品包含评论,因此这是一个很好的RESTful URL。但是,如果要使用查询字符串,则可以使用以下任一方法:

(b)GET / products / {productId} / reviews?authorId = {authorId}

(c)GET / authors / {authorId} / reviews?productId = {productId}

但我个人更喜欢选项(a)而不是选项(b)或(c)。我认为它以更清洁的方式描述了对象层次结构。

答案 2 :(得分:0)

我想使用第二个如果我是你,由于平坦的URI通常比那些分层短URI是更容易的路线:它是容易意外输错URI模板

所以使用

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

也可以。 (如果您有不同的评论类型,可能最好使用product-reviews而不是reviews。)

为了避免误解,REST没有URI结构约束,这些是实现细节,因此您可以同时使用您提出的URI。您应该记录它们并应用HATEOAS约束。