我见过的关于RESTful架构的所有示例都处理了一条记录.例如,mydomain.com/foo/53
要获取foo 53 的GET请求或mydomain.com/foo
创建新Foo 的POST .
但是多条记录呢?能够通过id请求一系列Foos或发布一系列新Foo通常会通过单个API请求而不是数十个单独请求更有效.你会"重载" mydomain.com/foo
来处理单个或多个记录的请求吗?或者你会添加一个mydomain.com/foo-multiple
来处理多个POST和GET?
我正在设计一个可能需要同时获取许多记录的系统(类似于某些内容mydomain.com/foo/53,54,66,86,87
)但是由于我没有看到任何这样的例子,我想知道是否有一些我只是没有得到关于RESTful架构的东西这使得这种方法"错误".
有一个很好的理由不在单个请求中返回多个记录,它的缓存能力较低,可扩展性较差.任何时候你想知道REST应该如何或为什么起作用,看一下网页.当您请求页面时,它会关闭到其他资源的链接,如多个图像,css文件,js文件等.
虽然尝试通过单个请求尝试并提取所有这些内容似乎更有效,但它更具可扩展性和缓存能力,可以将它们全部视为单独的资源,并允许Web服务器和保持活动连接来处理许多请求资源有效.如果您将所有css,javascript和图像内联到可以代表整个页面的单个下载中,当您访问需要某些相同资源的另一个页面时,您必须再次下载它们,因为您没有正确引用它们作为个人资源,浏览器第一次可以缓存.
当你确实拥有代表多个资源列表的东西时,另一种方法就是让列表成为各个资源的URL列表,并分别获取每个资源,就像在闪烁包含页面上所有图像的URL,它不会尝试将它们全部内嵌到页面本身.
当资源正确地允许缓存并且单独引用时,缓存命中率可能会非常高,允许Web服务器处理更多负载并允许客户端和服务器之间的缓存代理服务器以防止请求甚至不得不命中服务器.在认为这听起来很疯狂之前,网络很好地运用这种方法,想一想.
虽然我没有看到您的方法存在任何本质上的错误,但对于您的API用户来说,想要foo
具有任意ID的记录似乎有点奇怪.我立即怀疑他们正在使用ID来表示不同的概念,例如,foo
上周创建的所有s,等等.如果这就是他们正在做的事情,那么你应该在服务器上公开这个功能而不是使用ID列表作为代理.