Biblioteca GraphQL para Go (Golang) — guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Biblioteca GraphQL Go (Golang) — una potente herramienta para crear API



GraphQL es un lenguaje de consultas para API que permite a los clientes solicitar solo los datos que realmente necesitan. En el ecosistema de Go (Golang), una de las bibliotecas más populares para trabajar con GraphQL es gqlgen (GraphQL Go Generate). Esta biblioteca permite crear servidores GraphQL con seguridad de tipos con una cantidad mínima de código repetitivo. En este artículo, analizaremos en detalle gqlgen, su instalación, configuración y ejemplos de uso.



¿Qué es gqlgen?



gqlgen es un generador de código para Go que crea automáticamente resolutores y tipos basados en su esquema GraphQL. Las principales ventajas son:



  • Seguridad de tipos — todos los tipos se verifican en tiempo de compilación
  • Mínimo código repetitivo — la biblioteca genera la mayor parte del código por usted
  • Flexibilidad — soporte para suscripciones, mutaciones y consultas complejas
  • Rendimiento — alta velocidad de operación, característica de Go


Instalación de gqlgen



Para comenzar, instale la biblioteca y la utilidad de línea de comandos:



go get github.com/99designs/gqlgengo run github.com/99designs/gqlgen init


El comando init creará una estructura básica de proyecto con los archivos schema.graphqls, gqlgen.yml y el código generado.



Estructura del proyecto



Después de la inicialización, obtendrá la siguiente estructura:



my-graphql-app/├── gqlgen.yml          # Configuración del generador├── graph/│   ├── schema.graphqls # Esquema GraphQL│   ├── resolver.go     # Resolutores (su código)│   └── models_gen.go   # Modelos generados (no editar)├── server.go           # Punto de entrada└── go.mod


Escritura del esquema GraphQL



Ejemplo de archivo schema.graphqls para un blog simple:



type Query {  posts: [Post!]!  post(id: ID!): Post}

type Mutation { createPost(input: PostInput!): Post! deletePost(id: ID!): Boolean!}

type Post { id: ID! title: String! content: String! author: String! createdAt: Time!}

input PostInput { title: String! content: String! author: String!}

scalar Time


Generación de código



Después de describir el esquema, ejecute:



go run github.com/99designs/gqlgen generate


Esto creará los archivos models_gen.go y generated.go con los tipos e interfaces de los resolutores.



Implementación de resolutores



Ahora necesita implementar la lógica en resolver.go:



package graph

import ( "context" "time")

// Modelo de datostype Post struct { ID string `json:"id"` Title string `json:"title"` Content string `json:"content"` Author string `json:"author"` CreatedAt time.Time `json:"createdAt"`}

// Almacenamiento en memoriavar posts = []*Post{ { ID: "1", Title: "Introducción a GraphQL", Content: "GraphQL es un lenguaje de consultas...", Author: "Iván Petrov", CreatedAt: time.Now(), },}

// Resolutor para Query.postsfunc (r *queryResolver) Posts(ctx context.Context) ([]*Post, error) { return posts, nil}

// Resolutor para Query.postfunc (r *queryResolver) Post(ctx context.Context, id string) (*Post, error) { for _, post := range posts { if post.ID == id { return post, nil } } return nil, nil}

// Resolutor para Mutation.createPostfunc (r *mutationResolver) CreatePost(ctx context.Context, input PostInput) (*Post, error) { newPost := &Post{ ID: fmt.Sprintf("%d", len(posts)+1), Title: input.Title, Content: input.Content, Author: input.Author, CreatedAt: time.Now(), } posts = append(posts, newPost)

Recommendations