[tidy-go-common] - Protobuf como SSOT en Go: Estandarizando Tipos Compartidos en un Ecosistema Modular

Introducción
tidy-go-common
es un proyecto diseñado para proporcionar tipos y funciones globales reutilizables en Go, asegurando que múltiples aplicaciones dentro del ecosistema puedan compartir estructuras de datos consistentes. Para garantizar coherencia y sincronización, se ha establecido Protocol Buffers (Protobuf) como la fuente única de verdad (SSOT) para definir estos tipos de datos.
La arquitectura de este ecosistema se basa en la separación de responsabilidades entre distintos proyectos:
tidy-proto-common
: Contiene las definiciones.proto
centrales, utilizadas como base común para generar tipos en Go y TypeScript.tidy-go-common
: Consumetidy-proto-common
para generar tipos en Go (types.pb.go
), los cuales son utilizados por múltiples aplicaciones en Go.tidy-ts-common
: Consumetidy-proto-common
para generar los equivalentes en TypeScript, utilizados por los frontends.proto-business-app1
: Define estructuras.proto
específicas parabusiness-app1
.go-business-app1
: Backend en Go parabusiness-app1
, que genera sus propios tipos a partir deproto-business-app1
.ts-business-app1
: Frontend en TypeScript que genera sus tipos desdeproto-business-app1
.Otros proyectos (
business-appN
): Siguen el mismo esquema, generando sus estructuras en Go y TypeScript a partir de sus propios.proto
.
De este modo, tidy-go-common
y cada business-appN
generan sus propios archivos .pb.go
, mientras que tidy-proto-common
y proto-business-appN
quedan disponibles para ser utilizados tanto por Go como por TypeScript.
Justificación del Uso de Protobuf
Unificación de Tipos: Los
.proto
entidy-proto-common
yproto-business-appN
aseguran que los modelos en Go y TypeScript sean consistentes y sin duplicaciones.Sincronización Garantizada: Tanto
tidy-go-common
comogo-business-appN
generan sus tipos a partir de archivos.proto
, asegurando estructuras idénticas en todas las aplicaciones.Automatización del Mantenimiento: Las modificaciones en un
.proto
se propagan automáticamente a los modelos generados en Go y TypeScript sin necesidad de ajustes manuales.Interoperabilidad Multilenguaje: Protobuf permite generar código para múltiples lenguajes sin reescribir estructuras manualmente.
Implementación en tidy-go-common
La estructura de tidy-go-common
refleja su función como repositorio de tipos compartidos en Go. A diferencia de otros proyectos, tidy-go-common no contiene archivos .proto
propios, sino que consume los de tidy-proto-common
:
tidy-go-common/
├── types/ # Tipos generados para Go
│ ├── types.pb.go
│ ├── pagination.pb.go
│ ├── queryparams.pb.go
├── codegen/ # Generadores
├── go.mod
├── README.md
Consumo de
tidy-proto-common
como SSOT:tidy-go-common
no define.proto
, sino que genera sus tipos en Go (.pb.go
) a partir detidy-proto-common
.Generación Automática de Código en Go: Se utiliza
protoc
para convertir los.proto
detidy-proto-common
en archivos.pb.go
, evitando errores manuales en la definición de estructuras.Paquete
types/
: Los archivos generados se agrupan entypes/
, permitiendo importaciones claras y concisas dentro de los proyectos Go:import "github.com/mi-org/tidy-go-common/types" var p types.Pagination = types.Pagination{Page: 1, Limit: 10}
Generación Independiente para Frontend: Los frontends generan sus propios tipos en TypeScript directamente desde
tidy-proto-common
yproto-business-appN
, sin depender detidy-go-common
.Facilitación del Consumo en Backend: Los servicios de negocio (
go-business-appN
) generan sus propios archivos.pb.go
desdeproto-business-appN
, permitiendo una estructura modular sin dependencias innecesarias entre proyectos.
Beneficios Esperados
Menos errores en la comunicación entre sistemas.
Desarrollo más eficiente al evitar definiciones manuales de tipos.
Escalabilidad hacia nuevos lenguajes sin modificar la lógica existente.
Mantenimiento más simple con un único punto de actualización en
tidy-proto-common
yproto-business-appN
.
Conclusión
El uso de Protobuf como SSOT en tidy-go-common permite mantener tipos reutilizables en Go, garantizando coherencia en todo el ecosistema. Al separar tidy-proto-common
de las implementaciones de negocio (proto-business-appN
), se logra una estructura flexible donde cada equipo puede generar sus modelos sin acoplamientos innecesarios.
Este esquema facilita la expansión de la arquitectura, permitiendo que tanto nuevos proyectos de backend como de frontend consuman los mismos tipos de manera eficiente y sincronizada, asegurando una integración robusta sin redundancias innecesarias.
Subscribe to my newsletter
Read articles from Gus directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
