在RESTful API中,使用查询参数作为ID数组的方法

4
我过去几周一直在使用PHP(Laravel框架)构建RESTful API。同时,我正在构建一个使用此API的JavaScript前端(jQuery / Backbone)。
在这个API中,有一些GET请求需要大量的查询参数,其中大多数是ID数组。我已经将其结构化如下:
/api/cars?colors[]=1&colors[]=3&makes[]=6&makes[]=2&sold=false

(例如:ID=1的颜色是红色,ID=6的制造商是奥迪等)

在PHP中,从$_GET['colors']解析一个数组可以直接使用。同时,当我使用

$.ajax({
  url: "someurl",
  method: "GET",
  data: {
    cars: theCarsArray,
    makes: theMakesArray,
    sold: false
  }
});

看起来它也完美地工作了(数组如上所述通过URL发送)。我在想:这是在REST接口中发送ID数组的接受方法吗?这种方法有什么缺点?有哪些替代方案?

1个回答

2
根据我的经验,这是将数组值传递给PHP脚本的一种被接受的方式。而且既然你正在使用PHP,应该利用已有的资源。尽管如此,在其他编程语言/框架实现网页时,通常不会以这种方式传递数组值。在某些情况下,你可能会看到这样的代码:
/api/cars?colors=1&colors=3&makes=6&makes=2&sold=false

在这些语言/框架中,它们通常提供了访问请求参数作为标量或数组的方法。因此,您正在公开您的实现。如果您想隐藏您正在使用PHP的事实,您可以将其更改为上述内容,但是然后您需要添加其他功能来解析您的请求参数。不过,既然您正在PHP中实现这个,我认为利用它所提供的开箱即用功能没有任何问题。
我的唯一建议是将您的URL端点更改为/api/cars/,因为您返回的是汽车集合(可能),这似乎是更符合RESTful的方法。
无论如何,这只是我的两分钱。希望有所帮助。

这个语法真的只适用于PHP吗?看起来Rails也使用了这种方法?http://rails.nuvvo.com/lesson/6371-action-controller-parameters - ec30

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接