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.