Web services 在URL中使用的查询参数被视为';“宁静”吗;?

Web services 在URL中使用的查询参数被视为';“宁静”吗;?,web-services,rest,http,url,restful-url,Web Services,Rest,Http,Url,Restful Url,在阅读了几篇关于StackOverflow的文章之后,我仍然不太明白在URL中使用查询参数是否被认为是RESTFUL的。例如,给定一个地址。这是一个宁静的设计吗?我的直觉认为这是因为它相当于向服务器发送一个HTTPGET请求,从数据库中获取相应的数据 如果它是RESTFUL设计,那么我的第二个问题是,如果我们只使用这种“查询参数”样式,那么我们只能实现HTTPGET?例如,我们永远不能使用URL和查询参数?productID=123,来执行HTTP POST请求,对吗? 谢谢。a)您可以使用查询

在阅读了几篇关于StackOverflow的文章之后,我仍然不太明白在URL中使用查询参数是否被认为是RESTFUL的。例如,给定一个地址。这是一个宁静的设计吗?我的直觉认为这是因为它相当于向服务器发送一个HTTPGET请求,从数据库中获取相应的数据

如果它是RESTFUL设计,那么我的第二个问题是,如果我们只使用这种“查询参数”样式,那么我们只能实现HTTPGET?例如,我们永远不能使用URL和查询参数
?productID=123
,来执行HTTP POST请求,对吗? 谢谢。

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


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

路径参数和查询参数应在不同的场景中使用:

路径参数:

当您试图通过ID访问资源时,应该使用它

example/products/123456
上面是id为123456的产品

如果您有子资源,例如:

example/products/123456/comments/1324
example/products?kind=food
在上面,您正在将id为1324的注释输入id为123456的产品中

查询参数:

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

example/products/123456/comments/1324
example/products?kind=food
在上面,你可以得到所有的产品,它们都是同类食品

如果您有更多过滤器,如:

example/products?kind=food&priceLessThan=1200
上面你得到的所有产品都是同类食品,价格低于1200美元。您应该考虑到,将字段匹配到产品资源中并不需要查询参数,在这种情况下,price是产品中的字段,而不是priceLessThan,此名称只是用于筛选资源的逻辑

此外,您可以按如下方式进行排序和分页:

example/products?kind=food&priceLessThan=1200&sortBy=name&page=10
如您所见,查询参数更灵活,因此,我们应该使用这些参数进行筛选

使用查询参数发布:

你可以用它,但是,它应该很奇怪。POST方法用于创建新资源,您可以将创建所需的所有信息(如JSON或XML)放入请求体中


如果在创建资源时需要一些元数据,我建议使用请求头。

查询字符串是REST的一部分。。。