RESTURI设计的具体示例

RESTURI设计的具体示例,rest,uri,Rest,Uri,关于RESTURI设计的一个问题。在官方web api教程中,我看到了以下uri: Get a list of books by publication date: /api/books/date/2013-02-16 遵循rest原则,使用以下uri不是更好吗 /api/books?date=2013-02-16 谢谢在这种情况下,没有关于WARE参数的硬性规定。有些将它们放在URL路径中,有些将它们添加到查询字符串中。请注意,在REST中没有强调URL的外观。人们按照层次结构创建它

关于RESTURI设计的一个问题。在官方web api教程中,我看到了以下uri:

Get a list of books by publication date:    /api/books/date/2013-02-16
遵循rest原则,使用以下uri不是更好吗

/api/books?date=2013-02-16

谢谢

在这种情况下,没有关于WARE参数的硬性规定。有些将它们放在URL路径中,有些将它们添加到查询字符串中。请注意,在REST中没有强调URL的外观。人们按照层次结构创建它们,因为这样做是有意义的,因为他们的领域是这样的,例如:

/api/books/         # all books
/api/books/100      # details about the book with id=100
/api/books/mystery  # all books in the mystery category
另一方面,
/api/books/date/2013-02-16
有点牵强,这也是因为人们对资源的层次结构进行了思考,并且大多数时候对api进行了建模,因此,考虑到他们预计
/api/books/date
还将返回比
/api/books/date/2013-02-16
更大类别的一些书籍。但在这种情况下,它并没有真正的意义,所以也许这就是为什么你觉得
/api/books?date=2013-02-16
是一个更自然的选择


在这种情况下,我更喜欢
/api/books?date=2013-02-16
。但是,关于什么是更好的选择,也没有硬性规定,例如:

它们是平等的。根据URI标准,路径包含标识符的层次部分,而查询部分包含非层次部分。现在,在地图缩小集合的情况下,你可以根据你的品位考虑过滤器的层次性和非层次性。 顺便说一句,我更喜欢路径中的
param:value
解决方案,并用斜杠结束集合(或减少的集合)的URI,因此:
/api/books/date:2013-02-16/
,但是可以。这只是最佳实践,而不是标准…:-)

根据REST的统一接口约束,您必须将现有标准应用于定制解决方案,这就是为什么我们在本例中遵循URI标准