在URL中使用查询参数被视为' RESTFUL"?

时间:2017-04-20 17:21:26

标签: web-services rest http url restful-url

经过StackOverflow上的几篇文章后,我仍然不太清楚在URL中使用查询参数是否被认为是RESTFUL。例如,给定地址http://www.example.com/product.php?productID=123。它是RESTFUL设计吗?我的直觉说这是因为它等同于向服务器发送HTTP GET请求以从数据库中获取相应的数据。

如果它是RESTFUL设计,我的第二个问题是,如果我们只使用这个"查询参数"我们只能实现HTTP GET。样式?例如,我们永远不能通过使用带有查询参数?productID=123的URL来执行HTTP POST请求,对吧? 感谢。

2 个答案:

答案 0 :(得分:0)

a)您可以使用查询参数。您可以使用路径段。或者你可以使用两者。你的选择。

b)是的,您可以使用查询参数POST到URI。

答案 1 :(得分:0)

Path params和query params应该在不同的场景中使用:

路径参数:

当您尝试按ID访问资源时,应该使用它。例如

example/products/123456

以上您将获得ID为123456的产品。

如果您有子资源,例如:

example/products/123456/comments/1324

以上您将ID为1324的评论转换为ID为123456的产品。

查询参数:

当您尝试使用与ID不同的过滤器查询资源时,应该使用它。例如:

example/products?kind=food

上面你得到的所有产品都是他们的好食物。

如果您有更多过滤器,请执行以下操作:

example/products?kind=food&priceLessThan=1200

上面你得到的所有产品都是实物食品,价格低于1200.你应该考虑到查询参数没有必要将字段与产品资源相匹配,在这种情况下,价格就是字段到产品,而不是priceLessThan,这个名称只是过滤资源的逻辑。

此外,你可以这样排序和分页:

example/products?kind=food&priceLessThan=1200&sortBy=name&page=10

如您所见,查询参数更灵活,因此,我们应该使用它们进行过滤。

使用查询参数POST:

你可以使用它,但是,它应该很奇怪。 POST方法用于创建新资源,而在Request Body中,您可以像创建JSON或XML一样放置创建它所需的所有信息。

我在创建资源时需要一些元数据,我建议使用Request Header。