Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

415
Vistas
¿Cómo puedo obtener la ruta de todas las rutas desde la API rápida?

Soy nuevo en FASTAPI y python. Necesito obtener todas las rutas en mi ruta raíz y mostrárselas al usuario. Sin embargo, no pude encontrar una manera de obtener todas las rutas recursivamente. La API está versionada con la ayuda de VersionedFastAPI Y el código actual no proporciona la ruta dentro de la versión, solo devuelve los genéricos. Código:

 app = FastAPI() router = APIRouter( tags=["utilities"] ) @router.get("/") def read_root(request: Request): url_list = [ route.path for route in request.app.routes ] return { "endpoints": set(url_list) } @app.get('/foo') @version(1) def foo(): return "foo V1" @app.get('/foo') @version(2) def foo(): return "foo V2" app = VersionedFastAPI(app, enable_latest=True, version_format='{major}', prefix_format='/v{major}') app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"] ) app.include_router(router)

Código para obtener la lista de rutas que se encuentra en \ ruta

 url_list = [ route.path for route in request.app.routes ] return { "endpoints": set(url_list) }

Esto devuelve solo ["/v1/openapi.json","/v2/docs","/openapi.json","/v2/openapi.json","/v2","/","/redoc","/v1","/docs","/docs/oauth2-redirect","/v1/docs","/latest"] Sin embargo, el punto final /foo se pierde aquí. Cualquier pista sobre esto ayudará.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Úselo como se muestra a continuación. Asegúrese de llamar a get_routes() antes de pasar la instancia de FastAPI a VersionedFastAPI. Además, en el siguiente ejemplo, hay un punto final (es decir, /greet ) sin versión. Por lo tanto, para asegurarse de que dichos puntos finales, si se encuentran en la API, se les asignará una versión, defina un valor predeterminado (también podría ser la última versión) cuando intente obtener la versión del punto final en version = getattr(route.endpoint, "_api_version", (2, 0)) . Al acceder a la documentación de la API en http://127.0.0.1:8000/v1/docs y http://127.0.0.1:8000/v2/docs , notará que /greet aparece en ambas versiones de la API; por lo tanto, se puede acceder a él usando /v1/greet o /v2/greet . Eso es porque inicialmente no se le había dado ninguna versión específica; sin embargo, al usar cualquiera de los dos anteriores, las solicitudes se enviarán a la misma función de ruta.

 from fastapi import FastAPI, APIRouter from fastapi_versioning import VersionedFastAPI, version import uvicorn app = FastAPI() router = APIRouter() all_routes =[] def get_routes(): reserved_routes = ["/openapi.json", "/docs", "/docs/oauth2-redirect", "/redoc"] for route in app.routes: if route.path not in reserved_routes: if route.name is not None: version = getattr(route.endpoint, "_api_version", (2, 0)) all_routes.append("/v" + str(version[0]) + route.path) @router.get("/") def index(): return { "endpoints": all_routes } @app.get("/foo") @version(1) def foo(): return "foo v1" @app.get("/foo") @version(2) def foo(): return "foo v2" @app.get("/items/{item_id}") @version(2) def get_item(item_id: int): return item_id @app.get("/greet") def greet_with_hi(): return "Hi" get_routes() app = VersionedFastAPI(app, version_format='{major}',prefix_format='/v{major}') app.include_router(router) if __name__ == '__main__': uvicorn.run(app, host='127.0.0.1', port=8000)

Salida (al acceder a http://127.0.0.1:8000/ ):

 {"endpoints":["/v1/foo","/v2/foo","/v2/items/{item_id}","/v2/greet"]}
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda