2017-04-20 66 views
-1

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

如果是RESTFUL设计,我的第二个问题是我们如果我们只使用这种“查询参数”风格,那么只能实现HTTP GET?例如,我们永远不能通过使用带有查询参数的URL进行HTTP POST请求?productID=123,对吧? 谢谢。

+0

查询字符串是REST的一部分... –

+0

我感到困惑,因为我在互联网上发现的例子在这种风格:http://www.example.com/product.php/POST,让我不知道.. 。无论如何感谢您的答案 – jackycflau

+0

btw如果我使用这种风格,我可以做这个POST请求?我有0个想法.. – jackycflau

回答

0

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

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

0

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

路径参数:

当你试图通过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,这个名称只是过滤资源的逻辑。

此外,你可以排序和pagining这样的:

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

正如你所看到的,查询参数更灵活,因此,我们应该使用这些过滤。

POST与查询参数:

您可以使用它,但是,它应该是陌生的。POST方法用于创建新资源,并且可以将请求主体创建为JSON或XML所需的所有信息。

我需要一些元数据,当您创建一个资源,我建议使用请求头。

相关问题