GraphQL– stworzony przez Facebooka. Początki w 2012 roku. Inżynierowie szukali sposobu na zwiększenie wydajności newsfeedu. Szczególnie na telefonach. W tradycyjnym REST API newsfeed wysyłał zapytania do zbyt wielu endpointów. Newsfeed dostawał też dane, których nie potrzebował. Proces był zbyt skomplikowany i mało wydajny.
Dlatego stworzyli nowy język zapytań. Jedno zapytanie pozwala pobrać wszystkie potrzebne dane.
Tak powstał język zapytań. Mapuje on relacje pomiędzy obiektami w bazie danych. W ten sposób tworzy grafy. Czyli struktury, które odzwierciedlają wzajemne powiązania w danych. Język zapytań służy właśnie do czerpania informacji z tych grafów (wzajemnych relacji). Dzięki GraphQLaplikacja otrzymuje niezbędne dane. I to tylko wysyłając jedno zapytanie.
GraphQL w każdym języku
Facebook udostępnił kod źródłowy. Dlatego język zapytań został zaimplementowany dla każdego większego języka programowania. Konkretne implementacje GraphQL znajdziesz tutaj: link
Jak działa GraphQL?
Oto prosty przykład. Mamy bazę danych. Zawiera ona dane o osobach. Jednak chcemy uzyskać informacje o wzroście i koloru oczu danej osoby. Użyjemy do tego numeru PESEL.
W związku z tym zapytanie będzie wyglądało tak:
![]()
![]()
![]()
Tutaj wyniki dla OpenJdk
![]()
![]()
![]()
Co istotne:
- Odpowiedź otrzymamy w JSON.
- Dostaniemy dokładnie tyle informacji o ile prosiliśmy.
- Odpowiedź będzie w takim samym formacie, w jakim było zapytanie.
Dzięki temu owy język zapytań jest wydajny. Chcesz uzyskać na przykład więcej informacji np. o rodzicach tej osoby?
Przykładowe zapytanie wygląda tak:
![]()
![]()
![]()
GraphQL przejdzie przez graf zależności i odpowie:
![]()
![]()
![]()
Teraz trochę inaczej – zapytanie o córkę i żonę osoby nazywającej się “Andrzej Kowalski”:![]()
![]()
![]()
W odpowiedzi dostaniemy:![]()
![]()
![]()
To uproszczony model. Pokazuje jak działa język zapytań, czyli przechowuje wszystkie relacje, dlatego udostępnia wyłącznie dane o które pytamy.
GraphQL – wady i zalety
Zalety:
- Elastyczność – dane wysyłane są dostosowywane do zapytania
- Wyłącznie jeden endpoint
- Zwiększa wydajność API
- Dynamicznie się rozwija
- Definiując schemat ograniczasz potencjalne przyszłe błędy
Wady:
- Tylko format JSON
- Bardziej skomplikowana konfiguracja niż przy REST API
- Dłuższe przetwarzanie zapytania
- Prosty. Ale wymaga nauczyć się czegoś nowego.
GraphQL vs REST API
GraphQL sprawdzi się w aplikacjach o krótkim cyklu życia. Np. gdy nie wiemy jeszcze, jakie dane chcemy udostępniać, w związku z tym pozwala na łatwą modyfikację schematów. Nie wymaga rozkopywania kodu.
REST API jest prostsze w konfiguracji. Pozwala na pełną kontrolę po stronie serwera. Może wykorzystać typowe narzędzia HTTP. GraphQL tego nie umożliwia. Nie wymaga stosowania formatu JSON. REST API musi jednak zostać dobrze zaprojektowane. Inaczej problemy z wydajnością będą się nasilać.
Wniosek?
Warto stosować je równocześnie. Mogą się wzajemnie uzupełniać. Dzięki temu maksymalizujemy korzyści obu technologii.
Największe firmy świata dostrzegły już jego korzyści. Wśród nich są: Airbnb, Coursera, Github, Hasura, Prisma, Shopify, czy Twitter. Znajomość GraphQL może być przydatna w najbliższym czasie.
Źródła:
https://www.graphql-java.com/tutorials/getting-started-with-spring-boot/
https://bulldogjob.pl/news/645-jak-zaczac-z-graphql



