Apariencia
❌ 404 Not Found a través del gateway por faltar /v1 en la ruta
Python para Backend · Clase 7 · Probando
api_gatewaycon Postman (camino 🟢)
🩻 Contexto
Al mandar POST {{base_url_gateway}}/api/auth/login (con base_url_gateway = http://127.0.0.1:8000), Postman devolvía 404 Not Found:
json
{ "detail": "Not Found" }El Environment estaba bien (base_url_gateway apuntando al puerto correcto del gateway), y el mismo login sí funcionaba en el camino directo (base_url, puerto 8001) — la sospecha inicial de "problema del Environment" quedó descartada.
🔍 Causa
Faltaba /v1 en la ruta: el request usaba /api/auth/login en vez de /api/v1/auth/login. En api_gateway/app/main.py, todas las rutas del gateway llevan /api/v1 escrito a mano, directo en el path= de cada @app.api_route(...) — no es un prefijo separado ni algo configurable, es texto literal en cada decorador:
python
@app.api_route(path="/api/v1/auth/{path:path}", methods=["GET", "POST"], tags=["Proxy Auth"])
async def auth_proxy(path: str, request: Request):
return await proxy(request, settings.users_url, upstream_path=f"/api/v1/auth/{path}")Como el path real (/api/auth/login) no coincide con ningún @app.api_route(...) registrado, FastAPI ni siquiera llega a ejecutar proxy() — responde 404 directo, antes de que la petición se reenvíe a ningún microservicio.
💡 Este mismo
/api/v1se repite en cada uno de los 8 pares de rutas del gateway (/api/v1/users,/api/v1/users/{path:path},/api/v1/auth/{path:path},/api/v1/products,/api/v1/products/{path:path},/api/v1/orders,/api/v1/orders/{path:path}) — ver Clase 7 → sección 3. No hay una única variable que lo centralice; si algún día cambiara la versión de la API (/api/v2), habría que tocar las 8 rutas a mano.
✅ Solución
Usar la ruta completa, con /v1:
POST {{base_url_gateway}}/api/v1/auth/login📎 Apuntes relacionados
- Clase 7 — sección 3, API Gateway Pattern
- Clase 7 — Postman
{{baseUrl}}sin resolver + doble barra (otro error de URL mal armada en Postman, misma clase)