全面擁抱FastApi-藍圖
我們都知道在大型的應用程序或者 web api 中, 我們很少在一個文件中寫入多個路由

將所有的請求方法寫在同一個處理文件下面的話,會導致我們的代碼顯得很沒有邏輯性
這樣既不利于程序的擴展,也不利于程序日后的維護
在 Flask 中,我們一般用藍圖 Blueprint 來處理
那么在fastApi 中如何處理呢?
當然可以,在 fastApi 中使用 APIRouter 處理這種多程序分類
即類似 Flask 中的藍圖
APIRouter
假設專門用于處理用戶的文件是的子模塊/app/routers/users.py
您希望將與用戶相關的路徑操作與其余代碼分開,使其看起來簡潔明了。
可以使用來為該模塊創建路徑操作 APIRouter。
from fastapi import APIRouter router = APIRouter() @router.get("/users/", tags=["users"]) async def read_users(): return [{"username": "Rick"}, {"username": "Morty"}] @router.get("/users/me", tags=["users"]) async def read_user_me(): return {"username": "fakecurrentuser"} @router.get("/users/{username}", tags=["users"]) async def read_user(username: str): return {"username": username}
web 服務中還有另外一個應用模塊,item
同樣的 通過 APIRouter 來對其路由進行注冊,代碼如下:
app/routers/items.py
from fastapi import APIRouter, Depends, HTTPException from ..dependencies import get_token_header router = APIRouter( prefix="/items", tags=["items"], responses={404: {"description": "Not found"}}, ) @router.get("/") async def read_items(): return fake_items_db @router.get("/{item_id}") async def read_item(item_id: str): if item_id not in fake_items_db: raise HTTPException(status_code=404, detail="Item not found") return {"name": fake_items_db[item_id]["name"], "item_id": item_id}
這樣就將兩個功能模塊 item, user 給分離開來了
后期我們想更新或擴展 user 模塊的功能,并不會對 item 造成影響!
上面便是 APIRouter 最最基礎也是最強大之處,還有其他功能嗎?
當然有!
自定義的tags,responses
細心的朋友應該發現了,在上述 item.py 中實例化 router的時候,傳了好幾個參數
一起來看看分別代表什么含義!
prefix 參數,路由的前綴
tags 將應用于特定路徑操作的內容
responses 指特定于該路徑下的響應內容,如上述便指定 404 的返回信息
@router.put( "/{item_id}", tags=["custom"], responses={403: {"description": "Operation forbidden"}}, ) async def update_item(item_id: str): if item_id != "plumbus": raise HTTPException( status_code=403, detail="You can only update the item: plumbus" ) return {"item_id": item_id, "name": "The great Plumbus"}
還支持擴展或重寫,增加其他功能
但是我們仍然可以添加更多 tags 將應用于特定路徑操作的內容,
注冊 APIRouter
最后一個步驟就是要將我們的 APIRouter 注冊到核心對象上去
和之前我們創建主文件一樣導入 FastApi,以及聲明的 APIRouter 實例
main.py文件
from fastapi import Depends, FastAPI from .dependencies import get_query_token, get_token_header from .internal import admin from .routers import items, users app = FastAPI(dependencies=[Depends(get_query_token)]) app.include_router(users.router) app.include_router(items.router) app.include_router( admin.router, prefix="/admin", tags=["admin"], dependencies=[Depends(get_token_header)], responses={418: {"description": "I'm a teapot"}}, ) @app.get("/") async def root(): return {"message": "Hello Bigger Applications!"}
其中 include_router() 函數就是上面說的注冊。
這時候就完成了,使用該 app 來啟動服務即可
啟動命令如下:
uvicorn main:app --host=0.0.0.0 --port=8800
最后來驗證下打開接口文檔,查看接口
API Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。