Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

411
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda