我是新来的FastApi,和孔API-网关!
我正在尝试从江港API网关调用fastAPI应用程序。
fastAPI应用程序运行良好,但当我尝试从Kong访问它(将其作为服务添加并为服务配置路由后),它将失败,显示以下错误:
Failed to load API definition.
Fetch error
Not Found /openapi.jsonFastAPI代码如下:
from typing import Union
from fastapi.openapi.docs import (
get_redoc_html,
get_swagger_ui_html,
get_swagger_ui_oauth2_redirect_html,
)
import uvicorn
from fastapi import FastAPI, File, UploadFile
from application import predict, read_imagefile, explain#,read_model
app = FastAPI(
title="XAI_FASTAPI",
version=0.1
)
@app.post("/predict/image")
async def predict_api(file: UploadFile = File(...)):
extension = file.filename.split(".")[-1] in ("jpg", "jpeg", "png")
if not extension:
return "Image must be jpg or png format!"
image = read_imagefile(await file.read())
prediction = predict(image)
return prediction
@app.get("/docs", include_in_schema=False)
async def custom_swagger_ui_html():
return get_swagger_ui_html(
openapi_url=app.openapi_url,
title=app.title + " - Swagger UI",
oauth2_redirect_url=app.swagger_ui_oauth2_redirect_url,
swagger_js_url="/static/swagger-ui-bundle.js",
swagger_css_url="/static/swagger-ui.css",
)
@app.get(app.swagger_ui_oauth2_redirect_url, include_in_schema=False)
async def swagger_ui_redirect():
return get_swagger_ui_oauth2_redirect_html()我怎么能解决这个问题。
谢谢
发布于 2022-11-03 16:31:18
您需要正确配置openapi_url和docs_url。这在我的情况下是可行的:
FastAPI:
def create_application() -> FastAPI:
application = FastAPI(openapi_url="/building/openapi.json", docs_url="/building/docs")
application.include_router(create_building.router, prefix="/building", tags=["building"])
application.include_router(modify_building.router, prefix="/building", tags=["building"])
application.include_router(get_building.router, prefix="/building", tags=["building"])
application.include_router(get_buildings.router, prefix="/building", tags=["building"])
application.include_router(remove_building.router, prefix="/building", tags=["building"])
application.include_router(assign_users_to_building.router, prefix="/building", tags=["building"])
return application
app = create_application()kong.yml文件:
_format_version: "3.0"
_transform: true
services:
- name: building_service
url: http://building_service/building
routes:
- name: building_service_route
paths:
- /buildinghttps://stackoverflow.com/questions/74121978
复制相似问题