PHP GraphQL API com Laravel — Parte 1
Sem frescura vamos direto ao ponto. No decorrer da explicação vou colocando alguns links importantes para o entendimento.
Esses dias me interessei em saber o que é o tal do GraphQL, fui atrás dei uma olhada na documentação, fiz o demo do howtographql e massa. Mais como aplicar isso na minha linguagem preferida (PHP) e framework do coração (Laravel)?
Dei uma googlada e achei um ótimo pacote (lighthouse) que cria para você o servidor GraphQL no Laravel. Resolvi aqui compartilhar meu aprendizado (no minimo terei um how-to para quando eu precisar e na melhor das hipóteses vou ajudar alguém).
OBS: não vou explicar aqui como instalar o PHP e Composer, mais você pode dar uma olhada aqui(windows) e depois aqui(windows).
Então tá, vai lá jovem gafanhoto e crie nosso projeto em laravel (gosto de usar o composer create-project para isso).
composer create-project --prefer-dist laravel/laravel graphql-api
Agora adicione o lighthouse no nosso projeto. E em seguida publique os arquivos do pacote.
composer require nuwave/lighthouse && php artisan vendor:publish --provider="Nuwave\Lighthouse\Providers\LighthouseServiceProvider" --tag=schema
Adicione o aliases no array ‘aliases’ no arquivo config/app.php
'GraphQL' => Nuwave\Lighthouse\Support\Facades\GraphQLFacade::class,
E pronto, nosso servidor GraphQL está pronto! Mais antes de por ele no ar, vamos configurar nossa aplicação.
Vamo usar o SQLite como base de dados, então no arquivo de configuração (.env) vamos remover as variáveis de ambiente, referentes ao banco de dados e deixar somente a variável DB_CONNECTION com o valor sqlite.
DB_CONNECTION=sqlite
E criar o arquivo de banco no diretório database do nosso projeto.
touch database/database.sqlite
Rode os migrates e coloca o servidor para rodar com o Laravel(to usando o servidor embutido do PHP mesmo).
php artisan migrate && php artisan serve
Ai sim, servidor GraphQL no ar (pelo menos aqui funcionou).
Agora você deve estar se perguntando, como que vamos testar esse nosso novo serviço? A resposta e e simples jovem gafanhoto, da uma olhada nesse pacote aqui.
Vai lá e adiciona o pacote do laravel-graphql-playground (não esquece de parar o servidor antes, não que isso irá fazer alguma diferença). Em seguida publique os arquivos do pacote.
composer require mll-lab/laravel-graphql-playground && php artisan vendor:publish --provider="MLL\GraphQLPlayground\GraphQLPlaygroundServiceProvider"
Se você olhar agora as suas rotas
php artisan route:list
uma dela sera /graphql-playground. É essa rota que vamos acessar agora (se você parou o servidor, agora e hora de subir ele novamente). Se você estiver seguindo a explicação é só voce acessar a pagina http://127.0.0.1:8000/graphql-playground. Mais antes de acessar o graphql-playground, vamos adicionar um pouco de dados no nosso banco.
Nesse primeiro momento, vamos usar o model User que vem com toda nova aplicação Laravel. Acesse o tinker.
php artisan tinker
Agora no crie alguns usuários.
factory(App\User::class, 100)->create()
Agora sim, acesse o graphql-playground e execute a query abaixo:
query {
users(count: 10 page: 1) {
data {
id
name
email
}
}
}
Clique no botão play e veja o resultado!
O que dizer? I ❤️Laravel! E os malucos do Lighthouse estão de parabéns. No próximo post vamos entender como o Lighthouse funciona.
OBS: Os fonts desse projeto podem ser encontrados em https://github.com/marcospaegle/graphql-api