API GraphQL com Go: tutorial passo a passo para iniciantes

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 ao GraphQL e Go

GraphQL é uma linguagem de consulta para APIs que permite aos clientes obter exatamente os dados de que precisam, sem excessos. Diferente do REST, onde cada endpoint retorna uma estrutura de dados fixa, o GraphQL oferece flexibilidade e controle. Combinado com Go (Golang) — uma linguagem rápida, com segurança de tipos e simples — você obtém uma ferramenta poderosa para criar serviços web modernos.

Neste tutorial, criaremos uma API GraphQL simples em Go do zero. Você aprenderá a instalar dependências, descrever o esquema, implementar resolvers e iniciar o servidor. O artigo é voltado para iniciantes, portanto, todas as etapas são explicadas em detalhes.



1. Preparação do projeto e instalação de dependências

Antes de escrever código, certifique-se de ter o Go versão 1.18 ou superior instalado. Crie um novo diretório para o projeto e inicialize o módulo:

mkdir graphql-go-tutorialcd graphql-go-tutorialgo mod init graphql-go-tutorial


Escolha da biblioteca: gqlgen

Existem várias bibliotecas para trabalhar com GraphQL em Go. Usaremos o gqlgen — um popular gerador de código que cria tipos e resolvers com base no esquema. Instale-o:

go get github.com/99designs/gqlgen@latest


Inicialização do gqlgen

Execute o comando para criar os arquivos padrão:

go run github.com/99designs/gqlgen init

Este comando criará vários arquivos:

  • graph/schema.graphqls — arquivo de esquema GraphQL;
  • graph/resolver.go — esboço dos resolvers;
  • server.go — ponto de entrada do servidor;
  • gqlgen.yml — configuração de geração.


2. Descrição do esquema GraphQL

Abra o arquivo graph/schema.graphqls. Por padrão, já existe um exemplo com o tipo Todo. Vamos expandi-lo adicionando o tipo User e algumas consultas.

Substitua o conteúdo do arquivo pelo seguinte:

type User {    id: ID!    name: String!    email: String!}

type Todo { id: ID! text: String! done: Boolean! user: User!}

type Query { todos: [Todo!]! users: [User!]! user(id: ID!): User}

type Mutation { createTodo(text: String!, userId: ID!): Todo! markDone(id: ID!): Todo!}

Aqui definimos:

  • User — usuário com campos id, name, email.
  • Todo — tarefa com campos id, text, done e referência ao usuário.
  • Query — pontos de entrada para leitura de dados.
  • Mutation — operações para modificar dados.


3. Geração de código e implementação de resolvers

Após descrever o esquema, é necessário gerar o código Go. Execute:

go run github.com/99designs/gqlgen generate

Isso criará os arquivos models_gen.go e atualizará o resolver.go. Agora abra o graph/resolver.go.



Adicionando armazenamento de dados

Para simplificar, armazenaremos os dados em memória. Adicione a estrutura no resolver.go:

type Resolver struct {    Users []*model.User    Todos []*model.Todo}

Não se esqueça de importar o pacote model.



Implementação de consultas (Query)

Encontre os métodos gerados para Query. Vamos implementá-los:

func (r *queryResolver) Todos(ctx context.Context) ([]*model.Todo, error) {    return r.Resolver.Todos, nil}

func (r *queryResolver) Users(ctx context.Context) ([]*model.User, error) { return r.Resolver.Users, nil}

func (r *queryResolver) User(ctx context.Context, id string) (*model.User, error) { for _, u := range r.Resolver.Users { if u.ID == id { return u, nil } } return nil, fmt.Errorf("user not found")}

Blogs

Book Recommendations