Serwery GraphQL dla WordPress

Gato GraphQL vs WPGraphQL

Porównanie Gato GraphQL i WPGraphQL

Gato GraphQL vs WPGraphQL
plus image
Gato GraphQL vs 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

FunkcjaGato GraphQLWPGraphQL
Problem N+1Nie stanowi problemu dzięki projektowi architekturalnemuMoże stanowić problem, jeśli nie zostanie obsłużony; deweloper musi być tego świadomy
Bezpieczeństwo: wyłączanie endpointuMożliwość całkowitego wyłączenia pojedynczego endpointu za pomocą persisted queries (PRO)Niedostępne
Kontrola dostępuWalidacja pole po polu, z rolami/uprawnieniami/IP, przez interfejs użytkownika (PRO)Nie na poziomie pola, mniej szczegółowe
Kontrola cachemax-age obliczany automatycznie dla queries (PRO)Brak automatycznej kontroli cache
Niestandardowe endpointyWiele endpointów, chronionych hasłem/konfigurowalnych; obsługiwana hierarchia endpointów (PRO)Pojedynczy endpoint, ograniczona personalizacja
Aktualizacje zbiorcze i wyszukiwanie/zamianaZbiorowe usuwanie, tagowanie, zastępowanie (z regex), przez GraphQL (PRO)Niedostępne
Niestandardowe/eksperymentalne funkcje GraphQLZagnieżdżone mutacje, schema namespacing, oneOf input objectGłównie standardowa specyfikacja GraphQL
Multiple Query Execution (kompozycyjność)Wiele queries w jednym dokumencie, współdzielenie stanu za pomocą @exportQueries w trybie batch (wiele na żądanie), ale bez możliwości współdzielenia stanu
Wewnętrzne/prywatne endpointyPrywatny endpoint wyłącznie dla backendu/PHP, niewidoczny dla użytkowników (PRO)Niedostępne
Zaawansowana mutacja danychPobieranie, modyfikacja i utrwalanie danych w jednym dokumencie (PRO)Nieobsługiwane
Synchronizacja i dystrybucja treściImport/eksport przez GraphQL, RSS, CSV, REST API (PRO)Niedostępne
Integracja z usługami webowymiWychodzą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 GraphQLBardziej podstawowy interfejs administracyjny
Batching/kompozycyjnośćKompozycja pól/dyrektyw, wielokrotnie używana logika resolverów (PRO)Nieobsługiwane
Multiple Query ExecutionObsługiwane, ze współdzielonym stanem i zależnościamiObsługiwane, bez współdzielenia stanu
Standardowe użycie headless/statyczneOba są równie skuteczneOba 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.

Edytor persisted query
Edytor persisted query

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).

Edytor listy kontroli dostępu
Edytor listy kontroli dostępu

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).

Edytor listy kontroli cache

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).

Niestandardowy endpoint chroniony hasłem
Niestandardowy endpoint chroniony hasłem

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.

Interaktywny schemat z przestrzenią nazw
Interaktywny schemat z przestrzenią nazw

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.

Edytor reguł automatyzacji
Edytor reguł automatyzacji

Ł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.

Zapisz się do naszego newslettera

Bądź na bieżąco ze wszystkimi aktualizacjami Gato GraphQL.