我正在使用的API中有一个批量删除操作,该操作接受ID数组:
["1000", ..., "2000"]
我可以按照自己的意愿随意执行删除操作,因此我决定使整个事务具有事务性:也就是说,如果单个ID无效,则整个请求将失败。我将其称为严格模式。
try{
savepoint = conn.setSavepoint();
for(id : IDs)
if( !deleteItem(id) ){
conn.rollback(savepoint);
sendHttp400AndBeDoneWithIt();
return;
}
conn.commit();
}
备选方案(在软件套件中的其他位置实现)是尽我们所能在后端进行操作,并报告阵列中的故障。该软件的这一部分处理的请求较少,因此从理论上讲,响应不会成为一个巨大的数组。
资源贫乏的服务器中最近发生的一个错误使我再次查看代码,现在我在质疑最初的决定-但是这次,我更多地是出于业务需求而不是最佳实践的动力。例如,如果我未能通过整个请求,则用户将不得不重试,而如果删除了许多项目,则用户可以完成操作,然后要求管理员执行其余操作(在我修复错误的同时) !)。这将是许可模式。
我尝试在网上寻找有关此事的一些指导,但我空手而归。所以我来找你:这种性质的批量操作最期望什么?我应该坚持更严格,还是应该更宽容?