W API, nad którym pracuję, jest operacja usuwania zbiorczego, która akceptuje tablicę identyfikatorów:
["1000", ..., "2000"]
Mogłem zaimplementować operację usuwania według własnego uznania, więc postanowiłem uczynić całą transakcję transakcyjną: to znaczy, jeśli pojedynczy identyfikator jest nieprawidłowy, całe żądanie kończy się niepowodzeniem. Nazywam to trybem ścisłym .
try{
savepoint = conn.setSavepoint();
for(id : IDs)
if( !deleteItem(id) ){
conn.rollback(savepoint);
sendHttp400AndBeDoneWithIt();
return;
}
conn.commit();
}
Alternatywą (zaimplementowaną gdzie indziej w naszym pakiecie oprogramowania) jest robienie tego, co możemy w backendu i zgłaszanie awarii w tablicy. Ta część oprogramowania obsługuje mniej żądań, więc odpowiedź nie jest gigantyczną tablicą ... teoretycznie.
Niedawny błąd występujący na serwerze ubogim w zasoby zmusił mnie do ponownego spojrzenia na kod, a teraz kwestionuję moją pierwotną decyzję - tym razem bardziej motywują mnie potrzeby biznesowe niż najlepsze praktyki. Jeśli, na przykład, nie uda mi się całe żądanie, użytkownik będzie musiał spróbować ponownie, a jeśli pewna liczba elementów zostanie usunięta, użytkownik może zakończyć akcję, a następnie poprosić administratora o resztę (podczas pracy nad naprawieniem błędu) !). Byłby to tryb dozwolony .
Próbowałem poszukać wskazówek w tej sprawie, ale wpadłem z pustymi rękami. Przyszedłem więc do ciebie: czego najbardziej oczekują tego rodzaju operacje masowe? Czy powinienem bardziej trzymać się ściśle, czy powinienem być bardziej liberalny?