我认为一个主要的特点及原因使用REST Web服务是使用路径参数,而不是查询参数。 但许多公开可用的REST Web服务中使用的查询参数。
我错在想,查询参数不应该在REST Web服务中使用? 是否有关于REST Web服务不使用查询参数的建议或规则?
我认为一个主要的特点及原因使用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? 那么这种模糊可以通过说出一个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视频(和书籍)。 更具体地讲这段视频 ,这是真正的主题在这里。