В API, над которым я работаю, есть операция массового удаления, которая принимает массив идентификаторов:
["1000", ..., "2000"]
Я был свободен реализовать операцию удаления, как мне показалось подходящим, поэтому я решил сделать все это транзакционным: то есть, если один идентификатор недействителен, весь запрос завершится неудачно. Я назову это строгим режимом.
try{
savepoint = conn.setSavepoint();
for(id : IDs)
if( !deleteItem(id) ){
conn.rollback(savepoint);
sendHttp400AndBeDoneWithIt();
return;
}
conn.commit();
}
Альтернатива (реализованная в другом месте в нашем программном комплексе) - делать то, что мы можем в бэкэнде, и сообщать о сбоях в массиве. Эта часть программного обеспечения имеет дело с меньшим количеством запросов, поэтому ответ не превращается в гигантский массив ... в теории.
Недавняя ошибка, возникшая на сервере с ограниченными ресурсами, заставила меня снова взглянуть на код, и теперь я подвергаю сомнению свое первоначальное решение - но на этот раз меня больше мотивируют бизнес-потребности, а не лучшие практики. Если, например, я не выполню весь запрос, пользователю придется повторить попытку, тогда как, если несколько элементов будут удалены, пользователь может завершить действие, а затем попросить администратора сделать остальное (пока я работаю над исправлением ошибки !). Это был бы разрешительный режим.
Я пытался искать в Интернете некоторые рекомендации по этому вопросу, но я пришел с пустыми руками. Итак, я прихожу к вам: что больше всего ожидается от массовых операций такого рода? Должен ли я придерживаться более строгих правил или я должен быть более терпимым?