Skip to content

❌ 404 Not Found a través del gateway por faltar /v1 en la ruta ​

Python para Backend · Clase 7 · Probando api_gateway con 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/v1 se 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 ​