Na API em que estou trabalhando, há uma operação de exclusão em massa que aceita uma matriz de IDs:
["1000", ..., "2000"]
Eu estava livre para implementar a operação de exclusão como quisesse, então decidi tornar tudo transacional: ou seja, se um único ID for inválido, toda a solicitação falhará. Vou chamar isso de modo estrito .
try{
savepoint = conn.setSavepoint();
for(id : IDs)
if( !deleteItem(id) ){
conn.rollback(savepoint);
sendHttp400AndBeDoneWithIt();
return;
}
conn.commit();
}
A alternativa (implementada em outro lugar em nosso pacote de software) é fazer o que podemos no back-end e relatar falhas em uma matriz. Essa parte do software lida com menos solicitações para que a resposta não acabe sendo uma matriz gigantesca ... em teoria.
Um bug recente ocorrendo em um servidor com poucos recursos me fez olhar para o código novamente e agora estou questionando minha decisão original - mas desta vez sou mais motivado pelas necessidades de negócios do que pelas melhores práticas. Se, por exemplo, falhar em toda a solicitação, o usuário terá que tentar novamente; se vários itens forem excluídos, o usuário poderá concluir a ação e solicitar ao administrador que faça o resto (enquanto eu trabalho na correção do bug) !). Este seria o modo permissivo .
Tentei procurar on-line por alguma orientação sobre o assunto, mas vim de mãos vazias. Então, venho até você: O que é mais esperado por operações em massa dessa natureza? Devo seguir rigorosamente mais ou devo ser mais permissivo?