API для WordPress

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 и GraphQL API в целом справедливы при сравнении WP REST API с Gato GraphQL.

С GraphQL вы можете выполнить специально составленный GraphQL query к endpoint, указав, какие именно данные вам нужны, и получив только их в рамках одного запроса.

Например, следующий 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 queries к endpoint, получая конкретные данные в одном запросе.Требует нескольких запросов к разным endpoints для получения связанных данных (например, данные записи, автора, категорий и меток).
EndpointsПоддерживает Persisted Queries — endpoints с предопределёнными данными, созданные на языке GraphQL через пользовательский интерфейс в wp-admin, без необходимости развёртывания кода.Предоставляет данные через REST endpoints, каждый из которых имеет собственный URL и предопределённые данные, создаётся с помощью PHP-кода и развёртывается в теме или плагине.
Контроль доступаОбеспечивает гибкость с контролем доступа на уровне поля на основе правил (например, роли пользователей, capabilities, диапазон IP).Ограничивает данные на основе параметра context (например, view для неаутентифицированных пользователей, edit для аутентифицированных пользователей с правами).
Пакетные операцииПоддерживает выполнение множественных queries, где один GraphQL-документ может выполнять несколько операций, которые могут обмениваться состоянием через директиву @export, превосходя batch requests.Допускает batch requests, при которых несколько запросов обрабатываются внутри одного HTTP-запроса.
Управление сайтомПозволяет получать данные, изменять их и сохранять обратно в рамках одного GraphQL-документа через пользовательские интерфейсы, обеспечивая автоматизацию и управление сайтами WordPress. Может выполнять задачи множества плагинов: дублирование, автоматизацию, резервное копирование, поиск/замену, webhooks и перевод. Это API и гораздо больше.В первую очередь API для доступа к данным WordPress и управления ими.
УниверсальностьУниверсальный инструмент для управления сайтами WordPress, способный изменять данные и интегрироваться со сторонними сервисами посредством GraphQL queries.Ориентирован на предоставление API; для аналогичной функциональности требует дополнительных плагинов или пользовательского кода.

Краткое изложение ключевых моментов:

  • Получение данных: Gato GraphQL использует специализированные queries, тогда как WP REST API использует множество запросов к endpoints.
  • Endpoints: Gato GraphQL использует persisted queries, созданные через UI, тогда как WP REST API использует REST endpoints, написанные на PHP.
  • Контроль доступа: Gato GraphQL предлагает контроль на уровне поля, тогда как WP REST API использует параметр context.
  • Пакетные операции: Gato GraphQL использует Multiple Query Execution, а WP REST API использует batch requests.
  • Управление сайтом: Gato GraphQL — комплексный инструмент, а WP REST API — прежде всего API.

Доступ к предопределённым данным

В WP REST API данные предоставляются через REST endpoints. Каждый endpoint имеет собственный URL, а его данные предопределены (для соответствующих ресурсов, таких как записи или пользователи).

По аналогии с REST endpoints, Gato GraphQL поддерживает Persisted Queries — endpoints с предопределёнными данными. Запрос к persisted query через GET выполнит сохранённый GraphQL query и вернёт ожидаемый ответ в формате JSON:

Выполнение persisted query в браузере
Выполнение persisted query в браузере

Разница между ними состоит в том, что REST API endpoints создаются с помощью PHP-кода и должны быть развёрнуты в теме или плагине, тогда как persisted queries в Gato GraphQL создаются на языке GraphQL и публикуются через пользовательский интерфейс (на основе редактора WordPress) в wp-admin — без необходимости развёртывания какого-либо кода.

Редактор persisted queries
Редактор persisted queries

Одни и те же механизмы кэширования могут применяться как к REST endpoints, так и к GraphQL persisted queries. Поскольку persisted query доступна по собственному endpoint, её ответ можно кэшировать с помощью стандартного HTTP-кэширования (PRO).

Контроль доступа

Ограничение данных в WP REST API зависит от параметра context. Передача ?context=view возвращает данные для неаутентифицированных пользователей, а ?context=edit включает дополнительные данные для аутентифицированных пользователей (с соответствующими правами), например поле content.raw записи.

Gato GraphQL предоставляет значительно большую гибкость: каждое отдельное поле может быть доступно или недоступно на основе правил контроля доступа. Вы можете указать, что определённое поле доступно только вошедшим в систему пользователям, пользователям с определённой ролью или capability, либо посетителям из определённого диапазона IP (PRO).

Редактор Access Control List
Редактор Access Control List

Пакетные операции

WP REST API позволяет выполнять batch requests, при которых несколько запросов обрабатываются внутри одного HTTP-запроса.

Gato GraphQL предоставляет выполнение множественных queries, где один GraphQL-документ может выполнять несколько операций.

Multiple Query Execution является улучшением по сравнению с batch requests, поскольку операции могут обмениваться состоянием друг с другом через директиву @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 queries, настройки endpoints по мере необходимости и автоматизации выполнения query при наступлении определённого события.

Всё это означает, что Gato GraphQL является универсальным инструментом для управления сайтами WordPress, удовлетворяя те сценарии использования, при которых данные (будь то данные сайта WordPress или предоставленные сторонними сервисами) должны быть изменены, — поскольку это достигается выполнением соответствующего GraphQL query.

Обратите внимание, как Gato GraphQL способен обеспечить функциональность множества плагинов:

WP REST API — это просто API.

Gato GraphQL тоже является API, но и гораздо большим.

Подпишитесь на нашу рассылку

Будьте в курсе всех обновлений Gato GraphQL.