Nell'API su cui sto lavorando c'è un'operazione di eliminazione in blocco che accetta una matrice di ID:
["1000", ..., "2000"]
Ero libero di implementare l'operazione di eliminazione come avevo ritenuto opportuno, quindi ho deciso di rendere l'intera operazione transazionale: ovvero, se un singolo ID non è valido, l'intera richiesta non riesce. Chiamerò questa modalità rigorosa .
try{
savepoint = conn.setSavepoint();
for(id : IDs)
if( !deleteItem(id) ){
conn.rollback(savepoint);
sendHttp400AndBeDoneWithIt();
return;
}
conn.commit();
}
L'alternativa (implementata altrove nella nostra suite di software) è fare ciò che possiamo nel back-end e segnalare guasti in un array. Quella parte del software gestisce meno richieste, quindi la risposta non finisce per essere un array gigantesco ... in teoria.
Un recente bug che si è verificato in un server povero di risorse mi ha fatto rivedere il codice, e ora sto mettendo in dubbio la mia decisione originale, ma questa volta sono motivato più dalle esigenze aziendali piuttosto che dalle migliori pratiche. Se, ad esempio, non riesco a soddisfare l'intera richiesta, l'utente dovrà riprovare, mentre se un numero di elementi viene eliminato, l'utente può completare l'azione e quindi chiedere a un amministratore di fare il resto (mentre lavoro per correggere il bug !). Questa sarebbe la modalità permissiva .
Ho provato a cercare online qualche consiglio in merito, ma sono venuto a mani vuote. Quindi vengo da te: cosa ci si aspetta di più da operazioni di massa di questo tipo? Dovrei attenermi a qualcosa di più rigoroso o dovrei essere più permissivo?