Hej wszystkim,
Probuje znalezc najlepsze rozwiazanie dla zadesignowania REST API, ale niestety wiekszosc artykulow opisuje proste interfejsy. W moim przypadku mam obecnie endpoint do zmiany statusu zamowienia
PUT <url>/orders/{orderID}
zamowienie moze miec rozne statusy (zamkniete, oczekujace, zablokowane, wyslane do weryfikacji). Problem w tym ze dla kazdego z tych statusow roznia sie parametry ktore API przyjmuje (np zmiana statusu na oczekujace wymaga przekazania localdatetime z czasem oczekiwania. Natomiast zmiana status na zamkniete nie wymaga podania zadnego czasu). W wyniku tego powstala wielka metoda w kontrolerze ktora przyjmuje wszystkie mozliwe parametry dla wszystkich statusow:
@RequestParam Status status,
@RequestParam String blockerReason,
@RequestParam Approver approverPerson,
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endTime)
Moze wyglada to spoko z poziomu API (jeden endpoint), ale bardzo mi sie nie podoba w kodzie. Metoda przyjmuje wiele parametrow z ktorych wiekszosc jest nie wykorzystana. Na poczatku trzeba zrobic ifa sprawdzajac status i potem uzyc parametry potrzebne dla tego procesu.
Chcialbym to rozbic na mniejsze metody z mniejsza iloscia parametrow z ktorych wszystkie sa potrzebne. Przykladowo, metoda zmieniajaca status na oczekujace przyjmowalaby jedynie dwa potrzebne parametry:
@PutMapping(value = "/{...}", produces = {"application/json"})
public void changeToWating(@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endTime) {
Nie byloby tez koniecznosci sprawdzania jaki jest status tak jak aktualnie, bo byloby to API do zmieniania statusu na oczekujace, wiec wiemy ze status powinien byc ustawiony na oczekujace.
Problem jest taki ze nie wiem jak zaprojektowac API pod to. Wiekszosc dobrych praktych mowi ze nie powinno uzywac sie czasownikow, wiec API w stylu /orders/{orderId}/changestatus/waiting raczej nie wyglada dobrze.
Mieliscie moze podobne przypadki? Jak je rozwiazaliscie?
zadesignowania
- WAT?