Contenido del curso
Herramientas y Validación de APIs
- 5

Validación automática con Express OpenAPI Validator
07:19 min - 6

Validación automática con OpenAPI en Express
13:53 min - 7

Múltiples respuestas HTTP en OpenAPI
Viendo ahora - 8

Cómo la IA genera endpoints desde OpenAPI
09:36 min - 9

Esquemas reutilizables de productos en OpenAPI
09:15 min - 10

Endpoints de productos con esquemas reutilizables
05:36 min - 11

API First con IA: construye CRUD sin codificar
14:52 min
Versionado, Prototipado y Documentación
Validación y Pruebas de Contratos
Seguridad
Múltiples respuestas HTTP en OpenAPI
Resumen
Diseñar una API bajo el enfoque API First implica decidir, antes de escribir lógica, cómo se verán los puntos de entrada, los métodos disponibles y las respuestas posibles. Cuando defines un endpoint en OpenAPI con parámetros obligatorios y múltiples respuestas HTTP, garantizas validaciones claras y un contrato sólido entre quien consume y quien construye la API.
¿Cómo se define un endpoint con parámetro de ruta en OpenAPI?
Dentro del archivo OpenAPI, en la sección de paths, ya existen rutas como users y hello. La idea es agregar una nueva ruta que reciba un identificador para localizar un usuario específico [00:34].
La ruta queda como users/{id} y el primer método que defines es get, acompañado de una descripción clara: obtener un usuario por el ID. Esa descripción no es decoración; le dice a cualquier desarrollador o herramienta de documentación qué esperar de ese llamado.
¿Qué es API First? Es un enfoque donde defines el contrato de la API (rutas, métodos, parámetros, respuestas) antes de implementar el código, asegurando consistencia y validaciones desde el diseño.
¿Cómo se marca un parámetro como obligatorio y con tipo definido?
Dentro de parameters declaras que el dato viaja en el path, le asignas el name igual a id, lo marcas con required: true y le defines un schema con type: integer [01:08]. Con esos cuatro datos, OpenAPI ya sabe tres cosas críticas: dónde llega el valor, que es indispensable y qué tipo de dato debe respetar.
Esta combinación funciona como una validación temprana. Si alguien intenta llamar al endpoint sin el ID o con un tipo distinto, el contrato lo detecta antes de que la petición llegue a la lógica del servidor.
¿Cómo manejar múltiples respuestas HTTP en un mismo endpoint?
Un endpoint rara vez tiene una sola respuesta. Lo realista es contemplar al menos el caso de éxito y el caso donde el recurso no existe.
Respuesta 200 cuando el usuario existe
En responses defines el código 200 con la descripción "usuario encontrado". Dentro agregas content con application/json, un schema de tipo object y las propiedades que devuelves: el id con su tipo de dato y el name como string [01:54]. Así, quien consume la API sabe exactamente qué estructura recibirá cuando todo salga bien.
Respuesta 404 cuando el usuario no existe
Para cubrir el caso contrario, agregas el código 404 con la descripción "usuario no encontrado". También lleva content de tipo application/json, un schema tipo object y una propiedad message de tipo string que comunica el error de forma legible [02:33].
¿Por qué definir respuestas 404 en el contrato? Porque documentar los errores esperados permite que el cliente maneje cada escenario con código específico y no dependa de adivinar qué pasó en el servidor.
¿Qué elementos forman el contrato completo de un endpoint?
Al unir todo lo anterior, cada punto de entrada en tu especificación queda compuesto por:
- La ruta con su parámetro de path, por ejemplo
users/{id}. - El método HTTP, en este caso
get, con su descripción. - Los
parametersconname,in,requiredyschema. - Los
responsescon códigos como200y404, cada uno con sucontent,schemay propiedades.
Cada uno de esos bloques aporta información que herramientas de documentación, generadores de código y validadores leen para mantener coherencia entre lo que prometes y lo que entregas.
¿Cómo extender el endpoint con un método POST?
El reto natural es agregar un método post sobre la misma ruta users/{id} para actualizar el nombre del usuario basado en el ID [03:17]. Eso significa replicar la estructura de parameters para el ID, definir un cuerpo de petición con el nuevo name y declarar las respuestas posibles, incluyendo el caso exitoso y el escenario donde el usuario no existe.
¿Cómo resolverías la definición del requestBody y qué códigos de respuesta agregarías además del 200 y el 404? Cuéntame en los comentarios cómo estructurarías ese método.