@Batman109:
To w ogóle jest poprawne i ma ręce i nogi? Czy nie powinno się tak robić?
Jeśli tak, to jaki jest taki normalny/właściwy sposób postępowania w takich przypadkach?
Bardzo mi się podoba, że stawiasz sobie to pytanie.
To u czym mówisz, a odniesione do REST, to ja nazywam zgwałcony REST.
Czysty, prawdziwy REST to aktualizowanie stanu obiektów (trudno sobie wyobrazić inaczej niż pojedynczych *)
) za pomocą 3-5 "słów HTTP".
Niestety po kopernikańsku, gorszy pieniądz wypiera lepszy pieniądz, REST uzyskał monokulturową dominację, a w odstawkę poszły modele takie jak RPC, gdzie operacje dało się zamodelować elegancko.
Weźmy takie szkolny przykład, przelew między kontami, w czystym REST to są dwa oddzielne konta, a operacja przelewu miedzy mini nie jest objeta transalcką
patch Http//... accounts/123
ballance=ballance+USD23
patch Http//... accounts/567
ballance=ballane-USD23
Gdzie w RPC byśmy modelowali
moneyTransfer(acc1, acc2, amount)
Na szczęście /nieszczęście przykład przelewu jest na tyle prosty, że wystarczy rest tylko lekko zgwałcony.
post http://..../transfers
acc1 =1234, acc2 = 5678, amount = 23
Gwałt niewielki, wprowadźmy fikcyjną encję RESTową o nazwie Przelew/Transfer, która ma powód istnieć tylko chwilkę, aby pod maską zrobić transakcje biznesową (zarazem będącą transakcją bazodanową) przelewu
Więc sam sobie dałem trochę kontrprzykład, ale tylko dlatego ze zjawisko gospodarcze ma bardzo prosty model. Tu obiektu (i endpointu) Transfer(s) da się obronić łatwo, bo jasną nazwę, a i da się uzasadnić jego trwałe istnienie (dla celów ksiegowych / archiwalnych)
Przykład, który wydaje się niewykonalny w czystym REST: zarezerwuj pokoje 17, 19 i 21 (np dla jakiejś grupy przyjaciół, oni znają i lubią te pokoje) - ale wszytskie albo żaden. Na RPC, np względnie najwięcej używam Apache Thrift bym wywołał procedurę makeReservation(roomList, date1, date2)
Wracając do twojego zagadnienia:
O ile grupa modyfikacji bazy danych ma jakiś wyrazisty, elegancki "wspólny mianownik", to są nadzieję na zrobienie, które można uznać za elegancie (i będzie transakcyjne). O ile nie -> też się da, ale to będzie brutalny gwałt na zasadach REST
pisząc ręcznie sql'ki narażasz się na SQL injection.
Zbyt wysoki poziom uogólnienia. Można się przed takim działaniem prosto zabezpieczyć. Użycie ORM też nie zabezpiecza przed tym atakiem https://owasp.org/www-community/Hibernate