TypeScriptowe typowanie jest bezsprzeczną pomocą podczas pisania bezpiecznego i czytelnego kodu. W przypadku operowania na danych które pochodzą z zewnętrznych źródeł mamy możliwość użycia generatorów, które utworzą dla nas modele danych oraz serwisy potrzebne do współpracy z nimi. Wymogiem jest posiadanie dokumentacji dokładnie opisującej każdy kontrakt.
Użycie generatorów daje nam jeszcze jedną przewagę (przy założeniu, że dokumentacja ma odzwierciedlenie w rzeczywistym działaniu API) – pozwala na automatyczne uruchomienie generatora i utworzenia Pull Requesta za każdym razem, gdy zaistniała jakaś zmiana w dokumentacji.
Poniżej przedstawię dwie biblioteki, jedną opartą o standard OpenAPI, pozwalającą wygenerować potrzebne do współpracy z API interfejsy oraz serwisy. Druga natomiast zapewni nam utworzenie Typów na podstawie GraphQL Schema.
@openapitools/openapi-generator-cli
Przykładowe wywołanie:
npx openapi-generator-cli generate \
-i PATH_TO_YAML_OR_JSON_INPUT_FILE \
-g typescript-angular \
-o PATH_TO_OUTUP_DICTIONARY \
--additional-properties=ngVersion=X.X.X,supportsES6=true,withInterfaces=true
Ta biblioteka generuje wszystko, co jest nam potrzebne do komunikacji z API – interfejsy oraz moduł zawierający serwisy z metodami wykorzystującymi pod spodem Angularowy HttpClient, zwracającymi Observable w konkretnym typie. Dodatkowo radzi sobie z dokumentacją rozbitą na wiele plików YAML, a także typami rekurencyjnymi.
@graphql-codegen/cli
npx graphql-codegen init
Wywołując powyższą komendę zostaniemy przeprowadzeni przez konfigurator. Biblioteka pozwoli nam wygenerować Typy na podstawie GraphQL Schema. Dostępnych jest również sporo pluginów pozwalających rozszerzyć funkcjonalność narzędzia. W celu zapoznania się z pełną dokumentacją odwiedź stronę projektu na GitHub.