GraphQL em PHP: bibliotecas webonyx/graphql-php e Lighthouse 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 e Lighthouse



GraphQL é uma linguagem de consulta para APIs que permite que os clientes solicitem apenas os dados necessários. No ecossistema PHP, a principal biblioteca para implementar GraphQL é o webonyx/graphql-php. Ela fornece um conjunto completo de ferramentas para criar schemas, tipos e resolvers. Para o framework Laravel, existe o pacote Lighthouse, que estende as funcionalidades do graphql-php e simplifica o desenvolvimento.



Instalação do webonyx/graphql-php

A instalação é feita via Composer:

composer require webonyx/graphql-php


Criação de schema e tipos

A base do GraphQL é o schema, que define os tipos de dados e suas relações. Vejamos um exemplo de criação de um schema simples para obter uma lista de usuários.



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

// Definimos o tipo User$userType = new ObjectType([ 'name' => 'User', 'fields' => [ 'id' => Type::int(), 'name' => Type::string(), 'email' => Type::string(), ]]);

// Definimos o tipo Query (tipo raiz para consultas)$queryType = new ObjectType([ 'name' => 'Query', 'fields' => [ 'user' => [ 'type' => $userType, 'args' => [ 'id' => Type::nonNull(Type::int()) ], 'resolve' => function ($root, $args) { // Exemplo de dados - em um projeto real, aqui seria uma consulta ao banco $users = [ 1 => ['id' => 1, 'name' => 'Ivan', 'email' => 'ivan@example.com'], 2 => ['id' => 2, 'name' => 'Maria', 'email' => 'maria@example.com'], ]; return $users[$args['id']] ?? null; } ], 'users' => [ 'type' => Type::listOf($userType), 'resolve' => function () { return [ ['id' => 1, 'name' => 'Ivan', 'email' => 'ivan@example.com'], ['id' => 2, 'name' => 'Maria', 'email' => 'maria@example.com'], ]; } ] ]]);

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

// Executamos a consulta$rawInput = file_get_contents('php://input');$input = json_decode($rawInput, true);$query = $input['query'];$result = GraphQL::executeQuery($schema, $query);$output = $result->toArray();

header('Content-Type: application/json');echo json_encode($output);


Trabalhando com mutações

Além de consultas (Query), o GraphQL suporta mutações (Mutation) para alterar dados. Exemplo de criação de uma mutação para adicionar um usuário:



<?php// Definimos o tipo de mutação$mutationType = new ObjectType([    'name' => 'Mutation',    'fields' => [        'addUser' => [            'type' => $userType,            'args' => [                'name' => Type::nonNull(Type::string()),                'email' => Type::nonNull(Type::string())            ],            'resolve' => function ($root, $args) {                // Aqui deve estar o código para salvar no banco                return [                    'id' => 3,                    'name' => $args['name'],                    'email' => $args['email']                ];            }        ]    ]]);

// Atualizamos o schema$schema = new Schema([ 'query' => $queryType, 'mutation' => $mutationType]);


Usando Lighthouse para Laravel

Se você trabalha com Laravel, é recomendado usar o Lighthouse. Ele automatiza a criação do schema com base em modelos Eloquent e fornece

Recommendations