查询字符串仍然可以在 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
等等... home 是一个国家吗?我现在不确定,有点模棱两可...
如果我明天想添加另一个过滤器怎么办?我该怎么办...添加更多斜线?
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,作者是为 Symfony 框架工作的人 David Zülke。他谈了很多关于 REST Web 服务的事情,但他也专门谈到了 URL,以及如何构建它们(主要是 16 到 30 分钟)。
您也可以查看apigee website。他们有很多关于 REST 的视频(和书籍)。更确切地说是this video,这是真正的主题。