Elegir espacio

Dos espacios

¿Qué quieres consultar?

Elige el espacio al que quieres entrar.

Biblioteca FastAPIComposición

Práctica focalizada · Bloque 3 · Unidad 3.1

EX-B3-01

Extraer el primer router sin cambiar el contrato

Una aplicación de expedientes ya tiene tests y tres operaciones públicas, pero main.py mezcla arranque, schemas, estado y rutas.

  • Escribir y ejecutar código
  • Refactor guiado
  • Media
  • Apoyo alto
  • Starter ejecutable

Cómo abordarla

Separa responsabilidades conservando el contrato

Ejecuta primero el baseline. Después modifica la frontera indicada, escribe una regresión positiva y otra negativa y conserva la salida real.

Evidencia objetivo: El diff mueve código, pero status, body, modelos de salida, operationId y paths públicos permanecen estables.

Abrir laboratorio de código

1. Descarga y arranca

2. Escribe y prueba

  1. Ejecuta los tests y registra las operaciones generadas por app.openapi().
  2. Completa el mapa de prefijos y el grafo de imports antes de mover código.
  3. Extrae schemas y un APIRouter de expedientes; conserva main.py como punto de composición.
  4. Ejecuta la misma regresión y explica cualquier diferencia antes de corregirla.

3. Demuestra el comportamiento

  • Árbol final y grafo de imports dirigido.
  • Diff acotado del refactor.
  • Evidencia de pytest y fingerprint OpenAPI antes y después.

La respuesta principal es tu código y sus pruebas. Usa este espacio solo para anotar la predicción inicial y el resultado observado.

Predicción breve antes de ejecutar

¿Qué paths deben quedar en decoradores y prefijos para que el contrato final no cambie, y qué import debe apuntar hacia el punto de composición?

Frontera que debes preservar

Contrato inicial: GET /health, POST /records y GET /records/{record_id}. El include no aporta prefijo adicional.

Comprueba estas tres cosas

  1. ¿Qué conjunto método/path existe antes de mover código?
  2. ¿Qué suma de prefijos produce cada URL final?
  3. ¿Qué import crearía una vuelta hacia main.py?

Anota predicción, comando ejecutado y diferencia observada; el código vive en tu workspace.

Sin respuesta guardada.

Pistas opcionales

Pista 1 · Conserva la suma
  • Si el router tiene prefix=/expedientes, el decorador de colección puede usar una cadena vacía.
  • El prefijo de include también participa aunque no esté en el archivo del router.
Pista 2 · Corta la vuelta
  • El módulo de rutas exporta router; main.py lo importa e incluye.
  • Un módulo inferior no necesita importar main.py para registrarse.
Profundización opcional

Extraer las operaciones de expedientes a APIRouter mediante un corte pequeño y demostrar compatibilidad HTTP y OpenAPI.

Contexto adicional

  • No añadas endpoints, capas ni modelos durante el refactor.
  • Conserva nombres públicos, status, bodies, response_model y operationId.
  • Haz pasar la regresión después de extraer un solo router.

Decisiones abiertas

  • Puedes usar imports absolutos o relativos, pero debes mantener una convención y explicar la dirección.
  • Puedes dejar /health en main.py o justificar un router operacional; no crees ese router solo por simetría.

Cómo revisar tu respuesta

  • Los tres pares método/path permanecen iguales.
  • Status, body y response_model pasan la regresión existente.
  • El router no importa la instancia app ni existe registro por efecto lateral.
  • La explicación identifica una decisión que deliberadamente quedó fuera.

Evidencia, revisión y reinicio

  • Predicción de rutas finales y grafo de imports antes del cambio.
  • Salida de pytest y conjunto método/path de OpenAPI antes y después.
  • Diff que mueve un grupo de operaciones sin añadir funcionalidad.

Revisión: con Codex, utilizando la evidencia y los criterios anteriores; no se publica una solución oficial.

Reinicio: Restaurar el módulo monolítico descargado y borrar los paquetes creados; no existe estado externo.