# Quiz de la fase 7: API Gateway, API-First, Arquitectura Hexagonal Enterprise y Sagas

> 10 afirmaciones de verdadero o falso, con la respuesta explicada, sobre los días de esta fase del plan JavaMastery.

Versión interactiva: https://aprende-java.webs-economicas.es/quiz/fase-7/

## Afirmaciones

### 1. Un API Gateway puede centralizar el enrutado, la autenticación y la limitación de peticiones.

**Respuesta:** Verdadero. Es la puerta de entrada única: aplica una vez las preocupaciones transversales en lugar de repetirlas en cada servicio.

**Para recordarlo:** Lo que necesitan todos los servicios (autenticación, rutas, límites) va una sola vez en el gateway.

Se estudia en el [día 26: API Gateway, API-First Design y Contratos OpenAPI 3.1](https://aprende-java.webs-economicas.es/dias/api-gateway-openapi.md).

### 2. En API-First se escribe primero el código y después se genera el contrato OpenAPI.

**Respuesta:** Falso. Es al revés: primero se acuerda el contrato y a partir de él se genera el código (interfaces, clientes, mocks). Lo descrito es code-first.

**Para recordarlo:** API-First: primero el contrato, después el código.

Se estudia en el [día 26: API Gateway, API-First Design y Contratos OpenAPI 3.1](https://aprende-java.webs-economicas.es/dias/api-gateway-openapi.md).

### 3. SpringDoc genera la especificación OpenAPI a partir de los controladores de Spring.

**Respuesta:** Verdadero. La expone en `/v3/api-docs` y sirve Swagger UI. Es el enfoque code-first.

**Para recordarlo:** SpringDoc = documentación generada desde tu código, en `/v3/api-docs` y Swagger UI.

Se estudia en el [día 26: API Gateway, API-First Design y Contratos OpenAPI 3.1](https://aprende-java.webs-economicas.es/dias/api-gateway-openapi.md).

### 4. La versión clásica de Spring Cloud Gateway está construida sobre Spring WebFlux y Project Reactor.

**Respuesta:** Verdadero. Por eso sus filtros son reactivos. Hoy también existe una variante sobre Spring MVC.

**Para recordarlo:** El Spring Cloud Gateway clásico es reactivo: sus filtros no deben bloquear.

Se estudia en el [día 26: API Gateway, API-First Design y Contratos OpenAPI 3.1](https://aprende-java.webs-economicas.es/dias/api-gateway-openapi.md).

### 5. En arquitectura hexagonal, el dominio define los puertos de salida y los adaptadores los implementan.

**Respuesta:** Verdadero. Por ejemplo, el dominio declara `OrderRepository` y un adaptador JPA lo implementa sin que el dominio sepa de JPA.

**Para recordarlo:** El dominio declara la interfaz; la infraestructura la implementa.

Se estudia en el [día 27: Arquitectura Hexagonal (Ports & Adapters) y Clean Architecture](https://aprende-java.webs-economicas.es/dias/arquitectura-hexagonal-clean.md).

### 6. Una saga garantiza atomicidad ACID entre varios microservicios.

**Respuesta:** Falso. Cada paso es una transacción local. Si algo falla, se ejecutan compensaciones: el resultado final es consistencia eventual, no ACID.

**Para recordarlo:** Saga = pasos locales + compensaciones. Piensa en «deshacer», no en «rollback».

Se estudia en el [día 28: Arquitecturas Distribuidas: Sagas, Circuit Breaker, Resiliencia y Librerías Spring Boot](https://aprende-java.webs-economicas.es/dias/sagas-circuit-breaker-resiliencia.md).

### 7. En una saga por coreografía, un orquestador central le dice a cada servicio qué hacer.

**Respuesta:** Falso. Eso es orquestación. En la coreografía cada servicio reacciona a los eventos de los demás, sin un coordinador.

**Para recordarlo:** Coreografía: cada servicio reacciona a eventos. Orquestación: un director da las órdenes.

Se estudia en el [día 28: Arquitecturas Distribuidas: Sagas, Circuit Breaker, Resiliencia y Librerías Spring Boot](https://aprende-java.webs-economicas.es/dias/sagas-circuit-breaker-resiliencia.md).

### 8. Con el circuit breaker abierto, se deja de llamar al servicio que falla y se responde con el fallback durante un tiempo.

**Respuesta:** Verdadero. Pasado ese tiempo pasa a semiabierto, deja pasar unas llamadas de prueba y decide si vuelve a cerrarse.

**Para recordarlo:** Cerrado, abierto, semiabierto: corta las llamadas al servicio que falla y prueba de vez en cuando.

Se estudia en el [día 28: Arquitecturas Distribuidas: Sagas, Circuit Breaker, Resiliencia y Librerías Spring Boot](https://aprende-java.webs-economicas.es/dias/sagas-circuit-breaker-resiliencia.md).

### 9. Spring Boot Actuator expone endpoints como `/actuator/health` para conocer el estado de la aplicación.

**Respuesta:** Verdadero. Kubernetes usa los grupos `liveness` y `readiness` de ese endpoint en sus probes.

**Para recordarlo:** Actuator = endpoints de salud y métricas listos para usar.

Se estudia en el [día 28: Arquitecturas Distribuidas: Sagas, Circuit Breaker, Resiliencia y Librerías Spring Boot](https://aprende-java.webs-economicas.es/dias/sagas-circuit-breaker-resiliencia.md).

### 10. Renombrar un campo en la respuesta de una API pública es un cambio compatible hacia atrás.

**Respuesta:** Falso. Los clientes que leen el nombre antiguo dejan de funcionar. Se añade el campo nuevo y el antiguo se depreca, o se publica una versión nueva.

**Para recordarlo:** En una API pública, añadir campos sí; renombrar o quitar, no sin una versión nueva.

Se estudia en el [día 26: API Gateway, API-First Design y Contratos OpenAPI 3.1](https://aprende-java.webs-economicas.es/dias/api-gateway-openapi.md).

