Nell'API su cui sto lavorando c'è un'operazione di eliminazione di massa che accetta un array di ID:
["1000", ..., "2000"]
Ero libero di implementare l'operazione di cancellazione come ritenevo opportuno, quindi ho deciso di rendere tutto transazionale: cioè, se un singolo ID non è valido, l'intera richiesta non riesce. Chiamerò questa modalità strict .
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) consiste nel fare tutto ciò che è possibile nel back-end e segnalare guasti in un array. Quella parte del software si occupa di un minor numero di richieste, quindi la risposta non finisce per essere un gigantesco array ... in teoria.
Un bug recente che si è verificato in un server povero di risorse mi ha indotto a guardare nuovamente il codice, e ora sto mettendo in discussione la mia decisione originale - ma questa volta sono motivato più dalle esigenze del business piuttosto che dalle migliori pratiche. Se, ad esempio, non riesco a completare l'intera richiesta, l'utente dovrà riprovare mentre, se un numero di elementi viene cancellato, l'utente può terminare l'azione e quindi chiedere ad un amministratore di fare il resto (mentre io lavoro per correggere il bug !). Questa sarebbe la modalità permissiva .
Ho provato a cercare online qualche indicazione in merito, ma sono venuto a mani vuote. Quindi vengo da te: cosa ci si aspetta di più dalle operazioni di massa di questa natura? Dovrei attenermi più rigorosamente, o dovrei essere più permissivo?