GraphQL en Go: Guía completa sobre la biblioteca gqlgen

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 gqlgen para Go (Golang): Creación de API GraphQL



GraphQL se ha convertido en el estándar de facto para construir APIs modernas gracias a su flexibilidad y eficiencia. En el ecosistema de Go (Golang), una de las bibliotecas más potentes y populares para trabajar con GraphQL es gqlgen. Proporciona a los desarrolladores una forma conveniente de definir esquemas, generación automática de código repetitivo y alto rendimiento.



¿Qué es gqlgen y por qué elegirla?



gqlgen (abreviatura de "graphql generator") es una biblioteca para Go que construye un servidor GraphQL basado en un esquema. Su característica principal es el enfoque code-first: describes el esquema en un archivo .graphql y la biblioteca genera todo el código Go necesario (estructuras, interfaces para resolvers). Esto elimina la escritura repetitiva de código boilerplate y reduce la probabilidad de errores.



Ventajas clave:

  • Generación automática de código: a partir del esquema se crean tipos, métodos e interfaces de resolvers.
  • Seguridad de tipos: todos los tipos se verifican en la etapa de compilación de Go.
  • Rendimiento: la biblioteca está optimizada para trabajar en sistemas de alta carga.
  • Soporte para suscripciones (Subscriptions): posibilidad de implementar funcionalidad en tiempo real a través de WebSocket.
  • Flexibilidad: se integra fácilmente con bases de datos, cachés y otros servicios.


Instalación y configuración



Para empezar, es necesario instalar gqlgen e inicializar el proyecto:



// Instalación de la bibliotecago get github.com/99designs/gqlgen@latest

// Inicialización del esqueleto del proyectogo run github.com/99designs/gqlgen init


Después de ejecutar el comando init, se creará la estructura del proyecto:

  • graph/schema.graphqls — archivo con el esquema.
  • graph/resolver.go — resolver raíz.
  • graph/schema.resolvers.go — plantillas generadas para los resolvers.
  • server.go — punto de entrada para iniciar el servidor.


Definición del esquema GraphQL



En el archivo schema.graphqls se describen los tipos, consultas y mutaciones. Ejemplo de esquema para un sistema de blogs:



# Definición del tipo Usertype User {  id: ID!  name: String!  email: String!  posts: [Post!]!}

# Definición del tipo Posttype Post { id: ID! title: String! content: String! author: User!}

# Tipo raíz Querytype Query { user(id: ID!): User users: [User!]! post(id: ID!): Post posts: [Post!]!}

# Tipo raíz Mutationtype Mutation { createUser(name: String!, email: String!): User! createPost(title: String!, content: String!, authorId: ID!): Post!}


Generación de código e implementación de resolvers



Después de describir el esquema, ejecutamos la generación de código:



go run github.com/99designs/gqlgen generate


La biblioteca creará archivos con estructuras e interfaces de Go. Ahora es necesario implementar los resolvers — funciones que devuelven datos. Ejemplo de implementación de un resolver para obtener un usuario:



// graph/schema.resolvers.go (ejemplo de implementación)func (r *queryResolver) User(ctx context.Context, id string) (*model.User, error) {    // Lógica para obtener el usuario de la BD    user, err := r.db.GetUserByID(ctx, id)    if err != nil {        return nil, err    }    return user, nil}

func (r *queryResolver) Users(ctx context.Context) ([]*model.User, error) { // Lógica para obtener la lista de todos los usuarios return r.db.GetAllUsers(ctx)}

// Resolver para el campo posts en User (resolución de datos anidados)func (r *userResolver) Posts(ctx context.Context, obj *model.User) ([]*model.Post, error) { // obj es el objeto User para el cual se solicitan los posts

Recommendations