POST. W ciele POSTa lista obiektów, które należy umieścić w bazie danych. (Towary, których stan trzeba zaktualizować w blablabla.) Jeden towar, jeden wiersz do dodania do bazy.
Co, jeśli nadchodzi POST z pustą listą towarów?
Dla mnie to było oczywiste: 200 i no-op. Ale się admin czepnął, wymaga by w takiej sytuacji leciało 400. Zresztą inni ludzie tez mi mówili, że dodawanie pustej listy wierszy do bazy danych powinno być zabronione i kończyć się błędem. Nie rozumiem?
Tak chyba działa wszystko: na przykład:
List<Cośtam> l = blablabla;
l.AddRange(Enumerable.Empty<Cośtam>());
Dozwolona operacja, no-op.
Kolejny argument: Gdyby potraktować listę jako monadę, to dowolne operacje na pustej liście są dozwolone, ale są no-opem.
I jeszcze jeden argument, tym razem praktyczny: czasami takie podejście pozwala zaoszczędzić if
ów.
Zdawało mi się - teraz myślę, że błędnie - że wynika to z tego, że niedawno skończyłem licencjat, a przecież informatyka to obecnie połowa matematyki. Wydawało mi się, że moja silna intuicja, że dodawanie pustej listy obiektów gdziekolwiek powinno być dozwolone wypływa właśnie z tej matematyki na studiach (na tej samej zasadzie, na której zero jest pełnoprawną ilością, a pusta lista jest pełnoprawną listą - rozumowałem, że dla ludzi bez choćby minimalnego wykształcenia matematycznego zero jest zaprzeczeniem ilości (bo ilość wskazuje na to, że coś jest, a zero mówi, że czegoś nie ma), zaś pusty zbiór to pojęcie wewnętrznie sprzeczne (z tego samego powodu)). Ale nawet ludzie po kilku matematycznych przedmiotach na studiach twierdzą, że dodawanie pustej listy do bazy winno byc zakazane, więc pewnie się myliłem.
I ostatni argument, nieco powiązany z powyższym: Ja bym rozumował, że operacja dodawania jakiejś listy obiektów do jakiegokolwiek zbioru (np. bazy danych) powinna kończyc się poprawnie, jeśli udało się doprowadzić do stanu, w którym spełniony jest warunek: dla każdego elementu listy jest on dodany. Jeśli lista jest pusta, to ten warunek jest spełniony na zasadzie vacuous truth, a więc operacja powinna zakończyć się sukcesem zawsze.
Czego nie rozumiem? Dlaczego RESTowy endpoint dodający wpisy do bazy winien zwrócić 400, jeśli lista wpisów jest pusta? Skąd sie biorą moje silne intuicje, że powinien to być zakończony sukcesem no-op?