Definicja #
GraphQL to język zapytań dla API oraz środowisko wykonawcze do ich obsługi, opracowany przez Meta (Facebook) w 2012 roku i opublikowany jako open source w 2015 roku. Jest alternatywą dla architektur REST API.
Kluczowe koncepcje GraphQL:
- Jeden endpoint — zamiast wielu endpointów REST, GraphQL używa jednego punktu wejścia (zazwyczaj
/graphql) obsługującego wszystkie operacje - Klient definiuje dane — klient dokładnie określa jakich pól potrzebuje, serwer zwraca tylko te dane (koniec z over-fetching i under-fetching)
- Query — operacja odczytu danych, odpowiednik GET w REST
- Mutation — operacja modyfikacji danych, odpowiednik POST/PUT/DELETE w REST
- Subscription — subskrypcja na zdarzenia w czasie rzeczywistym przez WebSocket
- Schema — silnie typowany kontrakt API definiujący typy, pola i relacje (SDL — Schema Definition Language)
- Resolver — funkcja po stronie serwera zwracająca dane dla danego pola
Popularne implementacje serwera: Apollo Server, GraphQL Yoga, Hasura, Strawberry (Python), Hot Chocolate (.NET). Po stronie klienta: Apollo Client, urql, React Query z adapterem.
Zastosowania #
GraphQL stosuje się do:
- Aplikacji mobilnych — precyzyjne pobieranie tylko potrzebnych danych oszczędza transfer i baterię
- Systemów z wieloma klientami o różnych potrzebach danych — web, mobile, TV mogą pobierać różne pola z jednego API
- API aggregating multiple services — GraphQL Federation łączy wiele mikroserwisów w jedno API
- Aplikacji real-time — GraphQL Subscriptions dla live feeds, powiadomień, czatów
- CMS headless — Contentful, Strapi, Sanity oferują GraphQL API do pobierania treści
Ścieżka nauki #
Przed nauką GraphQL warto znać podstawy REST API, HTTP i co najmniej jeden język backendowy (Node.js, Python, Java, C#).
Zacznij od:
- Koncepcje: Schema, Query, Mutation, Subscription, Resolver
- SDL (Schema Definition Language) — definiowanie typów, relacji, enumów
- Apollo Server (Node.js) lub Strawberry (Python) — najprostszy start
- GraphQL Playground / Introspection — eksploracja API
Następnie poznaj:
- Apollo Client — zarządzanie stanem i cachowanie po stronie klienta React
- N+1 problem i DataLoader — optymalizacja zapytań do bazy danych
- GraphQL Federation — kompozycja wielu serwisów w jeden supergraph (Apollo)
- Persisted Queries i zabezpieczenia — limity głębokości, query complexity
FAQ #
- Kiedy używać GraphQL zamiast REST?
- GraphQL sprawdza się gdy masz wiele klientów z różnymi potrzebami danych, złożone hierarchie danych, potrzebę real-time (subscriptions) lub chcesz uniknąć over-fetching. REST jest prostszy dla prostych CRUD API, łatwiej cachowany przez HTTP i bardziej znany. Oba podejścia mają swoje miejsce.
- Czy GraphQL zastępuje REST?
- Nie zastępuje — to różne narzędzia. GraphQL rozwiązuje problemy over/under-fetching i wieloklientowości, ale REST jest prostszy, lepiej buforowany (HTTP cache) i bardziej powszechny. Wiele firm używa obu: REST dla zewnętrznego API, GraphQL wewnętrznie.
- Ile zarabia developer znający GraphQL?
- GraphQL jest zazwyczaj umiejętnością dodatkową do React/Node.js lub backendowego stacku. Senior fullstack developer z GraphQL zarabia w Polsce od 14 000 do 25 000 zł brutto. Sama znajomość GraphQL bez szerszego stacku nie jest wyróżnikiem.
- Czym jest GraphQL Federation?
- GraphQL Federation to architektura od Apollo pozwalająca na kompozycję wielu niezależnych GraphQL API (subgraphs) w jeden zunifikowany graf (supergraph). Każdy mikroserwis zarządza swoją częścią schematu, a gateway łączy je transparentnie dla klientów.