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
```html

Introdução ao GraphQL e Go



GraphQL é uma linguagem de consulta para APIs, desenvolvida pelo Facebook. Diferente do REST, onde cada endpoint retorna uma estrutura de dados fixa, o GraphQL permite que o cliente solicite apenas os campos de que precisa. Isso reduz o número de requisições e o volume de dados transferidos. Go (Golang) é uma excelente escolha para criar APIs de alto desempenho devido à sua velocidade, tipagem estática e suporte nativo à concorrência.



Neste tutorial, criaremos uma API GraphQL simples em Go para gerenciar uma lista de livros. Você aprenderá como configurar o servidor, definir o schema, escrever resolvers e executar queries e mutations.



Configuração do projeto e instalação das bibliotecas



Inicialização do módulo Go



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


Instalação da biblioteca graphql-go



Usaremos a biblioteca popular graphql-go/graphql. Instale-a usando o comando:



go get github.com/graphql-go/graphqlgo get github.com/graphql-go/handler


A primeira biblioteca fornece o núcleo do GraphQL, e a segunda fornece um handler HTTP para integração com o servidor web.



Criação da estrutura de dados e do schema GraphQL



Definição do tipo Book



Crie o arquivo main.go e comece definindo a estrutura de dados do livro e o tipo GraphQL correspondente:



package main

import ( "github.com/graphql-go/graphql" "github.com/graphql-go/handler" "net/http")

// Book — estrutura de dados do livrotype Book struct { ID string `json:"id"` Title string `json:"title"` Author string `json:"author"` Year int `json:"year"`}

// Definimos o tipo GraphQL para o livrovar bookType = graphql.NewObject( graphql.ObjectConfig{ Name: "Book", Fields: graphql.Fields{ "id": &graphql.Field{Type: graphql.String}, "title": &graphql.Field{Type: graphql.String}, "author": &graphql.Field{Type: graphql.String}, "year": &graphql.Field{Type: graphql.Int}, }, },)


Criação da Query raiz (Query)



Vamos adicionar um armazenamento in-memory de livros e uma query raiz para obter a lista e um livro específico:



// Simulação de banco de dadosvar books = []Book{    {ID: "1", Title: "Guerra e Paz", Author: "Liev Tolstói", Year: 1869},    {ID: "2", Title: "Crime e Castigo", Author: "Fiódor Dostoiévski", Year: 1866},    {ID: "3", Title: "O Mestre e a Margarida", Author: "Mikhail Bulgákov", Year: 1967},}

// Query raizvar queryType = graphql.NewObject( graphql.ObjectConfig{ Name: "Query", Fields: graphql.Fields{ "books": &graphql.Field{ Type: graphql.NewList(bookType), Resolve: func(p graphql.ResolveParams) (interface{}, error) { return books, nil }, }, "book": &graphql.Field{ Type: bookType, Args: graphql.FieldConfigArgument{ "id": &graphql.ArgumentConfig{Type: graphql.String}, }, Resolve: func(p graphql.ResolveParams) (interface{}, error) { id, _ := p.Args["id"].(string) for _, book := range books { if book.ID == id { return book, nil } } return nil, nil }, }, }, },)


Adicionando Mutations



Mutations permitem modificar dados. Vamos adicionar a capacidade de incluir novos livros:



// Mutation para adicionar um livrovar mutationType = graphql.NewObject(```                

Blogs

Book Recommendations