FastAPI實戰:簡易MockServe

zy7y發表於2021-08-05

Mock

我個人理解就是為了偽造返回結果的東西,MockServe通常說的就是介面未開放完成但是現在需要呼叫,所以無論是通過轉發還是直接訪問這個url,其結果基本就是自己定義的 當然做仔細點就是 給個型別其自動生成對應型別資料

預覽圖

使用技術棧

FastAPI + tortoise-orm + sqlite3

實現原理

Path引數實現,使用者訪問時如果這個Path引數存在資料庫,對應請求方法也是對的那麼就可以訪問

核心程式碼

方法一:個人最開始實現的方法

async def mock(request: Request, url: str = Path(...)):
    try:
        mocks = await models.MockApi.filter(path=url, status=True).first()
        return mocks.body if mocks.method.upper() == request.method else ServeNotFount()
    except Exception as e:
        return ServeNotFount()

app.add_api_route(
    "/mock/{url}",
    endpoint=mock,
    methods=[
        "post",
        "get",
        "delete",
        "put"],
    include_in_schema=False
)

方法二,https://gitee.com/ran_yong 糾正 @app.api_route

@app.api_route("/mock/{url}", methods=["post", "get", "delete", "put"], include_in_schema=False)
async def mock(request: Request, url: str = Path(...)):
    try:
        mocks = await models.MockApi.filter(path=url, status=True, method=request.method.lower()).first()
        return mocks.body
    except Exception as e:
        return ServeNotFount()

視訊說明

原始碼地址

Gitee: https://gitee.com/zy7y/FastAPIMockServe.git
Github: https://github.com/zy7y/FastAPIMockServe

相關文章