Gato GraphQL vs WPGraphQL
Porównanie Gato GraphQL i WPGraphQL


Jeśli potrzebujesz jedynie zbudować headless'ową witrynę WordPress i wdrożyć ją jako statyczną, i obecnie używasz WPGraphQL, przejście na Gato GraphQL nie zrobi żadnej różnicy.
W przeciwnym razie przejście na Gato GraphQL zapewnia wiele korzyści. Poniżej przedstawiono zalety oferowane przez Gato GraphQL + wszystkie rozszerzenia, których WPGraphQL nie oferuje.
Tabela podsumowująca
| Funkcja | Gato GraphQL | WPGraphQL |
|---|---|---|
| Problem N+1 | Nie stanowi problemu dzięki projektowi architekturalnemu | Może stanowić problem, jeśli nie zostanie obsłużony; deweloper musi być tego świadomy |
| Bezpieczeństwo: wyłączanie endpointu | Możliwość całkowitego wyłączenia pojedynczego endpointu za pomocą persisted queries (PRO) | Niedostępne |
| Kontrola dostępu | Walidacja pole po polu, z rolami/uprawnieniami/IP, przez interfejs użytkownika (PRO) | Nie na poziomie pola, mniej szczegółowe |
| Kontrola cache | max-age obliczany automatycznie dla queries (PRO) | Brak automatycznej kontroli cache |
| Niestandardowe endpointy | Wiele endpointów, chronionych hasłem/konfigurowalnych; obsługiwana hierarchia endpointów (PRO) | Pojedynczy endpoint, ograniczona personalizacja |
| Aktualizacje zbiorcze i wyszukiwanie/zamiana | Zbiorowe usuwanie, tagowanie, zastępowanie (z regex), przez GraphQL (PRO) | Niedostępne |
| Niestandardowe/eksperymentalne funkcje GraphQL | Zagnieżdżone mutacje, schema namespacing, oneOf input object | Głównie standardowa specyfikacja GraphQL |
| Multiple Query Execution (kompozycyjność) | Wiele queries w jednym dokumencie, współdzielenie stanu za pomocą @export | Queries w trybie batch (wiele na żądanie), ale bez możliwości współdzielenia stanu |
| Wewnętrzne/prywatne endpointy | Prywatny endpoint wyłącznie dla backendu/PHP, niewidoczny dla użytkowników (PRO) | Niedostępne |
| Zaawansowana mutacja danych | Pobieranie, modyfikacja i utrwalanie danych w jednym dokumencie (PRO) | Nieobsługiwane |
| Synchronizacja i dystrybucja treści | Import/eksport przez GraphQL, RSS, CSV, REST API (PRO) | Niedostępne |
| Integracja z usługami webowymi | Wychodzące/przychodzące wywołania API i webhooki (PRO) | Nieobsługiwane |
| Automatyzacja (hooki/przepływy pracy) | GraphQL jako automatyzacja przepływów pracy (PRO/edytor UI) | Niedostępne |
| Łatwość użycia (integracja UI) | Rozbudowane funkcje interfejsu do budowania/zarządzania queries GraphQL | Bardziej podstawowy interfejs administracyjny |
| Batching/kompozycyjność | Kompozycja pól/dyrektyw, wielokrotnie używana logika resolverów (PRO) | Nieobsługiwane |
| Multiple Query Execution | Obsługiwane, ze współdzielonym stanem i zależnościami | Obsługiwane, bez współdzielenia stanu |
| Standardowe użycie headless/statyczne | Oba są równie skuteczne | Oba są równie skuteczne |
Legenda:
- (PRO): Oznacza, że funkcja wymaga płatnej/pro wersji lub rozszerzeń Gato GraphQL.
Podsumowanie kluczowych punktów:
- Gato GraphQL oferuje znaczące dodatkowe funkcje dla zaawansowanego rozwoju, automatyzacji i bezpieczeństwa
- Oba wtyczki są równoważne dla podstawowych instalacji WordPress statycznych/headless
- Zaawansowane funkcje Gato GraphQL skupiają się na:
- Szczegółowej kontroli
- Automatyzacji przepływów pracy
- Zaawansowanych integracjach
- Nowoczesnych eksperymentalnych funkcjach GraphQL
Łatwość tworzenia
Deweloperzy nie muszą martwić się o problem queries "n+1": ze względu na projekt architekturalny serwera GraphQL, po prostu to nie występuje.
Bezpieczeństwo
Używając persisted queries do udostępniania predefiniowanych danych, możesz całkowicie wyłączyć pojedynczy endpoint GraphQL, tak aby nie był dostępny nawet dla uwierzytelnionych użytkowników.

Kontrola dostępu
Możesz walidować, że tylko zalogowani użytkownicy, lub użytkownicy z określoną rolą lub uprawnieniem, lub odwiedzający z określonego zakresu IP, mogą uzyskać dostęp do danych, pole po polu (PRO).

Kontrola cache
Podczas buforowania odpowiedzi GraphQL przy użyciu standardowego buforowania HTTP, nagłówek max-age jest obliczany automatycznie na podstawie wszystkich pól obecnych w query GraphQL (PRO).

Personalizacja i zarządzanie endpointami
Możesz udostępniać wiele niestandardowych endpointów, z których każdy jest dostosowany do konkretnego klienta lub aplikacji, chroniąc je hasłem.
Możesz też dodawać niestandardowe kategorie do endpointów oraz nadawać im hierarchię (np. /graphql/customers/some-customer i /graphql/customers/another-customer).

Aktualizacje zbiorcze
Możesz wykonywać zbiorcze aktualizacje. Na przykład możesz usunąć wszystkie komentarze na stronie lub przypisać tag lub kategorię do wszystkich swoich postów.
Możesz też wyszukiwać i zastępować ciąg znaków w setkach postów, na przykład aby zastąpić starą domenę nową, a nawet używając wyrażeń regularnych (PRO).
Niestandardowe funkcje GraphQL
Uzyskasz dostęp do nowych funkcji GraphQL, proponowanych do specyfikacji, ale jeszcze nie wydanych, w tym zagnieżdżonych mutacji, schema namespacing i 'oneOf' Input Object.

Multiple Query Execution
WPGraphQL umożliwia wykonywanie queries w trybie batch, gdzie wiele queries GraphQL jest rozwiązywanych w ramach jednego żądania HTTP.
Gato GraphQL oferuje Multiple Query Execution, gdzie pojedynczy dokument GraphQL może wykonywać wiele operacji.
Multiple Query Execution to ulepszenie w stosunku do query batching, ponieważ operacje mogą współdzielić stan ze sobą za pomocą dyrektywy @export.
Na przykład, aby zduplikować post, mamy operację query pobierającą dane posta i przekazującą te dane do operacji mutation, która tworzy nowy post na ich podstawie:
query GetPostAndExportData($postId: ID!)
{
post(by: { id: $postId }, status: any) {
author {
id @export(as: "authorID")
}
categories {
id @export(as: "categoryIDs", type: LIST)
}
rawContent @export(as: "rawContent")
rawExcerpt @export(as: "excerpt")
featuredImage {
id @export(as: "featuredImageID")
}
tags {
id @export(as: "tagIDs", type: LIST)
}
rawTitle @export(as: "title")
}
}
mutation DuplicatePost
@depends(on: "GetPostAndExportData")
{
createPost(input: {
status: draft,
authorBy: {
id: $authorID
},
categoriesBy: {
ids: $categoryIDs
},
contentAs: {
html: $rawContent
},
excerpt: $excerpt
featuredImageBy: {
id: $featuredImageID
},
tagsBy: {
ids: $tagIDs
},
title: $title
}) {
postID
}
}Kompozycyjność
Będziesz mieć możliwość komponowania pól, gdzie wartość pola może być przekazana jako wejście do innego pola w tej samej query, pozwalając fundamentalnemu zestawowi resolverów pól obsługiwać nieograniczoną liczbę przypadków użycia (PRO).
Na przykład, zamiast tworzyć pole Post.hasExcerpt, możemy zastosować pole _notEmpty na Post.excerpt, aby uzyskać tę samą wartość:
query {
post(by: { id: 1 }) {
excerpt
hasExcerpt: _notEmpty(value: $__excerpt)
}
}Podobnie możesz komponować dyrektywy, tak aby dyrektywa mogła być stosowana do wewnętrznej właściwości wartości pola.
Na przykład następująca query tłumaczy nazwy kategorii posta na inny język:
query {
post(by: { id: 1 }) {
title
categoryNames
frenchCategoryNames: categoryNames
@underEachArrayItem
@strTranslate(
from: "en",
to: "fr"
)
}
}Dostępność serwera GraphQL
Możesz udostępniać prywatne endpointy do zasilania bloków Gutenberg. Możesz też uzyskać dostęp do prywatnego serwera GraphQL, aby pobierać dane dla swojej aplikacji przy użyciu kodu PHP, bez ujawniania żadnego publicznego endpointu (PRO).
Wszechstronność w mutacji danych
Możesz używać GraphQL do pobierania, modyfikowania i ponownego zapisywania treści na swojej stronie — wszystko w ramach jednego dokumentu GraphQL (PRO).
Na przykład możesz pobrać wszystkie bloki Gutenberg w poście, wyodrębnić ich właściwości, przetłumaczyć te ciągi znaków przez API Google Translate, wstawić te ciągi z powrotem do bloku i ponownie zapisać post.
Synchronizacja i dystrybucja treści
Możesz używać GraphQL do importowania postów z innej witryny WordPress, z kanału RSS, z pliku CSV lub z dowolnego REST lub GraphQL API (PRO).
Możesz eksportować treści do innej witryny WordPress i przechowywać je jako JSON i CSV (PRO).
Interakcja z usługami webowymi
Możesz wywoływać API dowolnej zewnętrznej usługi za pomocą klienta HTTP (PRO). Na przykład możesz zapisać użytkowników WordPress na swojej liście mailowej Mailchimp.
Możesz też odbierać i przetwarzać przychodzące dane z dowolnej usługi za pomocą dedykowanego webhooka (PRO). Na przykład możesz przechwytywać adresy e-mail newslettera zarejestrowane w piaskownicy InstaWP i automatycznie wysyłać je do Mailchimp.
Automatyzacja
Możesz używać GraphQL do automatyzowania zadań i przepływów pracy z treściami (PRO).
Na przykład, gdy tworzony jest nowy post (zdarzenie przez hook draft_post), możesz wykonać persisted query, która sprawdza, czy post nie ma miniatury i w takim przypadku generuje obraz wywołując API Stable Diffusion, kompresuje go przez TinyPng i finalnie wstawia obraz jako wyróżniony obraz posta.

Łatwość użycia
Wszystkie te dodatkowe przypadki użycia można realizować bezpośrednio w wp-admin, dostarczając query GraphQL przez interfejs użytkownika, bez konieczności wdrażania jakiegokolwiek kodu PHP.
