Construindo uma API GraphQL com Laravel e Lighthouse

COMPARTILHAR:

A criação de APIs flexíveis e eficazes é uma parte fundamental do desenvolvimento de aplicativos modernos. Com a popularidade crescente do GraphQL, os desenvolvedores estão buscando maneiras de construir APIs GraphQL robustas e eficientes em diferentes tecnologias. Neste artigo, exploraremos como construir uma API GraphQL com Laravel e Lighthouse, dois poderosos frameworks que tornam esse processo mais simples.

GraphQL em Poucas Palavras

Antes de mergulharmos nos detalhes de como construir uma API GraphQL com Laravel e Lighthouse, é importante entender o que é o GraphQL. GraphQL é uma linguagem de consulta para suas APIs e, ao mesmo tempo, uma camada de execução para atender a essas consultas. Portanto, diferentemente das APIs REST tradicionais, onde você obtém uma resposta predefinida, o GraphQL permite que os clientes solicitem exatamente os dados de que precisam, nem mais, nem menos.

Então, para começar, vamos explorar os conceitos-chave do GraphQL e como eles se aplicam à construção de APIs com Laravel e Lighthouse.

Definindo um Esquema GraphQL

Uma API GraphQL é definida por um esquema que descreve os tipos de dados e as operações que podem ser realizadas. O esquema é definido usando a SDL (Schema Definition Language), uma linguagem específica do GraphQL. Aqui está um exemplo de como definir um esquema GraphQL:

type User {
  id: ID!
  name: String!
  posts: [Post!]!
}
type Post {
  title: String!
  author: User!
}

Neste exemplo, definimos dois tipos, User e Post, com campos que descrevem a estrutura dos dados. Um usuário tem um ID, um nome e uma lista de postagens, enquanto uma postagem tem um título e um autor (que é um usuário). Isso ilustra como o GraphQL permite definir relações complexas entre tipos de dados.

Lighthouse e Laravel

Agora que entendemos os princípios básicos do GraphQL, é hora de falar sobre como usar o Laravel e o Lighthouse para criar nossa API. Laravel é um popular framework de desenvolvimento PHP que fornece uma base sólida para a construção de aplicativos da web, e o Lighthouse é uma extensão do Laravel que permite criar APIs GraphQL poderosas.

Vamos passo a passo pela criação de nossa API GraphQL com Laravel e Lighthouse.

Instalação

O primeiro passo é configurar um novo projeto Laravel ou usar um projeto Laravel existente. Certifique-se de que você tenha um banco de dados configurado e execute as migrações necessárias. Além disso, é uma boa prática adicionar alguns dados falsos ao seu banco de dados para fins de teste.

php artisan migrate
php artisan tinker
\App\Models\User::factory(10)->create()

Agora, você pode começar a instalar o Lighthouse:

composer require nuwave/lighthouse

Em seguida, publique o esquema padrão com o seguinte comando:

php artisan vendor:publish --tag=lighthouse-schema

Além disso, você pode instalar o GraphiQL, uma interface de consulta interativa para o GraphQL, com o seguinte comando:

composer require mll-lab/laravel-graphiql

Certifique-se de que tudo está funcionando acessando /graphiql e executando uma consulta de teste.

Modelos e Migrações

Para construir nossa API, precisamos definir modelos e migrações. Neste exemplo, estamos criando uma API para um blog simples, com modelos para User, Post e Comment.

Definimos os modelos e as migrações para Post e Comment da seguinte forma:

// app/Models/Post.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
final class Post extends Model
{
    public function author(): BelongsTo
    {
        return $this->belongsTo(User::class, 'author_id');
    }
    public function comments(): HasMany
    {
        return $this->hasMany(Comment::class);
    }
}

A migração para a tabela posts:

// database/migrations/create_posts_table.php
// ... Código da migração ...

E o modelo e a migração para Comment são definidos de maneira semelhante.

Lembre-se de executar as migrações para criar as tabelas no banco de dados:

php artisan migrate

Definindo o Esquema GraphQL

Com os modelos e migrações configurados, é hora de definir o esquema GraphQL. No arquivo graphql/schema.graphql, definimos os tipos User, Post e Comment e as operações de consulta:

type Query {
  posts: [Post!]! @all
  post(id: Int! @eq): Post @find
}
type User {
  id: ID!
  name: String!
  email: String!
  created_at: DateTime!
  updated_at: DateTime!
  posts: [Post!]! @hasMany
}
type Post {
  id: ID!
  title: String!
  content: String!
  author: User! @belongsTo
  comments: [Comment!]! @hasMany
}
type Comment {
  id: ID!
  reply: String!
  post: Post! @belongsTo
}

Então, no esquema, definimos dois tipos de consulta: posts para recuperar todas as postagens e post para recuperar uma postagem por ID. Além disso, definimos os tipos de dados User, Post e Comment, juntamente com suas relações.

Testando a API

Agora que nossa API está configurada, podemos testá-la usando o GraphiQL. Você pode executar a seguinte consulta para obter uma lista de todas as postagens, incluindo os detalhes do autor e os comentários:

{
  posts {
    id
    title
    author {
      name
    }
    comments {
      id
      reply
    }
  }
}

Ao executar esta consulta no GraphiQL, você deve receber uma lista de todas as postagens, seus autores e os comentários associados.

Este é apenas o começo. Dessa forma, com uma API GraphQL em funcionamento, você pode estender sua funcionalidade adicionando paginação, validação de entrada e muito mais.

Saiba mais: ferramentas para testar a velocidade do seu site

Próximos Passos

Então, a aplicação que construímos pode precisar de mais recursos. Aqui estão algumas ideias sobre

o que você pode adicionar para aprender mais sobre o Lighthouse:

  • Adicione paginação aos campos.
  • Crie e atualize modelos Eloquent.
  • Valide as entradas enviadas para o servidor.

Portanto, com as ferramentas poderosas do Laravel e do Lighthouse, você tem o controle total sobre sua API GraphQL e pode criar aplicativos flexíveis e eficazes.

COMPARTILHAR:
brayan

Brayan Monteiro

Bacharel em Sistemas de Informação pela Faculdade Maurício de Nassau e desenvolvedor PHP. Além de programador, produzo conteúdo e gerencio blogs. Sou especialista em desenvolvimento de software, SEO de sites e em negócios digitais.