GraphQL em PHP: biblioteca webonyx/graphql-php para criação de APIs

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Biblioteca GraphQL PHP: webonyx/graphql-php



No desenvolvimento web moderno, a necessidade de APIs flexíveis e eficientes é cada vez maior. Os serviços REST tradicionais frequentemente sofrem com carregamento excessivo ou insuficiente de dados. GraphQL é uma linguagem de consulta e ambiente de execução criada pelo Facebook, que permite aos clientes solicitar exatamente os dados de que precisam. Para PHP, uma das implementações mais populares é a biblioteca webonyx/graphql-php.



Esta biblioteca fornece um conjunto completo de ferramentas para construir servidores GraphQL em PHP: desde a definição do esquema de tipos até o processamento de consultas complexas com relacionamentos aninhados. Ela é ideal para criar APIs modernas para aplicações web, aplicativos móveis e SPAs (Single Page Applications).



Principais recursos do webonyx/graphql-php



  • Suporte completo à especificação GraphQL (junho de 2018) — todos os tipos, diretivas, variáveis e fragmentos.
  • Sistema de tipos baseado em objetos PHP — definição de tipos, interfaces, tipos union e enum.
  • Resolvedores integrados — possibilidade de definir a lógica de obtenção de dados para cada campo.
  • Validação de consultas — verificação automática de sintaxe e tipos.
  • Suporte a carregamento preguiçoso — dados são carregados apenas quando solicitados.
  • Compatibilidade com frameworks populares — Laravel, Symfony, Yii2 através de pacotes wrapper.


Instalação e configuração



A instalação é feita via Composer:



composer require webonyx/graphql-php


Para funcionar, é necessário PHP 7.1+ com a extensão mbstring. Após a instalação, criaremos um servidor simples.



Exemplo: criando um esquema GraphQL



Vamos considerar um exemplo básico — obter uma lista de livros e autores. Primeiro, definimos os tipos:



<?phpuse GraphQL\\Type\\Definition\\ObjectType;use GraphQL\\Type\\Definition\\Type;use GraphQL\\Type\\Schema;

// Tipo "Author"$authorType = new ObjectType([ 'name' => 'Author', 'fields' => [ 'id' => Type::int(), 'name' => Type::string(), 'books' => [ 'type' => Type::listOf($bookType), // será definido abaixo 'resolve' => function ($author) { // Suponha que exista uma função getBooksByAuthorId() return getBooksByAuthorId($author['id']); } ] ]]);

// Tipo "Book" (definido com closure para referências cíclicas)$bookType = new ObjectType([ 'name' => 'Book', 'fields' => function() use ($authorType) { return [ 'id' => Type::int(), 'title' => Type::string(), 'author' => [ 'type' => $authorType, 'resolve' => function ($book) { return getAuthorById($book['author_id']); } ] ]; }]);

// Tipo "Query"$queryType = new ObjectType([ 'name' => 'Query', 'fields' => [ 'books' => [ 'type' => Type::listOf($bookType), 'resolve' => function() { return getAllBooks(); } ], 'author' => [ 'type' => $authorType, 'args' => [ 'id' => Type::nonNull(Type::int()) ], 'resolve' => function($root, $args) { return getAuthorById($args['id']); } ] ]]);

// Criando o esquema$schema = new Schema([ 'query' => $queryType]);


Processamento da consulta



Agora, escrevemos o código que recebe a consulta GraphQL e retorna o resultado:



<?phpuse GraphQL\\GraphQL;use GraphQL\\Error\\DebugFlag;

// Obtém o corpo da requisição da en

Recommendations