Buduję interfejs API REST, aby udostępnić większość funkcjonalności istniejącego interfejsu API Java. Oba interfejsy API są do użytku wewnętrznego w mojej organizacji; Nie muszę projektować do użytku zewnętrznego. Mam wpływ na oba interfejsy API, ale wdrażam interfejs REST. Interfejs API Java będzie nadal używany w aplikacjach lokalnych (nie jest „wycofywany”), ale interfejs API REST będzie wykorzystywany do nowych znaczących prac rozwojowych.
Niektóre klasy API Java to po prostu dane (komponenty bean z właściwościami, pobierające, ustawiające). I przynajmniej niektóre z nich mają sens transmitować (w jakiejś formie) przez interfejs API REST jako dane (które zostaną przekazane do XML lub JSON). Na przykład klasa przechowująca informacje o maszynie serwerowej. Mam do czynienia z następującym wyborem dla tych klas danych: Czy ...
- udostępnić oryginalną klasę Java (lub podklasę) bezpośrednio w interfejsie API REST, lub
- utworzyć nową klasę przesyłania danych (wzorzec DTO) specjalnie dla interfejsu API REST?
Tak czy inaczej będę mieć klasy przesyłania danych REST; pytanie brzmi, czy adnotować oryginały, czy utworzyć nowe (które mogą znajdować się w pobliżu kopii oryginałów). Mogą być inne opcje, ale skupię się głównie na tych dwóch.
Argumenty za nr 1:
- SUCHO (nie powtarzaj się)
- Szybszy do wdrożenia
- Łatwiejsza aktualizacja REST API
Argumenty za # 2:
- Co jeśli REST API musi być wersjonowany oddzielnie od Java API? (Jest to dość prawdopodobne.)
- Co się stanie, jeśli nastąpią znaczące zmiany w klasach danych Java, takie jak usunięcie właściwości, dodanie zachowania lub zmiany w hierarchii klas? (Jest to również nieco prawdopodobne).
Najważniejsze jest to, że wydaje się to kompromisem między OSUSZANIEM (nr 1) i oddzieleniem (nr 2).
Skłaniam się do rozpoczęcia od nr 1, a następnie, jeśli pojawią się problemy, przejście do nr 2 później, zgodnie ze zwinną wytyczną, aby nie budować tego, czego nie możesz udowodnić, że potrzebujesz. Czy to zły pomysł; powinienem zacząć od nr 2, jeśli myślę, że i tak mogę tam skończyć?
Czy na moich listach brakuje istotnych argumentów / konsekwencji?