Skip to content

¿Qué es Inverse Model? ​

Inverse Model es un módulo de NestJS que convierte una base de datos existente en una API GraphQL. Le das una cadena de conexión; al arrancar lee cada tabla o colección, con sus columnas, claves y claves foráneas, y sirve un schema GraphQL para leer y escribir en todas ellas.

ts
@Module({
  imports: [InverseModelModule.forRoot({ url: process.env.DATABASE_URL! })],
})
export class AppModule {}

Es database-first: la base de datos es la fuente de verdad, y la API la sigue. No hay entidades, DTOs ni resolvers que escribir, y nunca se migra ni se sincroniza nada: la librería solo lee el schema.

Cuándo usarlo ​

  • Herramientas internas y paneles de administración que necesitan leer y editar datos que ya existen.
  • Modernizar una base de datos heredada detrás de una API tipada sin reescribirla.
  • Prototipos que necesitan un backend funcional en minutos.
  • Una API de datos dentro de una app NestJS existente, junto a tus propios módulos, guards y resolvers.

Qué genera ​

Para cada tabla o colección:

QueriesUna lista con filtros, orden y limit/offset, un conteo, una búsqueda por clave primaria y una connection estilo Relay con cursores.
MutationsCrear, actualizar, eliminar, upsert, y crear y eliminar en batch.
RelacionesUn campo a ambos lados de cada clave foránea, incluidas las claves compuestas, agrupado en batch por petición.

Consulta La API generada para ver su forma completa.

Cómo se compara ​

Herramientas como Hasura o PostGraphile se ejecutan como un servidor aparte con su propio formato de configuración. Inverse Model es una librería que se ejecuta dentro de tu proceso NestJS, configurada en TypeScript en forRoot, así que comparte el ciclo de vida, la inyección de dependencias, el logging y el despliegue de tu app. También cubre bases de datos que esas herramientas soportan de forma parcial o no soportan, como SQL Server y MongoDB.

Bases de datos soportadas ​

Base de datosURLDriver
PostgreSQLpostgres://user:pass@host:5432/dbpg
MySQLmysql://user:pass@host:3306/dbmysql2
MariaDBmariadb://user:pass@host:3306/dbmysql2
SQL Servermssql://user:pass@host:1433/dbmssql
MongoDBmongodb://host:27017/db o mongodb+srv://…mongodb

Cada base de datos se prueba en CI con cada cambio, tanto directamente como a través de la API GraphQL completa en Docker. Consulta Bases de datos para ver en qué se diferencian.

Publicado bajo la licencia MIT.