GraphQL API com PHP: tutorial passo a passo

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

Introdução: Por que GraphQL e PHP são uma excelente combinação

No mundo do desenvolvimento web, a REST API foi por muito tempo o padrão de facto. No entanto, com o aumento da complexidade das aplicações e o surgimento de clientes móveis, as desvantagens do REST tornaram-se óbvias: excesso ou falta de dados, múltiplos endpoints, versionamento complexo. O GraphQL, desenvolvido pelo Facebook, resolve esses problemas permitindo que o cliente solicite apenas os dados de que precisa e os receba em uma única requisição.

O PHP, apesar de sua "velha escola", continua sendo uma linguagem poderosa para criar lógica de servidor. Graças a bibliotecas modernas, como webonyx/graphql-php, implementar uma API GraphQL em PHP tornou-se simples e eficiente. Neste tutorial, criaremos passo a passo um servidor GraphQL completo, capaz de processar queries, mutations e trabalhar com banco de dados.

Usaremos PHP 8.0+, Composer para gerenciamento de dependências e o servidor embutido do PHP para testes locais. Ao final do artigo, você poderá implantar sua própria API e integrá-la com qualquer frontend.



1. Instalação e configuração do ambiente

Antes de escrever código, é necessário preparar o projeto. Certifique-se de ter PHP 8.0+ e Composer instalados. Crie uma nova pasta para o projeto e acesse-a:

mkdir graphql-php-tutorialcd graphql-php-tutorial

Agora instale a biblioteca principal webonyx/graphql-php usando o Composer:

composer require webonyx/graphql-php

Para trabalhar com o banco de dados, usaremos o PDO, que já vem embutido no PHP. Instale também uma biblioteca para facilitar o parsing de queries:

composer require graphql-php/graphql-php

Crie o arquivo index.php — este será o ponto de entrada da nossa aplicação. Configure o autoload do Composer e a estrutura básica:

<?phprequire_once __DIR__ . '/vendor/autoload.php';

use GraphQL\\GraphQL;use GraphQL\\Type\\Schema;use GraphQL\\Type\\Definition\\ObjectType;use GraphQL\\Type\\Definition\\Type;

// Aqui ficará nossa lógica

Além disso, crie o arquivo schema.graphql para armazenar o schema em formato textual (opcional, mas útil para projetos grandes).



2. Definição do schema e tipos de dados

O coração de qualquer API GraphQL é o schema. Ele descreve quais dados estão disponíveis e como acessá-los. Em nosso exemplo, criaremos um modelo simples de usuário (User) e post (Post).

Comece definindo os tipos. No arquivo index.php, adicione as seguintes classes:

// Tipo User$userType = new ObjectType([    'name' => 'User',    'fields' => [        'id' => Type::int(),        'name' => Type::string(),        'email' => Type::string(),        'posts' => [            'type' => Type::listOf($postType),            'resolve' => function ($user) use ($db) {                // Função resolver para carregar os posts do usuário                $stmt = $db->prepare('SELECT * FROM posts WHERE user_id = :id');                $stmt->execute([':id' => $user['id']]);                return $stmt->fetchAll(PDO::FETCH_ASSOC);            }        ]    ]]);

// Tipo Post$postType = new ObjectType([ 'name' => 'Post', 'fields' => [ 'id' => Type::int(), 'title' => Type::string(), 'content' => Type::string(), 'author' => [ 'type' => $userType, 'resolve' => function ($post) use ($db) { $stmt = $db->prepare('SELECT * FROM users WHERE id = :id'); $stmt->execute([':id' => $post['user_id']]); return $stmt->fetch(PDO::FETCH_ASSOC); } ] ]]);

Observe os resolvers — são funções que determinam como obter os dados para cada campo. No exemplo acima, usamos PDO para consultas ao banco de dados.

Agora, crie

Blogs

Book Recommendations