Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

416
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!