Written by 11:37 Dobre praktyki

GraphQL konkurencją dla RESTa?

Stworzony przez Facebooka GraphalQL staje się coraz popularniejszy. Jak działa i czy stanie się kon…

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:  

  1. Odpowiedź otrzymamy w JSON.
  2. Dostaniemy dokładnie tyle informacji o ile prosiliśmy.
  3. 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

Tagi: , Last modified: 7 stycznia 2022
Close

PRAKTYCZNE WSKAZÓWKI Z PROGRAMOWANIA W JAVIE W PIGUŁCE

Dołącz do 1000+ programistów Java, czytających praktyczne maile o dobrych praktykach programowania, architekturze mikroserwisowej i gorących newsach (1 raz w tygodniu)

Praktyczna Java

Swój Pakiet Powitalny Wypchany Mięsem Dostaniesz Już Za 15 Minut.

Uzupełnienie powyższego pola stanowi zgodę na otrzymywanie od Kamila Michno newslettera zawierającego treści informacyjnych, marketingowych dotyczących portalu praktycznajava.pl. Zgodę można wycofać w każdym czasie. Wycofanie zgody nie ma wpływu na zgodność z prawem przetwarzania dokonanego przed jej wycofaniem.