11 rest web-services query-parameters path-parameter
我认为使用REST Web服务的一个主要特征和原因是使用路径参数而不是查询参数.但是许多公开可用的REST Web服务使用查询参数.
我认为查询参数不应该在REST Web服务中使用我错了吗?是否有关于不在REST Web服务中使用查询参数的建议或规则?
Hug*_*ois 27
查询字符串仍然可以在REST Web服务中使用,但与正常情况不同.
您必须将URL视为资源的关键.URL是资源的唯一标识符.例如
http://example.com/products/123 -- where 123 is the id of the products.
Run Code Online (Sandbox Code Playgroud)
访问/products将返回完整的产品列表.添加id将返回特定产品.
如果您想以特定方式订购产品怎么办?有人会说
http://example.com/products/united-states
Run Code Online (Sandbox Code Playgroud)
嗯,现在第一眼看上去有些含糊不清.美国是个身份吗?那个歧义可以通过说id表示为来解决\d+.正确.
好的,我们的第一个由单词组成的参数是一个国家.
现在假设我们要添加更多过滤器,让我们尝试添加更多斜杠.
http://example.com/products/united-states/home/asc
Run Code Online (Sandbox Code Playgroud)
但我不想只有美国产品!但还是想要家居产品.
http://example.com/products/home/asc
Run Code Online (Sandbox Code Playgroud)
等等......在一个国家?我现在不确定,它有点含糊......如果我想明天添加另一个过滤器怎么办?我该怎么做...添加更多斜杠?
URL变得杂乱,并且充满了模糊的参数,这些参数最初是可选的,并且由于含糊不清而成为强制性的.
对我来说,正确的方法是将查询字符串用于特定于查询的事物.因为,我可以以任何我想要的方式对查询进行排序,它仍然是相同的查询.我查询产品.
所以表格应该是这样的
http://example.com/products -- all products
http://example.com/products/{id} -- specific one
http://example.com/products/?country=united-sites -- filtered
Run Code Online (Sandbox Code Playgroud)
这样,您可以随时添加新过滤器,并保持清晰的URL,即使更改过滤器也不会中断.
如果您想了解更多信息,我建议您参加由Symfony框架工作的人员DavidZülke 参加此次会议.他谈到了很多关于REST网络服务的事情,但他也特别谈到了URL,以及如何构建它们(主要是16到30分钟).
你也可以看看apigee网站.他们有很多关于REST的视频(和书籍).更具体地说,这个视频,这里真的是主题.
| 归档时间: |
|
| 查看次数: |
19252 次 |
| 最近记录: |