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 initEl 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.modEscritura 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 TimeGeneración de código
Después de describir el esquema, ejecute:
go run github.com/99designs/gqlgen generateEsto 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) También en la biblioteca
Monitoreo de aplicaciones Rust: Resumen de herramientas y bibliotecas
Prisma para TypeScript: guía completa con ejemplos
Express.js para JavaScript (Node.js): guía completa con ejemplos
Generación de PDF en JavaScript (Node.js): bibliotecas y herramientas para crear PDF
Biblioteca estándar de Swift: revisión completa para iOS/macOS