Dans l'API sur laquelle je travaille, il existe une opération de suppression en masse qui accepte un tableau d'ID:
["1000", ..., "2000"]
J'étais libre d'implémenter l'opération de suppression comme je l'entendais, j'ai donc décidé de rendre le tout transactionnel: c'est-à-dire que si un seul ID n'est pas valide, la demande entière échoue. J'appellerai cela le mode strict .
try{
savepoint = conn.setSavepoint();
for(id : IDs)
if( !deleteItem(id) ){
conn.rollback(savepoint);
sendHttp400AndBeDoneWithIt();
return;
}
conn.commit();
}
L'alternative (implémentée ailleurs dans notre suite logicielle) est de faire ce que nous pouvons dans le backend et de signaler les défaillances dans un tableau. Cette partie du logiciel traite moins de demandes, donc la réponse ne finit pas par être un tableau gigantesque ... en théorie.
Un bug récent survenu sur un serveur pauvre en ressources m'a fait revoir le code, et maintenant je remets en question ma décision initiale - mais cette fois, je suis davantage motivé par les besoins de l'entreprise que par les meilleures pratiques. Si, par exemple, j'échoue à la demande entière, l'utilisateur devra réessayer alors que si un certain nombre d'éléments sont supprimés, l'utilisateur peut terminer l'action puis demander à un administrateur de faire le reste (pendant que je travaille sur la correction du bogue !). Ce serait le mode permissif .
J'ai essayé de chercher en ligne des conseils sur la question, mais je suis venu les mains vides. Je viens donc à vous: qu'attend-on le plus des opérations en vrac de cette nature? Dois-je rester plus strict ou dois-je être plus permissif?