-->

在REST Web服务使用查询字符串(Using Query String in REST Web

2019-08-31 12:18发布

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

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

Answer 1:

查询字符串仍然可以在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? 那么这种模糊可以通过说出一个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。


更多信息

如果您想了解更多信息,我真的,真的劝你看看本次会议由大卫Zülke,一个家伙Symfony框架工作。 他谈到了很多的REST的Web服务的事情,但他也对网址,以及如何构建他们(主要是16至30分钟)具体谈。

您还可以看看apigee网站 。 他们有很多的关于REST视频(和书籍)。 更具体地讲这段视频 ,这是真正的主题在这里。



文章来源: Using Query String in REST Web Services