En la API en la que estoy trabajando, hay una operación de eliminación masiva que acepta una matriz de ID:
["1000", ..., "2000"]
Tuve la libertad de implementar la operación de eliminación como lo creía conveniente, así que decidí hacer que todo fuera transaccional: es decir, si un solo ID no es válido, toda la solicitud falla. Llamaré a esto el modo estricto .
try{
savepoint = conn.setSavepoint();
for(id : IDs)
if( !deleteItem(id) ){
conn.rollback(savepoint);
sendHttp400AndBeDoneWithIt();
return;
}
conn.commit();
}
La alternativa (implementada en otra parte de nuestro paquete de software) es hacer lo que podamos en el backend e informar fallas en una matriz. Esa parte del software trata con menos solicitudes para que la respuesta no termine siendo una matriz gigantesca ... en teoría.
Un error reciente que ocurrió en un servidor con pocos recursos me hizo volver a mirar el código, y ahora estoy cuestionando mi decisión original, pero esta vez estoy más motivado por las necesidades comerciales que por las mejores prácticas. Si, por ejemplo, fallo la solicitud completa, el usuario tendrá que volver a intentarlo, mientras que si se eliminan varios elementos, el usuario puede finalizar la acción y luego pedirle a un administrador que haga el resto (mientras yo trabajo en solucionar el error !). Este sería el modo permisivo .
Traté de buscar orientación en línea sobre el tema, pero he venido con las manos vacías. Entonces vengo a ustedes: ¿Qué es lo que más se espera de las operaciones masivas de esta naturaleza? ¿Debo seguir estrictamente más, o debería ser más permisivo?