web-services - 在 REST Web 服务中使用查询字符串

标签 web-services rest query-parameters path-parameter

我认为使用 REST Web 服务的一个主要特征和原因是使用路径参数而不是查询参数。但是许多公开可用的 REST Web 服务使用查询参数。

我认为不应在 REST Web 服务中使用查询参数是错误的吗?
是否有关于不在 REST Web 服务中使用查询参数的建议或规则?

最佳答案

查询字符串仍然可以在 REST Web 服务中使用,只是方式不同。
您必须将 URL 视为资源的关键。 URL 是资源的唯一标识符。例如

http://example.com/products/123   -- where 123 is the id of the products.
访问 /products将返回完整的产品列表。添加 id 将返回特定产品。

对每个过滤器使用斜杠的问题
如果您想以特定方式订购产品怎么办?有人会说
http://example.com/products/united-states
好吧,现在乍一看有些模棱两可。美国是身份证吗?那么这个歧义可以通过说一个 id 表示为 \d+ 来解决。 .正确的。
好的,所以我们由单词组成的第一个参数是一个国家。
现在假设我们想要添加更多过滤器,让我们尝试添加更多斜线。
http://example.com/products/united-states/home/asc
但我不想要美国产品!但是还是想要家的产品。
http://example.com/products/home/asc
等等……家是国家吗?我现在不确定,这有点模棱两可......
如果我明天想添加另一个过滤器怎么办?我会怎么做...添加更多斜线?
URL 变得杂乱无章,充满了模糊的参数,这些参数起初是可选的,但由于歧义而变成必需的。

我的建议
对我来说,正确的方法是使用 查询字符串 对于特定于查询的事情。
因为,我可以按我想要的任何方式对查询进行排序,它仍然是相同的查询。我查询产品。
所以表格应该是这样的
http://example.com/products -- all products
http://example.com/products/{id} -- specific one
http://example.com/products/?country=united-sites -- filtered
通过这种方式,您可以随时添加新过滤器,并保持 URL 清晰,即使您更改过滤器也不会中断。

更多信息
如果您想了解更多信息,我真的建议您this conference 作者:David Zülke,为 Symfony 框架工作的人。他谈到了 REST Web 服务的很多东西,但他也专门谈到了 URL 以及如何构建它们(主要是 16 到 30 分钟)。
你也可以看看 apigee website .他们有很多关于 REST 的视频(和书籍)。更具体地说 this video ,这真的是这里的主题。

关于web-services - 在 REST Web 服务中使用查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16086513/

相关文章:

javascript - Phonegap 和 Restful 网络服务

java - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) FormParameter 为空

java - 使用 Java 配置 Spring RESTFUL API webapp

JSF 添加查询参数

python - 如何以元组列表的形式处理查询参数?

vue.js - VueJS : $router. 推送不适用于查询参数

Java Web Service(SOAP) 消息格式通用(名称/值属性)节点与特定节点

java - android中数组设置值

android - 通过 REST API 处理 Android 服务和服务器之间的数据同步

javascript - 无法从其余服务器获取 Json 响应