GraphQL vs REST: czym naprawdę się różnią

GraphQL vs REST

GraphQL vs REST: te same dane pobrane na dwa sposoby | We.Inc

Porównaj GraphQL i REST na tych samych danych pobranych na dwa sposoby: liczba żądań, over-fetching, cache, sposób zwracania błędów i tabela pomagająca wybrać jedno z nich.

REST udostępnia wiele adresów URL, po jednym na zasób, a serwer decyduje, co zawiera każda odpowiedź. GraphQL udostępnia jeden endpoint, zwykle /graphql, do którego klient wysyła zapytanie wymieniające dokładnie te pola, których potrzebuje. REST dostaje darmowy cache HTTP według URL; GraphQL oszczędza kolejne żądania i pomija nieużywane pola kosztem większej pracy serwera.

W skrócie

Porównanie poniżej pobiera ten sam ekran danych na oba sposoby. Wybierz scenariusz, aby zobaczyć wywołania REST, które wykonałby klient, obok jednego zapytania GraphQL, które je zastępuje, oraz to, co każda odpowiedź pomija lub dodaje.

Najczęściej zadawane pytania

Czy GraphQL jest szybszy niż REST?

Sam z siebie nie. Może ograniczyć liczbę żądań i rozmiar danych dla ekranów potrzebujących powiązanych danych, ale rozwiązanie każdego zapytania może kosztować serwer więcej. Dobrze zaprojektowany endpoint REST dla jednego ekranu może być równie szybki.

Dlaczego błąd GraphQL wraca ze statusem 200?

Jedno pole może się nie powieść, a inne tak, więc serwer zwraca posiadane dane oraz tablicę errors. Wytyczne GraphQL over HTTP używają 2xx dla częściowego sukcesu; serwery odpowiadające z application/graphql-response+json używają 400, gdy żądanie nie przejdzie walidacji.

Czy CDN może cache'ować odpowiedzi GraphQL?

Tak, jeśli zapytania są wysyłane metodą GET, na co serwery mogą pozwalać tylko dla zapytań. Długie zapytania mogą przekraczać limity URL, więc zespoły używają persisted queries, które wysyłają krótki hash zamiast całego dokumentu.

Czy mogę używać obu w jednym produkcie?

Wiele zespołów tak robi. Przesyłanie plików, webhooki i proste publiczne zasoby często zostają jako trasy REST, a ekrany aplikacji czytają dane przez warstwę GraphQL, która pod spodem może wywoływać te same usługi.

Czy GraphQL potrzebuje własnej bazy danych?

Nie. Serwer GraphQL to warstwa resolverów, małych funkcji, które pobierają każde pole stamtąd, gdzie znajdują się dane: z bazy danych, usługi REST lub pliku. Schemat opisuje kształty, nie sposób przechowywania.

Over-fetching i under-fetching

Cache działa inaczej

Błędy i kody statusu

Który wybrać

Tabela decyzyjna

Co przesyła się przez sieć

Żądanie GraphQL przez fetch

Każda operacja to POST z JSON-em zawierającym klucze query i variables, wysłany do jednego endpointu. Nagłówek Accept prosi o nowszy typ odpowiedzi GraphQL, a zwykły JSON jest rozwiązaniem zapasowym.

Częściowa odpowiedź GraphQL

Jedno pole się nie powiodło, więc ma wartość null, a wpis w errors wskazuje je przez path. Reszta danych i tak dotarła.

Profil z wpisami

REST potrzebuje drugiego wywołania dla wpisów, a obie odpowiedzi zawierają każde pole, które dołącza serwer. Zapytanie GraphQL zwraca tylko imię, awatar i tytuły trzech wpisów.

Tylko imiona

Dla prostej listy wywołanie REST to w obu przypadkach jedno żądanie, ale wysyła całe rekordy użytkowników. GraphQL wysyła tylko dwa żądane pola.

Wpis z komentarzami i autorami

Bez dedykowanego endpointu REST przechodzi drzewo o jeden poziom na żądanie, a pobranie autora każdego komentarza może oznaczać jedno dodatkowe wywołanie na komentarz. GraphQL zagnieżdża całe drzewo w jednym zapytaniu.

Utwórz wpis

Zapisy wyglądają podobnie: po jednym żądaniu. REST używa metody POST na URL kolekcji; GraphQL wysyła mutację, nadal jako HTTP POST, i wybiera, które pola nowego wpisu zwrócić.

Te same dane na dwa sposoby

Wybierz scenariusz

Żądania REST

Zapytanie GraphQL

Kopiuj żądania REST

Kopiuj zapytanie GraphQL

REST: liczba żądań {n}. GraphQL: liczba żądań {v}.

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony