首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >孔FastApi连接

孔FastApi连接
EN

Stack Overflow用户
提问于 2022-10-19 08:12:52
回答 1查看 96关注 0票数 0

我是新来的FastApi,和孔API-网关!

我正在尝试从江港API网关调用fastAPI应用程序。

fastAPI应用程序运行良好,但当我尝试从Kong访问它(将其作为服务添加并为服务配置路由后),它将失败,显示以下错误:

代码语言:javascript
复制
Failed to load API definition. 
Fetch error
Not Found /openapi.json

FastAPI代码如下:

代码语言:javascript
复制
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()

我怎么能解决这个问题。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-11-03 16:31:18

您需要正确配置openapi_url和docs_url。这在我的情况下是可行的:

FastAPI:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
_format_version: "3.0"
_transform: true

services:
  - name: building_service
    url: http://building_service/building
    routes:
    - name: building_service_route
      paths:
      - /building
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74121978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档