Marco de Goa

Design-first API development with automatic code generation for Go microservices.

Resumen

Goa es un framework de diseño para construir microservicios en Go. Define tu API usando el potente DSL de Goa, y deja que Goa genere el código, la documentación y las librerías cliente.

Características principales

  • Diseño-Primero - Define tu API usando un potente DSL antes de escribir el código de implementación
  • Generación de código - Genera automáticamente código de servidor, cliente y documentación
  • Seguridad de tipos - Seguridad de tipos de extremo a extremo desde el diseño hasta la implementación
  • Multi-Transporte - Soporte para HTTP y gRPC desde un único diseño
  • Validación - Validación de peticiones integrada basada en su diseño
  • Documentación - Especificaciones OpenAPI autogeneradas

Cómo funciona Goa

Goa sigue un flujo de trabajo en tres fases que separa el diseño de la API de la implementación, garantizando la coherencia y reduciendo la repetición de tareas.

Goa three-phase workflow: Design → Generate → Implement

Fase 1: Diseño (Tú escribes)

En la fase de diseño, defines tu API usando el DSL de Goa en archivos Go (típicamente en un directorio design/):

  • Tipos: Define estructuras de datos con reglas de validación
  • Servicios: Agrupan métodos relacionados
  • Métodos: Definir operaciones con cargas útiles y resultados
  • Transportes: Asignar métodos a puntos finales HTTP y/o procedimientos gRPC
  • Seguridad: Definir esquemas de autenticación y autorización

Lo que creas: design/*.go archivos que contienen la especificación de tu API como código Go.

Fase 2: Generar (Automatizado)

Ejecuta goa gen para generar automáticamente todo el código boilerplate:

goa gen myservice/design

Lo que crea Goa (en el directorio gen/):

  • Andamiaje de servidor con enrutamiento y validación de peticiones
  • Librerías cliente seguras
  • Especificaciones OpenAPI/Swagger
  • Definiciones de búfer de protocolo (para gRPC)
  • Codificadores/decodificadores de transporte

Importante: Nunca edites archivos en gen/ - se regeneran cada vez que ejecutas goa gen.

Fase 3: Implementar (Usted escribe)

Escribe tu lógica de negocio implementando las interfaces de servicio generadas:

// service.go - You write this
type helloService struct{}

func (s *helloService) SayHello(ctx context.Context, p *hello.SayHelloPayload) (string, error) {
    return fmt.Sprintf("Hello, %s!", p.Name), nil
}

Lo que creas: Archivos de implementación de servicios que contienen tu lógica de negocio real.

What’s Hand-Written vs Auto-Generated

Tu EscribesGoa Genera
design/*.go - Definiciones de APIgen/ - Todo el código de transporte
service.go - Lógica de negocioEspecificaciones OpenAPI
cmd/*/main.go - Puesta en marcha del servidorDefiniciones de búfer de protocolo
Pruebas y middleware personalizadoValidación de peticiones

Guías de documentación

GuíaDescripción~Tokens
Instalación de Goa y creación de su primer servicio
DSL ReferenceReferencia completa del lenguaje de diseño de Goa~2,900
Generación de CódigoEntendiendo el proceso de generación de código de Goa~2,100
Guía HTTPCaracterísticas del transporte HTTP, enrutamiento y patrones~1,700
Guía gRPCCaracterísticas del transporte gRPC y streaming~1.800

| Interceptores](interceptors/) Interceptores y patrones de middleware | ~1.400 | Producción | Observabilidad, seguridad y despliegue | ~1.300 |

Sección total: ~14.500 fichas

Ejemplo rápido

package design

import . "goa.design/goa/v3/dsl"

var _ = Service("hello", func() {
    Method("sayHello", func() {
        Payload(String, "Name to greet")
        Result(String, "Greeting message")
        HTTP(func() {
            GET("/hello/{name}")
        })
    })
})

Generar y ejecutar:

goa gen hello/design
goa example hello/design
go run ./cmd/hello

Empezando

Empieza con la guía Quickstart para instalar Goa y construir tu primer servicio en minutos.

Para una cobertura completa de DSL, consulte la Referencia DSL.