0Pricing
React Academy · Lekcja

Podstawy GraphQL dla programistów Reacta

Poznać queries, mutacje, subskrypcje i schematy GraphQL z perspektywy programisty frontendu

Podstawy GraphQL dla programistów Reacta to bezpłatna lekcja React Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.

GraphQL a REST

REST udostępnia endpointy o stałej strukturze: GET /users/:id zwraca cały obiekt użytkownika niezależnie od tego, jakich danych potrzebuje klient. GraphQL pozwala klientom dokładnie określić, które pola chcą otrzymać, eliminując nadmiarowe pobieranie danych (over-fetching) i niedostateczne pobieranie danych (under-fetching), które wymaga wielu żądań.

Jedno zapytanie GraphQL może pobrać użytkownika, jego posty oraz autora każdego posta w ramach jednego żądania.

Schemat GraphQL

Każdy interfejs API GraphQL jest definiowany za pomocą schematu zapisanego w Schema Definition Language (SDL). Schemat deklaruje typy, ich pola oraz główne typy Query, Mutation i Subscription, na których klienci mogą wykonywać operacje.

Schemat jest kontraktem między klientem a serwerem. Zespoły frontendowe i backendowe mogą pracować równolegle po uzgodnieniu schematu.

Pisanie zapytania GraphQL

Zapytanie GraphQL wybiera pola: { user(id: "1") { name email posts { title } } }. Zagnieżdżone pola pozwalają przechodzić przez relacje w ramach jednego żądania. Aliasy zmieniają nazwy pól: { me: user(id: "1") { name } }. Fragmenty pozwalają ponownie wykorzystywać wybór pól w wielu zapytaniach.

Zmienne sprawiają, że zapytania można ponownie wykorzystywać: query GetUser($id: ID!) { user(id: $id) { name } } z variables: { id: "1" }.

Resolvery na serwerze

Każde pole w schemacie GraphQL ma po stronie serwera funkcję resolvera. Gdy klient pyta o user.name, resolver użytkownika pobiera obiekt użytkownika, a resolver pola name (lub resolver domyślny) zwraca pole name.

Rozwiązywanie na poziomie pól umożliwia GraphQL precyzyjne pobieranie wyłącznie żądanych danych.

Problem N+1

Jeśli zapytanie pobiera listę 100 postów, a każdy post zawiera swojego autora, naiwna implementacja wykonuje 100 osobnych zapytań do bazy danych w celu pobrania autorów. Bez optymalizacji ten problem N+1 spowalnia interfejsy API GraphQL.

DataLoader rozwiązuje problem N+1, grupując wszystkie wyszukiwania autorów w jedno zapytanie do bazy danych za pomocą pamięci podręcznej dla pojedynczego żądania i funkcji grupującej.

GraphQL Playground i Apollo Studio

Apollo Studio i GraphQL Playground to interfejsy użytkownika dostępne w przeglądarce, służące do interaktywnego eksplorowania interfejsu API GraphQL. Automatycznie uzupełniają pola na podstawie schematu, wyświetlają wyniki zapytań i pokazują dokumentację typów bezpośrednio w interfejsie.

Korzystanie z tego narzędzia to najszybszy sposób na zrozumienie nieznanego interfejsu API GraphQL przed napisaniem kodu klienta.

Introspekcja typów

Interfejsy API GraphQL udostępniają własny schemat za pomocą zapytania introspekcyjnego: { __schema { types { name } } }. Klienci mogą odpytywać sam schemat, aby odkrywać dostępne typy, pola i argumenty.

Narzędzia do generowania kodu, takie jak graphql-codegen, używają introspekcji do automatycznego generowania typów TypeScript zgodnych ze schematem API.

Mutacje i subskrypcje

Mutacje GraphQL modyfikują dane: mutation CreatePost($input: PostInput!) { createPost(input: $input) { id title } }. Subskrypcje ustanawiają trwałe połączenie (zwykle WebSocket) i przesyłają aktualizacje: subscription { postAdded { id title } }.

Wszystkie trzy typy główne (Query, Mutation, Subscription) używają tej samej składni wyboru pól.

Kiedy GraphQL sprawdza się lepiej niż REST

GraphQL sprawdza się doskonale w aplikacjach złożonymi, zagnieżdżonymi wymaganiami dotyczącymi danych, z wieloma typami klientów (mobilnymi, internetowymi i telewizyjnymi) potrzebującymi różnych podzbiorów pól lub z szybko rozwijającymi się interfejsami API, w których preferowane jest wycofywanie pól zamiast wersjonowania endpointów.

REST jest prostszy w przypadku interfejsów API CRUD z przewidywalnymi, płaskimi strukturami zasobów oraz doskonale współpracuje z pamięcią podręczną HTTP dzięki ETagom i nagłówkom cache.

Klienci GraphQL: Apollo, URQL, React Query

Apollo Client to najbardziej rozbudowany funkcjonalnie klient GraphQL: oferuje znormalizowany cache, zarządzanie stanem lokalnym, subskrypcje i linki obsługi błędów. URQL jest lżejszy, korzysta z cache dokumentów i ma prostsze API. React Query z graphql-request to najprostsze podejście do podstawowych zapytań i mutacji, bez zaawansowanych funkcji cachowania.

Wybór zależy od wymagań dotyczących cachowania: znormalizowany cache sprawdzi się w przypadku encji współdzielonych między zapytaniami (Apollo), a prostszy cache dokumentów w przypadku niezależnych zapytań (URQL lub React Query).

Przykład SDL

Prosty SDL: type User { id: ID! name: String! posts: [Post!]! } type Post { id: ID! title: String! author: User! } type Query { user(id: ID!): User users: [User!]! }. Wykrzykniki oznaczają pola, które nie mogą mieć wartości null.

Ten schemat dokładnie informuje klienta, jakie pola istnieją w każdym typie i jakie zapytania są dostępne, umożliwiając generowanie kodu z bezpiecznym typowaniem.

Nadmierne i niedostateczne pobieranie danych w GraphQL

Co oznacza "over-fetching" w kontekście REST i GraphQL?

Podsumowanie lekcji

GraphQL pozwala klientom żądać dokładnie tych pól, których potrzebują (bez nadmiernego ani niedostatecznego pobierania danych), za pomocą języka zapytań zdefiniowanego przez schemat. Resolverzy odpowiadają za poszczególne pola, a DataLoader rozwiązuje problem N+1. Introspekcja umożliwia generowanie typów TypeScript. Apollo Client, URQL i React Query to główni klienci GraphQL zgodni z React.

GraphQL należy wybrać w przypadku złożonych, zagnieżdżonych danych wymaganych przez wielu klientów, a REST w przypadku prostych operacji CRUD z przewidywalnymi strukturami.

Często zadawane pytania

Czy lekcja „Podstawy GraphQL dla programistów Reacta” jest bezpłatna?

Tak — pełny tekst „Podstawy GraphQL dla programistów Reacta” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Podstawy GraphQL dla programistów Reacta”?

Poznać queries, mutacje, subskrypcje i schematy GraphQL z perspektywy programisty frontendu Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć React Academy?

Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Podstawy GraphQL dla programistów Reacta”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?

Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy GraphQL dla programistów Reacta
  2. Konfiguracja Apollo Client w React
  3. Hooki useQuery i useMutation
  4. Cache Apollo: normalizacja i aktualizacje
← Powrót do React Academy