在 URL 中使用查询参数是否被视为“RESTFUL”?
Is using query parameter in URL regarded as 'RESTFUL"?
看了好几篇Whosebug的帖子,还是不太明白在URL中使用query参数算不算RESTFUL。例如,给定一个地址 http://www.example.com/product.php?productID=123。是RESTFUL的设计吗?我的直觉是因为它相当于向服务器发送HTTP GET请求,从数据库中获取相应的数据。
如果是RESTFUL的设计,我的第二个问题是,只用这种"query argument"的样式,就只能实现HTTP GET了吗?例如,我们永远不能通过使用 URL 和查询参数 ?productID=123
来执行 HTTP POST 请求,对吗?
谢谢
a) 您可以使用查询参数。您可以使用路径段。或者您可以同时使用两者。您的选择。
b) 是的,您可以 POST 带有查询参数的 URI。
路径参数和查询参数应该在不同的场景中使用:
路径参数:
当您尝试通过 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。你应该考虑到查询参数不需要将字段匹配到产品资源中,在这种情况下,价格是字段为product,不是priceLessThan,这个名字只是过滤资源的逻辑。
此外,您还可以这样排序和分页:
example/products?kind=food&priceLessThan=1200&sortBy=name&page=10
如您所见,查询参数更加灵活,因此,我们应该使用它们进行过滤。
POST 查询参数:
可以用,但是,应该很奇怪吧。 POST 方法用于创建新资源并进入请求 Body 您可以将创建它所需的所有信息放入 JSON 或 XML.
我在创建资源时需要一些元数据,我建议使用请求 Header。
看了好几篇Whosebug的帖子,还是不太明白在URL中使用query参数算不算RESTFUL。例如,给定一个地址 http://www.example.com/product.php?productID=123。是RESTFUL的设计吗?我的直觉是因为它相当于向服务器发送HTTP GET请求,从数据库中获取相应的数据。
如果是RESTFUL的设计,我的第二个问题是,只用这种"query argument"的样式,就只能实现HTTP GET了吗?例如,我们永远不能通过使用 URL 和查询参数 ?productID=123
来执行 HTTP POST 请求,对吗?
谢谢
a) 您可以使用查询参数。您可以使用路径段。或者您可以同时使用两者。您的选择。
b) 是的,您可以 POST 带有查询参数的 URI。
路径参数和查询参数应该在不同的场景中使用:
路径参数:
当您尝试通过 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。你应该考虑到查询参数不需要将字段匹配到产品资源中,在这种情况下,价格是字段为product,不是priceLessThan,这个名字只是过滤资源的逻辑。
此外,您还可以这样排序和分页:
example/products?kind=food&priceLessThan=1200&sortBy=name&page=10
如您所见,查询参数更加灵活,因此,我们应该使用它们进行过滤。
POST 查询参数:
可以用,但是,应该很奇怪吧。 POST 方法用于创建新资源并进入请求 Body 您可以将创建它所需的所有信息放入 JSON 或 XML.
我在创建资源时需要一些元数据,我建议使用请求 Header。