Взаимодействие с GraphQL API
Взаимодействие с GraphQL APIМиграция приложения с WordPress на другой PHP-фреймворк или CMS

Миграция приложения с WordPress на другой PHP-фреймворк или CMS

Схема GraphQL, предоставляемая Gato GraphQL, содержит поля для получения данных WordPress: публикации, пользователи, комментарии, теги, категории и т. д.

Код PHP-резолверов, получающих данные WordPress, зависит от WordPress; этот код не может выполняться в приложении, не основанном на WordPress.

Тем не менее, в Gato GraphQL каждый из этих резолверов реализован через 2 пакета:

  1. «Ванильный» PHP-пакет, содержащий весь универсальный код
  2. WordPress-специфичный пакет, содержащий реальные вызовы методов WordPress, которые обслуживают данный резолвер

Например, в следующем GraphQL query:

{
  posts {
    id
    title
  }
}

...логика получения публикаций состоит из:

  1. Поля Root.posts: оно находится в универсальном пакете posts
  2. Его разрешения для WordPress через метод get_posts: оно находится в WordPress-специфичном пакете posts-wp.

Разделение кода между не-WordPress и WordPress-пакетами составляет примерно 80/20%, что означает: 80% кода можно повторно использовать с другим фреймворком/CMS, и лишь 20% кода потребует повторной реализации.

Кроме того, весь функционал Gato GraphQL поставляется в виде модулей, и модули можно включать и отключать по желанию.

Модули схемы
Модули схемы

Modules — это функциональность, реализованная в целях безопасности: если вам не нужно раскрывать данные пользователей в публичном API, вы можете отключить модуль Users, и соответствующие поля (например, Root.users) никогда не будут добавлены в схему.

Модули напрямую соответствуют базовым PHP-пакетам. Поэтому при запуске Gato GraphQL как автономного приложения можно выборочно загружать только необходимые модули/пакеты, не загружая остальные.

Например, если ваше приложение выводит только данные публикаций, категорий и тегов, то нужно загрузить лишь пакеты posts-wp, categories-wp и tags-wp (вместе с их зависимостями).

Таким образом, при миграции с WordPress (скажем, на Laravel или Symfony) потребуется повторно реализовать только эти 3 WordPress-специфичных пакета для нового фреймворка/CMS — и ничего больше.