GraphQL z Drupal 8 : Przewodnik po wszystkich sprawach (z przykładami!)

Opublikowany: 2019-12-17

GraphQL komunikuje się z Drupalem przez HTTP, a wyniki są bardziej ustrukturyzowane niż kiedykolwiek wcześniej!

W dzisiejszych czasach wspaniałe wrażenia klientów zaczynają się od świetnej treści. Treści udostępniane wszędzie. Dzięki inicjatywie API-first Drupala 8, zawartość zarządzana przez Drupala może być łatwo wykorzystywana przez inne systemy przez HTTP. REST (Representational State Transfer) zapewnia standard projektowania interfejsów API. Jednak w miarę jak aplikacje klienckie stają się coraz bardziej złożone i wymagające, programiści potrzebują bardziej nowoczesnego i efektywnego rozwiązania.

GraphQL z drupal8



GraphQL narodził się z zapotrzebowania na bardziej elastyczną i wydajną interakcję klient-serwer. Jest to wyrafinowany język zapytań i maszyna wykonawcza. W 2012 roku Facebook stworzył dla niego specyfikację, która opisuje jego możliwości oraz wymagania modeli danych dla aplikacji headless.

Co to jest GraphQL?

GraphQL jest adaptacyjnym standardem dla interfejsów API i zapewnia środowisko wykonawcze do realizacji tych zapytań. GraphQL podaje pełne i rozsądne szczegóły informacji w Twoim API. Jest rozwijany zgodnie z ideologią „Zapytaj o to, czego potrzebujesz i zdobądź dokładnie to”. Umożliwia klientowi pobranie dokładnej odpowiedzi z interfejsu API, nic więcej - nic mniej.

Zalety GraphQL

Kilka z wielu zalet korzystania z GraphQL dla Drupala -

  1. Szybszy rozwój frontendu

    Szybko kładź nacisk na aplikacje, nie czekając na nowe punkty końcowe zaplecza. Usprawnij pobieranie danych i obsługę kodu, uzyskując dane w wymaganym kształcie.
  2. Zapytaj o to, czego potrzebujesz i zdobądź dokładnie to

    Zapewnia dokładną odpowiedź, o którą poprosił klient. Zawsze zwraca przewidywalny wynik. Aplikacje korzystające z GraphQL są również stabilne, ponieważ aplikacja kontroluje otrzymywane dane, a nie serwer.
  3. Użyj swoich istniejących danych

    GraphQL może być używany z dowolną istniejącą infrastrukturą, np. REST, SOAP lub istniejącą bazą danych lub cokolwiek innego. Umożliwia zapytanie o wszystkie dane w jednym żądaniu i zapewnia oczyszczoną, przewidywalną odpowiedź.
  4. Mniej bajtów i podróży w obie strony

    Używając GraphQL wszystkie wymagane dane można pobrać za pomocą pojedynczego zapytania. To sprawia, że
    aplikacja szybciej.
drupal-graphql

GraphQL z Drupalem 8

REST vs JSON:API vs GraphQL

Jeśli porównamy te trzy pod kątem wydajności żądania, JSON:API i GraphQL są doskonałe. Ponieważ w jednym żądaniu JSON:API i GraphQl mogą obsłużyć wszystkie wymagane odpowiedzi. W przypadku JSON:API czasami musimy dostosować odpowiedź, ale jeśli chodzi o GraphQL, służy on tylko do tego, czego potrzebujemy. REST jest wolniejszy w porównaniu do tych, ponieważ do zaspokojenia wspólnych potrzeb potrzebnych jest wiele żądań.

Pod względem prostoty obsługi i implementacji REST jest najłatwiejszy, istnieje już od dłuższego czasu. JSON:API działa również po wyjęciu z pudełka z CDN i odwrotnymi proxy. Dla GraphQL potrzebna jest dodatkowa infrastruktura, a do jej wdrożenia potrzebne są biblioteki klienckie.

Łatwiej jest korzystać z pamięci podręcznej sieci w REST i JSON:API w porównaniu z GraphQL. W GraphQL jest tylko jeden punkt końcowy (w większości przypadków punkt końcowy HTTP POST), do którego wysyłane są wszystkie zapytania. Ponieważ każde zapytanie może być inne, korzystanie z tego typu buforowania jest trudniejsze.

Specyfikacja GraphQL Drupal obsługuje operacje zbiorcze/wsadowe automatycznie dla już zaimplementowanych mutacji, podczas gdy specyfikacja JSON:API nie. Możliwość wykonywania operacji zapisu wsadowego może być ważna.

Instalacja GraphQL dla Drupala 8

Moduł Drupal GraphQL obsługuje wszystkie specyfikacje GraphQL i może być używany do budowania i eksponowania schematów GraphQL. Najnowsza wersja alfa modułu Drupal 8 w wersji 8.x-4 oferuje modułom Drupal możliwość rozszerzenia schematu za pomocą wtyczki.

Tutaj możesz zainstalować moduł Drupal GraphQL z - https://www.drupal.org/project/graphql
Możesz zainstalować za pomocą polecenia kompozytora.

 kompozytor wymaga 'drupal/graphql:^3.0'

Dostarczy Ci dwa moduły GraphQL Core i GraphQL . Musisz włączyć oba moduły. Możesz to włączyć za pomocą drush np.

 drush pl graphql
drush pl graphql_core

Zapytania z Drupal GraphQL

Moduł Drupal GraphQL udostępnia narzędzie o nazwie GraphiQL . Jest to potężne narzędzie i ma interaktywny interfejs użytkownika z funkcjami takimi jak automatyczne uzupełnianie. Za pomocą tego narzędzia możesz uruchamiać zapytania i uzyskiwać wyniki. Przejdź do – „ /graphql/explorer ” dla interfejsu.

Otrzymasz interfejs, który wygląda tak –

GrafQL-UI

Interfejs użytkownika GraphiQL

W lewym panelu tego interfejsu użytkownika możesz napisać zapytanie, a po prawej stronie zobaczysz wyniki jako dane wyjściowe w formacie JSON. Kliknięcie Dokumentów w prawym górnym rogu spowoduje wyświetlenie dokumentacji dostępnych zapytań. Sekcja Zmienna zapytania w lewym dolnym panelu może służyć do przekazywania zmiennych zapytania.

Przykłady

1. Odpytywanie węzłów

Query-węzły-graphql

Drupal GraphQL - Odpytywanie węzłów

2. Odpytywanie taksonomii

GraphQL w Drupalu — odpytywanie taksonomii

GraphQL w Drupalu — odpytywanie taksonomii


3. Zapytanie o trasy

Drupal GraphQL - Trasy zapytań

Drupal GraphQL - Trasy zapytań

4. Fragmenty zapytań

Drupal GraphQL - Fragmenty zapytań

Drupal GraphQL - Fragmenty zapytań

5.Filtry

Drupal GraphQL - Filtry

Drupal GraphQL - Filtry

6. Filtry ze spójnikiem

Drupal GraphQL - Filtry z koniunkcją

Drupal GraphQL - Filtry z koniunkcją

Inni dostępni operatorzy to:

  • RÓWNY
  • NIE RÓWNE
  • MNIEJSZY NIŻ
  • SMALLER_THAN_OR_EQUAL
  • LEPSZY NIŻ
  • WIĘKSZY BĄDŹ RÓWNY
  • W
  • NIE W
  • LUBIĆ
  • NIE JAK
  • POMIĘDZY
  • NIE POMIĘDZY
  • IS_NULL
  • IS_NOT_NULL

Spójniki mogą mieć dwie wartości

  • ORAZ
  • LUB

Grup dyskusyjnych można również używać do pisania bardziej złożonych zapytań.

7. Zmienne GraphQL

GraphQL na Drupalu - Zmienne

GraphQL na Drupalu - Zmienne

Mutacje

W GraphQL mutacja jest terminologią używaną za każdym razem, gdy chcesz dodać, zmodyfikować lub usunąć dane przechowywane na serwerze. W tym przypadku Drupal. Niestety, moduł nie zawiera sposobu na wykonanie powszechnych mutacji prosto z pudełka ze względu na pewne wymagania techniczne GraphQL.
Przykładowy kod do tworzenia, usuwania, aktualizacji i przesyłania plików można znaleźć tutaj: https://github.com/drupal-graphql/graphql-examples

Przykładowa mutacja:

Drupal GraphQL - Przykład mutacji

Drupal GraphQL - Przykład mutacji

Drupal GraphQL z Twig

Korzystanie z Drupal GraphQL z Twigiem może znacznie poprawić wydajność Twojej witryny. Oto jak – po wstrzyknięciu danych do szablonu Twig możesz pobrać wszystkie wymagane dane za pomocą jednego wywołania API. Co więcej, ponieważ to klient kontroluje otrzymywane dane, a nie serwer, sprawia to, że proces jest jeszcze szybszy.

Aby używać Drupal GraphQL z Twigiem, potrzebujemy modułu GraphQL Twig. Aby go pobrać i włączyć, użyj następujących poleceń:

 kompozytor wymaga 'drupal/graphql_twig:^1.0'
drush pl graphql_twig

A potem możesz użyć zapytania GraphQL w swojej witrynie, np.

 {#graphql
zapytanie {
  admin:userById(id: "1") {
    uid
    Nazwa
  }
  użytkownik:bieżącyKontekstUżytkownika {
    uid
  }
}
#}

Otrzymasz dane odpowiedzi w zmiennej GraphQL.