Gato GraphQL vs WP REST API
Gato GraphQLとWP REST APIの比較


REST APIとGraphQL APIの違いは、WP REST APIとGato GraphQLを比較する際にも一般的に当てはまります。
GraphQLを使用すると、エンドポイントに対してカスタマイズされたGraphQLクエリを実行し、必要な特定のデータを指定して、1回のリクエストでそのデータのみを取得できます。
たとえば、以下のGraphQLクエリは、特定の投稿に必要なデータを、リレーションシップ(著者、カテゴリー、タグ)のデータも含めて1回のリクエストで取得します。
query {
post(by: { id: 1 }) {
title
content
url
date
author {
id
name
}
categories {
id
name
}
tags {
id
name
}
}
}RESTで同じデータを取得するには、まず投稿データを取得するリクエストを実行し、その後、各リレーションシップ(著者、カテゴリー、タグ)のデータを取得するために追加のリクエストが必要になる場合があります。
RESTとGraphQLのこれらのアーキテクチャ上の違いは他の場所で広く取り上げられていますので、ここでは繰り返しません。
以下では、Gato GraphQL(全拡張機能含む)とWP REST APIをより具体的に比較してみましょう。
サマリーテーブル
| 機能 | Gato GraphQL | WP REST API |
|---|---|---|
| データ取得 | エンドポイントに対してカスタマイズされたGraphQLクエリを実行し、1回のリクエストで特定のデータを取得します。 | 関連データを取得するために複数のエンドポイントへの複数リクエストが必要です(例:投稿データ、著者データ、カテゴリー、タグ)。 |
| エンドポイント | Persisted Queriesをサポートしており、GraphQL言語を使ってwp-admin内のユーザーインターフェースから作成された、事前定義データを持つエンドポイントです。コードのデプロイは不要です。 | PHPコードで作成され、テーマまたはプラグイン内にデプロイされる、それぞれ固有のURLと事前定義データを持つRESTエンドポイントでデータを公開します。 |
| アクセス制御 | ルール(例:ユーザーロール、権限、IPレンジ)に基づくフィールドレベルのアクセス制御で柔軟性を提供します。 | contextパラメーターに基づいてデータを制限します(例:未認証ユーザー向けのview、権限を持つ認証済みユーザー向けのedit)。 |
| 一括操作 | Multiple Query Executionをサポートしており、1つのGraphQLドキュメントで複数のオペレーションを実行でき、@exportディレクティブを通じてオペレーション間で状態を共有できます。バッチリクエストを改善したものです。 | 単一のHTTPリクエスト内で複数のリクエストを内部的に処理するバッチリクエストが可能です。 |
| サイト管理 | 単一のGraphQLドキュメント内でデータを取得・変更・保存でき、ユーザーインターフェースを通じてWordPressサイトの自動化と管理を実現します。複製、自動化、バックアップ、検索/置換、Webhook、翻訳など複数のプラグインのタスクを実行できます。APIであり、それ以上の存在です。 | 主にWordPressデータへのアクセスと操作のためのAPIです。 |
| 汎用性 | GraphQLクエリによるデータのミューテーションとサードパーティサービスとの統合が可能な、WordPressサイト管理のための汎用ツールです。 | APIの提供に特化しており、同様の機能を実現するには追加のプラグインやカスタムコードが必要です。 |
主なポイントのまとめ:
- データ取得:Gato GraphQLはカスタマイズされたクエリを使用し、WP REST APIは複数のエンドポイントへのリクエストを使用します。
- エンドポイント:Gato GraphQLはUIで作成されたPersisted Queriesを使用し、WP REST APIはPHPでコーディングされたRESTエンドポイントを使用します。
- アクセス制御:Gato GraphQLはフィールドレベルの制御を提供し、WP REST APIはcontextパラメーターを使用します。
- 一括操作:Gato GraphQLはMultiple Query Executionを使用し、WP REST APIはバッチリクエストを使用します。
- サイト管理:Gato GraphQLは包括的なツールであり、WP REST APIは主にAPIです。
事前定義データへのアクセス
WP REST APIでは、RESTエンドポイントを通じてデータを公開します。各エンドポイントは固有のURLを持ち、そのデータは(投稿やユーザーなどの対応するリソースに対して)事前定義されています。
RESTエンドポイントと同様に、Gato GraphQLはPersisted Queriesをサポートしており、これらも事前定義データを持つエンドポイントです。GETでPersisted Queryをリクエストすると、保存されたGraphQLクエリが実行され、期待するJSONレスポンスが生成されます:

両者の違いは、REST APIエンドポイントはPHPコードで作成されテーマやプラグイン内にデプロイされる必要があるのに対し、Gato GraphQLのPersisted QueriesはGraphQL言語を使って作成され、コードをデプロイすることなくwp-admin内のユーザーインターフェース(WordPressエディターによる)で公開される点です。

RESTエンドポイントとGraphQL Persisted Queriesの両方に同じキャッシュメカニズムを適用できます。Persisted Queryは独自のエンドポイントでアクセスされるため、そのレスポンスは標準的なHTTPキャッシュでキャッシュできます(PRO)。
アクセス制御
WP REST APIでのデータ制限はcontextパラメーターに依存します。?context=viewを渡すと未認証ユーザー向けのデータが返され、?context=editでは(適切な権限を持つ)認証済みユーザー向けに、投稿のcontent.rawフィールドなどの追加データが含まれます。
Gato GraphQLははるかに高い柔軟性を提供し、すべてのフィールドに対してアクセス制御ルールに基づいてアクセスの可否を設定できます。ログイン済みユーザーのみ、特定のロールや権限を持つユーザーのみ、または特定のIPレンジからの訪問者のみが特定のフィールドにアクセスできるよう検証できます(PRO)。

一括操作
WP REST APIではバッチリクエストを実行でき、複数のリクエストが単一のHTTPリクエスト内で内部的に処理されます。
Gato GraphQLはMultiple Query Executionを提供しており、単一のGraphQLドキュメントで複数のオペレーションを実行できます。
Multiple Query Executionはバッチリクエストの改善版であり、@exportディレクティブを通じてオペレーション間で状態を共有できます。
たとえば、投稿を複製するには、queryオペレーションで投稿データを取得し、そのデータをmutationオペレーションに渡して新しい投稿を作成します:
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
}
}WordPressサイトの管理
Gato GraphQLを使用すると、データベースからデータを取得し、必要に応じて変更し、すべてを単一のGraphQLドキュメント内で保存し直すことができます。
これはユーザーインターフェースを通じて実現され、GraphQLクエリを作成・公開し、必要に応じてエンドポイントを設定し、あるイベントが発生したときにクエリの実行を自動化できます。
これらすべてが意味するのは、Gato GraphQLがWordPressサイトを管理するための汎用ツールであり、データ(WordPressサイトのものであれ、サードパーティサービスから提供されるものであれ)をミューテーションする必要があるユースケースに対応できるということです。これはGraphQLクエリを実行することで実現できます。
Gato GraphQLがいかに複数のプラグインの機能を提供できるかに注目してください:
- 複製プラグインではありませんが、投稿を複製できます。
- 自動化プラグインではありませんが、制限なくタスクを自動化できます。
- バックアッププラグインではありませんが、投稿をインポートしたり他のWPサイトにエクスポートしたりできます。
- 検索・置換プラグインではありませんが、すべての投稿を一括変更できます。
- WebhookプラグインやHTTPクライアントではありませんが、任意のAPIにリクエストを送信することも、任意のサービスからの受信リクエストを受け取って処理することもできます。
- 翻訳プラグインではありませんが、あらゆるコンテンツを翻訳できます。
WP REST APIはまさにその名の通り、APIです。
Gato GraphQLもAPIですが、それ以上の存在です。
