Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest API最佳实践-单操作和批量_Rest_Api - Fatal编程技术网

Rest API最佳实践-单操作和批量

Rest API最佳实践-单操作和批量,rest,api,Rest,Api,让我的服务器能够执行名为“A”的操作。 现在,我的服务器需要有额外的能力来执行批量“A”操作 服务器上的路由为: /entity/:entityId/'A'/:'A'Id 添加批量功能面临两种方法: 1) 向每个方法公开2条路由: /entity/:entityId/'A'/:'A'Id和 /entity/:entityId/'A'请求正文中包含'A'ID列表 2) 删除'A'Id参数,并向名为bulk的第一个路由添加一个查询参数,该路由具有布尔值: /entity/:entityId/'A'/

让我的服务器能够执行名为“A”的操作。
现在,我的服务器需要有额外的能力来执行批量“A”操作

服务器上的路由为:
/entity/:entityId/'A'/:'A'Id

添加批量功能面临两种方法:

1) 向每个方法公开2条路由:
/entity/:entityId/'A'/:'A'Id

/entity/:entityId/'A'
请求正文中包含'A'ID列表

2) 删除
'A'Id
参数,并向名为
bulk
的第一个路由添加一个查询参数,该路由具有布尔值:
/entity/:entityId/'A'/?bulk=boolean

如果
bulk==true
则在请求正文中查找
'A'Id[]

否则,如果
bulk==false
则在请求正文中查找
id
条目

我觉得第一种方法更好,我想听听你的想法,或者是一种完全不同的方法

听到任何意见都是幸运的,

谢谢。

查询参数适用于
GET
方法,如:

curl -X GET host.com/megacorp/employee?employee_id[]=1&employee_id[]=2
但是对于
POST
PUT
方法,最好使用以下内容:

curl -XPOST host.com/megacorp/employee/_bulk -d '{"data":[
    {"id":"1", "name": "John Doe"},
    {"id":"2", "name": "Jane Doe"}
]}'
POST
PUT
1个资源,只需在请求中提供1个对象,如:

curl -XPUT host.com/megacorp/employee/1 -d '{
    "name": "JOHN DOE"
},'

大多数情况下,最好避免批量操作。例如,如果您试图在一个请求中创建/更新/删除100条记录,请执行100个API调用。当试图在一个请求中验证和保存100个内容并将错误反馈给用户时,错误处理会变得很麻烦。此外,如果有100个请求,您可以使用javascript并行处理请求(我认为浏览器会限制您一次打开5个连接),在多个服务器之间实现负载平衡。并行保存100的总时间比同步保存100的总时间快,而且您不会冒超时的风险。Rails指南提供批量保存解决方案的唯一时间是通过父对象通过接受嵌套属性进行保存。通常,Rails关于批量的最佳实践是“不”,这就是为什么路由器没有一个默认选项,比如它们的
resource
resources
。正如@Nate已经提到的,REST和/或HTTP的优势实际上并不是处理批量操作。不仅批量操作在错误处理方面是不可取的,而且您也不会从缓存HTTP中获益。通常,对资源执行的非安全操作将导致该URI的任何缓存响应被逐出;这里的URI是事实上的缓存密钥。因此,使用不同的端点来管理资源不会导致此类缓存响应被逐出,并可能因此将过时的信息返回给客户端