Czym jest GraphQL?
GraphQL to alternatywny sposób komunikacji z API, który jest doskonale dostosowany do złożonych struktur danych i budowania interfejsów na ich podstawie. W przeciwieństwie do traktowania danych jako oddzielnych, samodzielnych elementów, GraphQL pokazuje, jak elementy danych łączą się i odnoszą do siebie, co ułatwia zadawanie pytań i otrzymywanie informacji.
Pomyśl o GraphQL jako o języku zapytań, który pozwala Ci rozmawiać z API tak, jakbyś rozmawiał bezpośrednio z bazą danych. Użycie GraphQL pozwala Ci zbliżyć się do bazy danych tak bardzo, jak to możliwe, pozwalając na wybór i wybieranie, jakie dane chcesz i jak je otrzymać, co zapewnia ogromne korzyści wydajnościowe.
GraphQL został stworzony przez Facebooka w celu rozwiązania problemu skalowania z złożonymi strukturami danych. W wyniku ich udanej adopcji coraz więcej firm zaczęło dostrzegać korzyści płynące z używania GraphQL w swoich API.
Już znasz REST? GraphQL będzie wydawać się znajomy.
API GraphQL są łatwiejsze w obsłudze, niż możesz myśleć. Jeśli jesteś przyzwyczajony do pracy z API REST, oto jak podstawowe koncepcje z REST przekładają się na GraphQL.
Funkcja | REST | GraphQL |
---|---|---|
Punkt końcowy | Żądania są wysyłane do wielu punktów końcowych dla różnych działań | Wszystkie żądania są wysyłane do jednego punktu końcowego (np. /graphql) |
Pobieranie danych | Użyj GET metod na konkretnych punktach końcowych, aby pobrać dane | Użyj zapytania, aby zażądać dokładnie tych danych, które są potrzebne, zmniejszając nadmierne lub niedostateczne pobieranie |
Modyfikacja danych/działania | Użyj metod HTTP takich jak POST, PUT, PATCH lub DELETE, aby modyfikować lub przetwarzać dane. | Użyj mutacji, aby wykonać operacje (np. tworzenie stron, obliczanie kosztów dostawy) |
Format odpowiedzi | Stałe formaty odpowiedzi zwracają wszystkie zdefiniowane pola, niezależnie od tego, czy są potrzebne | Elastyczne odpowiedzi pozwalają określić dokładnie, które pola mają być uwzględnione, zmniejszając niepotrzebny transfer danych (jeśli ta elastyczność wydaje się skomplikowana, po prostu użyj gotowych przykładów zapytań w naszej dokumentacji dla doświadczenia podobnego do REST) |
Połączenie danych | Często wymagane są wiele żądań, aby pobrać powiązane dane | Zagnieżdżone zapytania umożliwiają pobieranie powiązanych danych w jednym żądaniu (np. szczegóły strony i przedmioty przesyłki razem). Użytkownicy mogą również budować przepływy pracy, aby zarządzać wieloma mutacjami w jednym żądaniu GraphQL, zmniejszając złożoność i poprawiając wydajność |
Zalety GraphQL
Szybsze odpowiedzi
GraphQL zapewnia szybsze odpowiedzi dzięki precyzyjnemu pobieraniu danych, użyciu jednego punktu końcowego oraz poprawionym możliwościom grupowania i buforowania.
Precyzyjne pobieranie danych
Powszechnym wyzwaniem w REST jest nadmierne lub niedostateczne pobieranie danych—czyli uzyskiwanie zbyt wielu niepotrzebnych informacji lub niewystarczającej ilości potrzebnych w jednym kroku. GraphQL eliminuje to, pozwalając na żądanie dokładnie tego, co jest potrzebne—nic więcej, nic mniej. Ta specyfika nie tylko poprawia wydajność, ale także upraszcza proces dla tych, którzy wchodzą w interakcję z API, czyniąc system bardziej wydajnym i przyjaznym dla użytkownika.
Przykłady, jak to jest przydatne:
- Umożliwia to programistom frontendowym pobieranie dokładnie tych danych, których potrzebują do swoich komponentów UI, zmniejszając liczbę podróży do serwera i poprawiając wydajność.
- Wyobraź sobie, że chcesz uzyskać klasyfikację kodu HS, kartonizację, wycenę przesyłki i landed cost na przedmioty w checkout. Jeśli jesteś zintegrowany za pomocą API GraphQL, możesz wykonać jedno wywołanie z niezbędnymi przepływami pracy, aby uzyskać wszystko, czego potrzebujesz (i niczego, czego nie potrzebujesz) w jednej odpowiedzi. W przeciwieństwie do tego, w przypadku API REST musiałbyś najpierw wywołać Classify REST API, następnie osobno wywołać Rating REST API, a na końcu wprowadzić tę klasyfikację i ocenę przesyłki do swojego trzeciego wywołania do Landed Cost REST API. Wszystkie te API REST zwróciłyby każdą informację, jaką mogą, zmuszając Cię do przeszukiwania odpowiedzi w poszukiwaniu potrzebnych danych. Ta oszczędność czasu ma znaczenie w szybkim zwracaniu pełnej landed cost, zanim kupujący odejdzie.
Jeden punkt końcowy
API GraphQL zazwyczaj mają jeden punkt końcowy, w przeciwieństwie do API REST, które często mają wiele punktów końcowych dla różnych zasobów i działań. Ułatwia to zarządzanie i zrozumienie API.
Grupowanie i buforowanie
Możliwość grupowania zapytań w GraphQL oraz wsparcie dla strategii buforowania prowadzą do znacznych popraw wydajności. Te funkcje zmniejszają obciążenie sieci i serwerów, co przekłada się na szybsze, bardziej niezawodne interakcje dla użytkowników.
Dobrze zdefiniowane schematy
API GraphQL opierają się na silnie typowanym schemacie. Ten schemat definiuje strukturę dostępnych danych oraz operacje, które można wykonać. To zapewnia jasność co do dostępnych danych i sposobu ich uzyskania, co może poprawić wydajność programistów i zmniejszyć błędy. Na przykład zespoły frontendowe mogą eksplorować graf, aby uzyskać dokładnie to, czego potrzebują, zamiast czekać na nowy punkt końcowy REST.
Możliwość poprawy bez łamania istniejących klientów
Dodawanie nowych funkcji lub modyfikowanie istniejących w GraphQL nie zakłóca bieżących integracji, dzięki elastycznej strukturze zapytań. Ta zdolność zapewnia, że ulepszenia mogą być wprowadzane bez łamania zgodności z istniejącymi klientami.
Aktualna dokumentacja
Dzięki funkcji introspekcji GraphQL dokumentacja jest automatycznie generowana i aktualizowana przy każdej zmianie. To zapewnia, że wszystkie informacje dostarczane programistom są aktualne, zmniejszając problemy z integracją i zgłoszenia wsparcia związane z nieaktualną dokumentacją—wyzwaniem powszechnie spotykanym w dokumentacji API REST.
Przejrzyj naszą dokumentację GraphQL oraz naszą dokumentację REST, aby zobaczyć różnicę.
Analogia
Wyobraź sobie, że jesteś w restauracji z menu, które pozwala zamawiać dania dokładnie tak, jak lubisz, w porównaniu do innej restauracji, w której możesz wybierać tylko z ustalonych posiłków. GraphQL jest jak pierwsza restauracja:
- Dostajesz dokładnie to, czego chcesz: Dzięki GraphQL możesz poprosić o dokładnie te dane, których potrzebujesz, ani więcej, ani mniej. Wyobraź sobie, że chcesz tylko nazwę i cenę dania, a nie całą listę składników. W przypadku REST API musisz otrzymać wszystkie szczegóły dania i zignorować te części, których nie potrzebujesz.
- Składaj niestandardowe danie: Nasze API GraphQL można łatwo łączyć, aby tworzyć bardziej niestandardowe rozwiązania, podobnie jak w restauracji w stylu bufetu, gdzie możesz stworzyć unikalne danie dokładnie tak, jak potrzebujesz, używając składników, które już mają. W przeciwieństwie do tego, REST API jest jak piekarnia z gotowymi produktami zapakowanymi w koszyki—możesz zamówić tylko to, co już zostało stworzone i nie możesz wybrać, aby zabrać do domu tylko ten kawałek, który chcesz.
- Mniej czekania: Ponieważ możesz uzyskać wszystkie potrzebne informacje w jednym żądaniu, to tak, jakbyś poprosił swojego kelnera, aby przyniósł przystawkę, danie główne i deser jednocześnie, zamiast czekać między daniami. Większość REST API wymaga, abyś wysyłał wiele żądań, aby uzyskać różne informacje.
- Łatwe zmiany zamówień: Jeśli potrzeby danych w Twojej aplikacji się zmieniają, GraphQL ułatwia dostosowanie. Po prostu zmieniasz zapytanie na to, czego potrzebujesz. W przypadku REST możesz musieć czekać, aż kuchnia (backend) stworzy nowe danie (endpoint) dla menu, co zajmuje więcej czasu.
GraphQL oferuje większą elastyczność, wydajność i prostotę w pozyskiwaniu danych niż REST API, szczególnie gdy Twoje potrzeby się zmieniają lub rosną.
Jak Zonos wykorzystuje GraphQL
Podczas modernizacji naszej platformy w ciągu ostatnich kilku lat, Zonos podjęło decyzję o budowie nowej funkcjonalności z wykorzystaniem GraphQL dla naszego API zamiast REST. Zdecydowaliśmy się na to, ponieważ nasze dane są złożone i powiązane, podobnie jak dane, które skłoniły Facebooka do stworzenia GraphQL. Ta złożoność sprawia, że budowanie skalowalnych REST API jest wyzwaniem, ponieważ sposoby, w jakie deweloperzy muszą pozyskiwać i wykorzystywać dane, różnią się dramatycznie między implementacjami, a REST nie jest elastyczne.
GraphQL skutecznie rozwiązuje ten problem, pozwalając deweloperom implementującym nasze API wybierać dokładnie te dane, które chcą i w jaki sposób je uzyskują. Pozwala to na dopasowanie do ich przepływów pracy bez potrzeby, aby Zonos musiało wykonywać niestandardowe prace (podczas gdy czekają) w każdej sytuacji.
Połączenie użycia GraphQL i modernizacji naszej platformy sprawiło, że nasze API stało się bardziej wydajne, integracja Zonos z Twoimi systemami stała się szybsza, a Zonos mogło dostarczać nowe funkcje szybciej.
Lepsze funkcje
Zonos nieustannie rozwija nowe funkcje, a GraphQL jest pierwszym (i zazwyczaj jedynym), który otrzymuje te aktualizacje. W przeciwieństwie do tego, nasze REST API są uważane za zakończone i nie mogą uzyskać dostępu do wielu naszych nowych funkcji.
Przykłady funkcji ograniczonych do GraphQL:
- Inclusive pricing
- API etykiet
- Nowe Checkout i Hello
- Rozmiary pudełek w odpowiedzi API
- Raportowanie w panelu
- Możliwość zażądania wyceny DDP, jeśli to możliwe, ale nadal zwrócenie wyceny DDU, jeśli DDP nie jest dostępne dla tego kraju z tym poziomem usługi
- Szczegółowe zestawienie opłat, podatków i opłat (informacje na poziomie przedmiotu, konkretne opłaty)—Panel jest zasilany przez GraphQL i pokazuje te dane dla wszystkich sklepów, ale odpowiedź REST API nie zawiera tego poziomu szczegółowości
- Tryb testowy (wkrótce)
Dlaczego GraphQL
Odkryj, dlaczego zalecamy integrację za pomocą GraphQL zamiast REST.
W Zonos oferujemy dwa główne typy API do integracji: GraphQL i REST. Chociaż API REST istnieją dłużej i mogą być bardziej znane wielu osobom, przeszliśmy na GraphQL, aby umożliwić większą elastyczność i szybszą innowację. Chociaż oba są nadal wspierane, ten przewodnik wyjaśnia, dlaczego GraphQL jest nie tylko przyszłością naszych integracji, ale także przyszłością integracji w ogóle i potężniejszym narzędziem do zaspokajania Twoich potrzeb dzisiaj.