Podczas omawiania interfejsów API między systemami (na poziomie biznesowym) w naszym zespole często występują dwa różne punkty widzenia: niektórzy wolą bardziej - powiedzmy - ogólne podejście abstrakcyjne, a inne proste „konkretne” podejście.
Przykład: projekt prostego interfejsu API „wyszukiwania osoby”. konkretna wersja byłaby
searchPerson(String name, boolean soundEx,
String firstName, boolean soundEx,
String dateOfBirth)
Ludzie opowiadający się za konkretną wersją mówią:
- interfejs API jest samodokumentujący
- łatwo to zrozumieć
- łatwa do sprawdzenia (kompilator lub jako usługa internetowa: sprawdzanie poprawności schematu)
- POCAŁUNEK
Druga grupa ludzi w naszym zespole powiedziałaby „To tylko lista kryteriów wyszukiwania”
searchPerson(List<SearchCriteria> criteria)
z
SearchCritera {
String parameter,
String value,
Map<String, String> options
}
z możliwym utworzeniem „parametru” jakiegoś typu wyliczenia.
Zwolennicy mówią:
- bez zmiany (deklaracji) interfejsu API implementacja może się zmienić, np. dodając więcej kryteriów lub więcej opcji. Nawet bez synchronizacji takiej zmiany w czasie wdrażania.
- dokumentacja jest konieczna nawet w przypadku konkretnego wariantu
- sprawdzanie poprawności schematu jest przereklamowane, często trzeba dokonać dalszej weryfikacji, schemat nie obsługuje wszystkich przypadków
- mamy już podobny interfejs API z innym systemem - ponowne użycie
Kontrargumentem jest
- dużo dokumentacji na temat prawidłowych parametrów i prawidłowych kombinacji parametrów
- większy wysiłek komunikacyjny, ponieważ trudniej jest zrozumieć dla innych zespołów
Czy są jakieś najlepsze praktyki? Literatura?