WordPress 的 API

Gato GraphQL vs WP REST API

Gato GraphQL 与 WP REST API 的比较

Gato GraphQL vs WP REST API
plus image
Gato GraphQL vs WP REST API

REST API 与 GraphQL API 之间的差异,在比较 WP REST APIGato GraphQL 时同样普遍适用。

使用 GraphQL,您可以针对端点执行定制化的 GraphQL query,指定所需的特定数据,并在单次请求中仅获取该数据。

例如,以下 GraphQL query 将在单次请求中获取特定文章所需的数据,包括其关联关系(作者、分类和标签)的数据:

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 GraphQLWP REST API
数据获取针对端点执行定制化的 GraphQL query,在单次请求中获取特定数据。需要向不同端点发送多个请求才能获取关联数据(例如:文章数据、作者数据、分类和标签)。
端点支持 Persisted Queries,即通过 wp-admin 内的用户界面使用 GraphQL 语言创建的、带有预定义数据的端点,无需部署代码。通过 REST 端点公开数据,每个端点都有其自己的 URL 和预定义数据,通过 PHP 代码创建并部署在主题或插件中。
访问控制基于规则(例如:用户角色、权限、IP 范围)提供字段级别访问控制的灵活性。根据 context 参数限制数据(例如:未认证用户使用 view,有权限的认证用户使用 edit)。
批量操作支持 Multiple Query Execution,单个 GraphQL 文档可执行多个操作,并通过 @export 指令在操作间共享状态,是对批量请求的改进。支持批量请求,在单个 HTTP 请求内部处理多个请求。
站点管理可在单个 GraphQL 文档中获取数据、修改数据并将其存回,通过用户界面实现 WordPress 站点的自动化与管理。可执行多个插件的任务,如复制、自动化、备份、搜索/替换、Webhook 和翻译。既是 API,又远不止于此。主要是用于访问和操作 WordPress 数据的 API。
通用性一款管理 WordPress 站点的通用工具,能够通过 GraphQL query 进行数据变更并与第三方服务集成。专注于提供 API;要实现类似功能需要额外的插件或自定义代码。

核心要点总结:

  • 数据获取:Gato GraphQL 使用定制化 query,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 query,并生成预期的 JSON 响应:

在浏览器中执行 Persisted Query
在浏览器中执行 Persisted Query

两者的区别在于:REST API 端点通过 PHP 代码创建,必须部署在主题或插件中;而 Gato GraphQL 的 Persisted Queries 使用 GraphQL 语言创建,通过 wp-admin 内的用户界面(由 WordPress 编辑器驱动)发布,无需部署任何代码。

Persisted Query 编辑器
Persisted Query 编辑器

相同的缓存机制可应用于 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 query、按需配置端点,以及在某个事件发生时自动执行 query。

这一切都意味着 Gato GraphQL 是管理 WordPress 站点的通用工具,能够满足需要对数据(无论来自 WordPress 站点还是第三方服务)进行变更的使用场景,这些都可以通过执行 GraphQL query 来实现。

请注意 Gato GraphQL 如何提供多个插件的功能:

WP REST API 就是一个 API。

Gato GraphQL 也是一个 API,但远不止于此。

订阅我们的新闻通讯

及时了解 Gato GraphQL 的所有更新。