Una demostración completa (Proof of Concept) que incluye una API REST, un cliente frontend y herramientas de desarrollo para gestionar información sobre mascotas utilizando TypeScript, OpenAPI y tecnologías modernas.
Este proyecto implementa una solución completa que incluye:
- API REST basada en especificación OpenAPI
- Endpoints para gestionar mascotas (listar todas, obtener por ID)
- Implementación con Fastify y generación automática de tipos TypeScript
- Aplicación React con TypeScript
- Cliente SDK generado automáticamente desde la especificación OpenAPI
- Integración con TanStack Query para gestión de estado del servidor
- Soporte para mocking con MSW (Mock Service Worker)
- Plugin personalizado MSW para generar mocks tipados
- Plugin de especificación para generar configuración de Fastify
- Configuración completa de linting, formatting y testing
- Node.js (versión recomendada: 18.x o superior)
- npm
-
Clone el repositorio:
git clone git@github.com:540/openapi-typescript.git cd openapi-typescript -
Instale las dependencias:
npm install
npm run generate:serverEste comando genera tipos TypeScript, configuración de Fastify y otros archivos necesarios para el backend.
npm run generate:clientEste comando genera el SDK del cliente, tipos TypeScript, hooks de React Query y configuración de MSW para el frontend.
npm run start:serverEl servidor se iniciará en http://localhost:3000 por defecto con recarga automática.
npm run start:frontEl frontend se iniciará en http://localhost:5173 por defecto.
Para usar datos simulados en lugar de la API real, cree un archivo .env en la raíz del proyecto:
VITE_ENABLE_MSW=true- GET /healthcheck: Comprueba el estado del servidor
- GET /pets: Obtiene una lista de todas las mascotas
- GET /pets/{petId}: Obtiene una mascota específica por su ID
npm run start:server- Ejecuta el servidor con recarga automáticanpm run start:front- Ejecuta el frontend en modo desarrollonpm run generate:server- Genera código del servidor desde OpenAPInpm run generate:client- Genera código del cliente desde OpenAPInpm run build:front- Construye el frontend para producciónnpm run lint- Ejecuta ESLint en todo el proyectonpm run lint:fix- Ejecuta ESLint y corrige errores automáticamentenpm run format- Formatea el código con Prettiernpm run format:check- Verifica el formato del códigonpm run test- Ejecuta los tests con Jest
├── openapi-ts.server.config.ts # Configuración para generar código del servidor
├── openapi-ts.client.config.ts # Configuración para generar código del cliente
├── openapi.yaml # Especificación OpenAPI de la API
├── package.json # Dependencias y scripts
├── tsconfig.json # Configuración base de TypeScript
├── tsconfig.server.json # Configuración específica del servidor
├── tsconfig.frontend.json # Configuración específica del frontend
├── vite.config.ts # Configuración de Vite para el frontend
├── jest.config.js # Configuración de Jest para testing
├── eslint.config.js # Configuración de ESLint
├── .prettierrc.js # Configuración de Prettier
├── plugins/ # Plugins personalizados para generación de código
│ ├── spec/ # Plugin para generar configuración de Fastify
│ └── msw/ # Plugin para generar mocks de MSW
├── src/
│ ├── server/ # Implementación del servidor
│ │ ├── api.ts # Configuración de la API
│ │ ├── index.ts # Punto de entrada del servidor
│ │ └── controllers/ # Controladores para cada endpoint
│ ├── frontend/ # Aplicación React
│ │ ├── main.tsx # Punto de entrada del frontend
│ │ ├── App.tsx # Componente principal
│ │ ├── index.html # Template HTML
│ │ ├── msw/ # Configuración de Mock Service Worker
│ │ │ ├── handlers.ts # Handlers de MSW
│ │ │ ├── browser.ts # Configuración para navegador
│ │ │ ├── node.ts # Configuración para Node.js
│ │ │ └── index.ts # Exportaciones principales
│ │ └── public/ # Archivos estáticos
│ │ └── mockServiceWorker.js # Worker de MSW
│ └── generated/ # Código generado automáticamente
│ ├── server/ # Tipos y configuración del servidor
│ └── client/ # SDK del cliente, tipos y hooks
- TypeScript: Para desarrollo con seguridad de tipos
- Fastify: Framework web rápido para Node.js
- OpenAPI: Para la definición y documentación de la API
- @hey-api/openapi-ts: Para generar código TypeScript desde la especificación OpenAPI
- React: Biblioteca para interfaces de usuario
- TypeScript: Para desarrollo con seguridad de tipos
- Vite: Herramienta de construcción y desarrollo rápido
- TanStack Query: Para gestión de estado del servidor
- MSW (Mock Service Worker): Para mocking de APIs
- ESLint: Para análisis estático de código
- Prettier: Para formateo automático de código
- Jest: Framework de testing con SWC para mayor velocidad
- Plugins personalizados: Para generación de código específico
- Edite el archivo
openapi.yamlpara modificar la especificación de la API - Ejecute
npm run generate:serverpara regenerar el código del servidor - Ejecute
npm run generate:clientpara regenerar el código del cliente - Implemente la lógica en los controladores correspondientes
- Añada la definición del nuevo endpoint en
openapi.yaml - Genere el código con
npm run generate:serverynpm run generate:client - Cree un nuevo controlador en
src/server/controllers/ - Añada el controlador al índice en
src/server/controllers/index.ts - Actualice los handlers de MSW en
src/frontend/msw/handlers.tssi es necesario
- Los componentes React están en
src/frontend/ - El SDK del cliente se genera automáticamente en
src/generated/client/ - Use los hooks de TanStack Query generados para las llamadas a la API
- Configure MSW para desarrollo local con
VITE_ENABLE_MSW=true
El proyecto incluye configuración para testing con Jest:
npm run testLos tests utilizan SWC para mayor velocidad y soporte para ESM.
Genera automáticamente tipos TypeScript y la función createOpenApiHttp tipada para MSW (Mock Service Worker). Este plugin convierte la especificación OpenAPI en interfaces TypeScript que definen exactamente qué endpoints están disponibles, qué parámetros aceptan, qué cuerpos de petición esperan y qué respuestas devuelven. Esto garantiza que los mocks en desarrollo sean completamente consistentes con la API real, evitando discrepancias entre el comportamiento simulado y el real.
Genera una representación TypeScript de la especificación OpenAPI completa como un objeto constante tipado. Este plugin convierte el archivo YAML/JSON de OpenAPI en código TypeScript que puede ser importado y utilizado por Fastify para configurar automáticamente rutas, validaciones y documentación. Permite que el servidor tenga acceso programático a toda la especificación de la API en tiempo de ejecución, facilitando la generación automática de rutas y validadores.
# Verificar código
npm run lint
npm run format:check
# Corregir automáticamente
npm run lint:fix
npm run format