Кто может подсказать пример Symfony 4 + Graphql?

Symfony 4 является последней стабильной версией веб-фреймворка Symfony, и предоставляет широкие возможности для создания мощных веб-приложений. GraphQL, в свою очередь, является современным языком запросов для API, который позволяет клиентским приложениям обращаться к серверу и получать только необходимые им данные.

Чтобы интегрировать GraphQL в Symfony 4, есть несколько вариантов решения. Ниже приведен пример простого приложения Symfony 4 с использованием GraphQL и библиотеки OverblogGraphQLBundle.

Перед началом создания приложения убедитесь, что у вас установлен Composer, PHP и Symfony CLI.

Шаг 1: Создание нового проекта Symfony 4
Выполните следующую команду в терминале:

symfony new graphql-example

Шаг 2: Установка OverblogGraphQLBundle
Перейдите в директорию вашего проекта и выполните следующую команду:

composer require overblog/graphql-bundle

Шаг 3: Настройка OverblogGraphQLBundle
Откройте файл config/bundles.php и добавьте следующую строку:

OverblogGraphQLBundleOverblogGraphQLBundle::class => ['all' => true],

Затем откройте файл config/routes.yaml и добавьте следующий код:

overblog_graphql_endpoint:
    resource: "@OverblogGraphQLBundle/Resources/config/routing/graphql.yaml"
    prefix: /graphql

Затем откройте файл config/packages/overblog_graphql.yaml и добавьте следующий код:

overblog_graphql:
    definitions:
        auto_scan: true
    validation:
        validation_errors_formatter: OverblogGraphQLBundleErrorErrorHandler::format
        exception_factory: OverblogGraphQLBundleErrorUserFacingErrorFactory

Шаг 4: Создание GraphQL-типов
Создайте новую директорию src/GraphQL/Type. Внутри этой директории создайте файл BookType.php со следующим кодом:

namespace AppGraphQLType;

use GraphQLTypeDefinitionType;
use OverblogGraphQLBundleAnnotation as GQL;

/**
 * @GQLType
 */
class BookType
{
    /**
     * @GQLField(type="ID!")
     */
    public function getId($book)
    {
        return $book['id'];
    }

    /**
     * @GQLField(type="String!")
     */
    public function getTitle($book)
    {
        return $book['title'];
    }

    /**
     * @GQLField(type="String")
     */
    public function getDescription($book)
    {
        return $book['description'];
    }
}

Шаг 5: Создание корневого GraphQL-типа
Внутри директории src/GraphQL/Type создайте новый файл QueryType.php со следующим кодом:

namespace AppGraphQLType;

use GraphQLTypeDefinitionType;
use OverblogGraphQLBundleAnnotation as GQL;

/**
 * @GQLType
 */
class QueryType
{
    /**
     * @GQLField(
     *     type="[BookType]"
     * )
     */
    public function books()
    {
        return [
            ['id' => 1, 'title' => 'Book 1', 'description' => 'Description 1'],
            ['id' => 2, 'title' => 'Book 2', 'description' => 'Description 2'],
        ];
    }
}

Шаг 6: Создание GraphQL-схемы
Вставьте следующий код в файл src/GraphQL/Schema.php:

namespace AppGraphQL;

use AppGraphQLTypeQueryType;
use OverblogGraphQLBundleAnnotation as GQL;
use OverblogGraphQLBundleDefinitionResolverResolverInterface;

/**
 * @GQLSchema
 */
class Schema implements ResolverInterface
{
    /**
     * @GQLQuery(type="[BookType]")
     */
    public function query()
    {
        return null; // This method is only used for annotations, not used in the actual logic
    }

    /**
     * @GQLResolveField(
     *     fieldName="query",
     *     resolver="AppGraphQLTypeQueryType"
     * )
     */
    public function resolveQuery()
    {
        return null; // This method is only used for annotations, not used in the actual logic
    }
}

Шаг 7: Запуск приложения
Выполните следующую команду в терминале, чтобы запустить веб-сервер Symfony:

symfony server:start

Откройте браузер и перейдите по адресу http://localhost:8000/graphql, где вы увидите GraphiQL – интерактивную среду для тестирования GraphQL-запросов.

Вы можете вводить запросы GraphQL в поле запроса. Например, чтобы получить список книг, выполните следующий запрос:

query {
  books {
    id
    title
    description
  }
}

Вы должны получить результат со списком книг.

Это лишь пример простого приложения Symfony 4 с использованием GraphQL. Используя OverblogGraphQLBundle, вы можете добавить более сложные сущности, мутации и другие возможности, которые предоставляют GraphQL и Symfony 4.