Witam,
chciałbym zapytać co w Waszym przekonaniu jest lepszym rozwiązaniem, jeden generyczny endpoint API, czy kilka konkretnych.
Rozważmy sytuację, nasza firma obsługuje placówki szkolne: SchoolAbc, SchoolDef, SchoolXyz.
Potrzebujemy wystawić API do dodawania uczniów do szkoły (API wewnętrzne tylko i wyłącznie dla frontu, który jest tworzony przez naszą firmę). Każda z tych placówek oczywiście ma swoją logikę i oczekuje innych danych dotyczących uczniów:
- SchoolAbc: FirstName, LastName, Pesel
- SchoolDef: FirstName, LastName, BirthDate,
- SchoolXyz: FirstName, LastName, Pesel, Address, PhoneNumber etc...
Każda z placówek ma też inną walidację, czyli np. SchoolAbc pozwala na dodanie ucznia, jeśli ten nie ukończył 20 roku życia itd.
Do tej pory wystawiałem osobne endpointy dla każdej z placówek czyli:
- /api/school/abc/students
- /api/school/def/students
- /api/school/xyz/students
Każdy z endpointów przyjmował w body inne parametry, które następnie trafiały do dedykowanego placówce command handlera, który był odpowiedzialny za realizację useCase'a (walidacja + wykonanie command'a).
Wydaje mi się to naturalne, natomiast lider mojego zespołu chciałby żeby to wszystko było realizowane przez jeden generyczny endpoint np.
- /api/students
Czyli przesyłam dane, a następnie dopiero w handlerze, za pomocą fabryki mam zmapować generyczny request na request dedykowany dla konkretnej placówki i wywołać klasę obsługującą logikę odpowiedniej szkoły. Nie widzę zalet takiego rozwiązania, ok jest jeden endpoint, ale to wcale nie znaczy, że jest mniej pracy. W tym przypadku również muszę zaprogramować logikę dla konkretnej szkoły, a dodatkowo dochodzi mi konieczność przemapowania requestów. Odnoszę też wrażenie, że kod staje się też mniej czytelny, jak i samo API.
Co Wy o tym sądzicie?