REST API命名规范

4

假设有以下URI:

/myapp/books/status/{status}

例如:
/myapp/books/status/new 

这将返回所有标记有此状态的书籍。

如何为返回未标记具有特定状态的所有书籍设置适当的URI?

/myapp/books/notstatus/new

我希望返回除了某个特定状态的所有书籍集合。
请给予建议。
2个回答

5
我建议使用查询参数来过滤您的书籍列表资源状态:
myapp/books/?status=new
myapp/books/?status=not_new

两个查询都返回相同的资源(一本书的列表),只是在列表中筛选出你想要的类型,因此使用查询参数是有意义的。我使用了“not_”前缀来反转查询状态,但你可以使用任何约定。
REST不要求你避免使用get参数(似乎有些人认为get参数是巫术),只是不要用它们来进行伪RPC调用 :)
我喜欢这种方法的原因是,当你可能想要添加一个检查所有具有多个信息的书籍的选项时,比如那些具有新状态和良好条件的书籍时,它会打开你的后续选择。
    myapp/books/?status=new&condition=good

如果你尝试将它分解成url片段而不是查询参数,那么很快就会变得混乱。

2
据我所知,有几种方式,它们都是正确的(从REST的角度来看):
- 查询字符串参数
myapp/books?status=new
- OData查询 http://www.odata.org/documentation/uri-conventions myapp/books?$filter=status eq 'new'
- 在URI中也可以
myapp/books/status/{status}
个人而言,我更喜欢使用查询字符串或OData。
当技术特定时(如ASP.NET Web API、WCF数据服务,非Microsoft也应具有相应功能),使用OData特别好,可避免编写此类查询的任何代码。
它允许暴露预筛选集合,然后在客户端使用这样的查询进行过滤。在这种情况下,当暴露集合时,我使用OData查询。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接