GraphQL становится все более популярным способом взаимодействия с API, позволяя клиентам запрашивать только необходимые данные. В этой статье мы подробно рассмотрим, как интегрировать GraphQL в собственный WordPress плагин, чтобы расширить возможности вашего сайта и обеспечить удобный и гибкий API.
Почему стоит использовать GraphQL в WordPress плагинах
REST API, встроенный в WordPress, покрывает большинство задач, но иногда он слишком громоздкий и неэффективный. GraphQL позволяет запросить именно те поля, которые нужны, что уменьшает объем передаваемых данных и ускоряет работу клиентских приложений.
Кроме того, GraphQL упрощает построение сложных запросов с вложенными данными, что особенно полезно для современных фронтенд-приложений на React, Vue или Angular.
Подготовка окружения и установка необходимых пакетов
Для начала нам понадобится установить и активировать плагин WPGraphQL. Это базовый плагин, который добавляет поддержку GraphQL в WordPress.
Его можно установить через админку WordPress или скачать с официального репозитория. После активации вы получите доступ к GraphQL эндпоинту /graphql.
Установка WPGraphQL через админку
- Перейдите в раздел Плагины > Добавить новый
- Введите в поиске "WPGraphQL"
- Установите и активируйте плагин
Создаем собственные типы и поля GraphQL в плагине
Для того, чтобы расширить схему GraphQL своими типами, нам нужно зарегистрировать кастомные типы и поля. Рассмотрим пример, как добавить тип "Book" с полями title, author и year.
add_action('graphql_register_types', 'wpplugin_register_book_type');
function wpplugin_register_book_type() {
register_graphql_object_type('Book', [
'description' => 'Книга с основными данными',
'fields' => [
'title' => [
'type' => 'String',
'description' => 'Название книги',
],
'author' => [
'type' => 'String',
'description' => 'Автор книги',
],
'year' => [
'type' => 'Int',
'description' => 'Год издания',
],
],
]);
}Этот код добавляет новый тип Book в GraphQL схему. Далее создадим запрос, который возвращает список книг.
add_action('graphql_register_types', 'wpplugin_register_books_query');
function wpplugin_register_books_query() {
register_graphql_field('RootQuery', 'books', [
'type' => ['list_of' => 'Book'],
'description' => 'Список книг',
'resolve' => function() {
// Здесь можно получить данные из базы, API или файла
return [
['title' => 'Война и мир', 'author' => 'Лев Толстой', 'year' => 1869],
['title' => 'Преступление и наказание', 'author' => 'Фёдор Достоевский', 'year' => 1866],
];
},
]);
}Интеграция с кастомными типами постов и метаполями
Если у вас есть кастомный тип поста, например "product", и вы хотите добавить его поддержку в GraphQL с метаполями, это тоже возможно.
Для этого можно использовать параметр show_in_graphql при регистрации типа поста:
register_post_type('product', [
'label' => 'Продукты',
'public' => true,
'show_in_graphql' => true,
'graphql_single_name' => 'Product',
'graphql_plural_name' => 'Products',
]);Для метаполей используйте функцию register_graphql_field:
add_action('graphql_register_types', function() {
register_graphql_field('Product', 'price', [
'type' => 'Float',
'description' => 'Цена продукта',
'resolve' => function($product) {
return get_post_meta($product->ID, 'price', true);
},
]);
});Тестирование и отладка GraphQL запросов
После добавления типов и полей вы сможете отправлять запросы к эндпоинту /graphql. Для удобства используйте GraphiQL — встроенный в WPGraphQL инструмент для тестирования запросов.
Пример запроса для получения списка книг:
{
books {
title
author
year
}
}Вы получите JSON с данными, которые вернул ваш резолвер. Если данные не отображаются, проверьте правильность регистрации типов и функций resolve.
Использование WPGraphQL с плагинами WPShop
Если вы используете продукты WPSHOP, например, плагин WPGPT, можно расширить GraphQL запросы для интеграции с их функционалом, например, получать данные из GPT или создавать пользовательские запросы.
Для этого в коде вашего плагина добавляйте новые поля и мутации, которые вызывают методы из плагина WPGPT, обеспечивая гибкую интеграцию.
Заключение
Добавление поддержки GraphQL в ваш WordPress плагин открывает новые возможности для создания современных, быстрых и удобных API. Используя WPGraphQL и собственные расширения, вы сможете создавать кастомные схемы и резолверы для любых задач.
Не забывайте тестировать свои запросы и оптимизировать резолверы для производительности. А если нужна дополнительная функциональность, смотрите плагины на WPSHOP, которые помогут расширить возможности вашего сайта.