经过StackOverflow上的几篇文章后,我仍然不太清楚在URL中使用查询参数是否被认为是RESTFUL。例如,给定地址http://www.example.com/product.php?productID=123。它是RESTFUL设计吗?我的直觉说这是因为它等同于向服务器发送HTTP GET请求以从数据库中获取相应的数据。
如果它是RESTFUL设计,我的第二个问题是,如果我们只使用这个"查询参数"我们只能实现HTTP GET。样式?例如,我们永远不能通过使用带有查询参数?productID=123
的URL来执行HTTP POST请求,对吧?
感谢。
答案 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。