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

726
Views
¿Cómo puedo enumerar todas las rutas URL definidas en FastAPI?

Supongamos que tengo un proyecto FastAPI que contiene más de 100 puntos finales de API. ¿Cómo puedo enumerar todas las API/rutas?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Para obtener todos los patrones de URL posibles, necesitamos obtener acceso a las rutas de URL definidas, que es un atributo de la ejecución de la instancia de la aplicación.

Podemos hacer eso al menos de dos maneras,

  1. Uso de la aplicación FastAPI : esto es útil cuando tiene acceso a la instancia de FastAPI
  2. Uso de la instancia de Request : esto es útil cuando tiene acceso a las solicitudes entrantes, pero no a la instancia de FastAPI.

Ejemplo completo

 from fastapi import FastAPI, Request app = FastAPI() @app.get(path="/", name="API Foo") def foo(): return {"message": "this is API Foo"} @app.post(path="/bar", name="API Bar") def bar(): return {"message": "this is API Bar"} # Using FastAPI instance @app.get("/url-list") def get_all_urls(): url_list = [{"path": route.path, "name": route.name} for route in app.routes] return url_list # Using Request instance @app.get("/url-list-from-request") def get_all_urls_from_request(request: Request): url_list = [ {"path": route.path, "name": route.name} for route in request.app.routes ] return url_list
over 4 years ago · Santiago Trujillo Report

0

Traté de proporcionar una edición de la respuesta original, pero no me dejó.

Otro caso de uso: suponga que no está en el archivo de la aplicación principal y no tiene acceso a la app en el espacio de nombres. En ese caso, la documentación de Starlette dice que también tenemos acceso a la instancia de la aplicación desde la solicitud como request.app . Por ejemplo, si en el archivo principal solo tiene la instancia de la aplicación y no desea tener ningún punto final en el archivo principal, sino que todos estén en enrutadores separados.

principal.py
 from fastapi import FastAPI # then let's import all the various routers we have # please note that api is the name of our package from api.routers import router_1, router_2, router_3, utils app = FastAPI() app.include_router(router_1) app.include_router(router_2) app.include_router(router_3) app.include_router(utils)

Tengo mi punto final list_endpoints en el enrutador utils. Para poder enumerar todas las rutas de la aplicación, haría lo siguiente:

utils.py
 from fastapi import APIRouter, Request router = APIRouter( prefix="/utils", tags=["utilities"] ) @router.get('/list_endpoints/') def list_endpoints(request: Request): url_list = [ {'path': route.path, 'name': route.name} for route in request.app.routes ] return url_list

Tenga en cuenta que en lugar de usar app.routes , usé request.app.routes y tengo acceso a todos ellos. Si ahora accede a /utils/list_endpoints obtendrá todas sus rutas.

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!