全面擁抱 FastApi — 多應用程序管理藍圖APIRouter

      網友投稿 1159 2025-03-31

      fastAPI是一個,并發性能可以和 NodeJS 以及 Go 相媲美。它是基于Starlette框架, 類似于Starlette 的一個子類。

      本人最近也是一直在使用和學習 fastApi,相比之前用的框架性能確實有很大的提升,用完后有如下幾點感受:

      性能并發更強了,支持異步 async

      基于 Pydantic 的類型聲明,自動校驗參數

      自動生成交互式的 API 接口文檔

      上手簡單,能快速編碼

      上手快是真的,上班期間零零散散的看了兩天文檔,就將現有的一個服務改成 FastApi 服務了,配合 gunicorn+uvicorn 部署,最近測試也沒出現什么問題。

      由于之前 Flask 用的比較多,在 FastAPI 上隱隱約約能看到 Flask 的影子,兩者的設計范式很類似。

      例如:更大的應用服務多文件多 url 處理功能,在 Flask 中稱之為藍圖的,對應 FastApI 中的 APIRouter

      使用 APIRouter

      上面說過和 Flask 非常的類似,比如創建一個簡單的 FastAPI 服務

      from fastapi import FastAPI app = FastAPI() @app.get("/") async def index(): return "Hello world" @app.get("/items/{item_id}") async def read_item(item_id: str, q: str = None, short: bool = False): item = {"item_id": item_id} if q: item.update({"q": q}) if not short: item.update( {"description": "This is an amazing item that has a long description"} ) return item

      上述代碼中有兩個視圖函數以及 url 路徑,現在這種情況看起來還好

      全面擁抱 FastApi — 多應用程序管理藍圖APIRouter

      但是如果服務中視圖函數有 10 個或者更多呢?這時候就不建議寫在一個文件里面了,因為代碼不易維護且顯得臃腫

      這時候便要考慮將視圖函數分文件處理了,APIRouter 就給我們提供了在多個文件中注冊路由的功能。

      類似生活中的常用的插線板,能提供更多的插口插入電器插頭,然后我們最終只需要將這一個或多個插線板 (APIRouter) 插到主線路 (app = FastAPI() ) 即可

      比如服務中兩個應用模塊,combination 和 level 分別對應兩個應用模塊,通過 APIRouter 來對其路由進行注冊,用法如下:

      combination.py

      from fastapi import APIRouter router = APIRouter() @router.get("/users/", tags=["users"]) async def read_users(): return [{"username": "Foo"}, {"username": "Bar"}] @router.get("/users/me", tags=["users"]) async def read_user_me(): return {"username": "fakecurrentuser"}

      相應的 level.py 也能這樣寫,但是你是否會發現創建了兩個 APIRouter() 的對象

      這樣當然也是可以的,官方文檔就是這樣舉例的,你甚至可以創建更多。不過我覺得兩個應用創建兩個 router 感覺有點 “浪費”, 我們是否可以這樣:只創建一個 router ,然后在每個模塊導入創建好的 router,當然也是可以,效果一樣

      這部分就是另起文件,創建 router, 代碼非常簡單,但是記住要導入模塊對應視圖函數,

      routers.py

      from fastapi import APIRouter router = APIRouter() from ..combination import views from ..level2 import views

      接下來就是在模塊視圖函數中導入上述創建好的 router

      from app.routers import router @router.get("/users/", tags=["users"]) async def read_users(): return [{"username": "Foo"}, {"username": "Bar"}] @router.get("/users/me", tags=["users"]) async def read_user_me(): return {"username": "fakecurrentuser"}

      另外一個模塊也是一樣的導入,代碼就不貼了,理解就行

      注冊 APIRouter

      最后一個步驟就是要將我們的 APIRouter 注冊到核心對象上去,就像前面舉列將插線板插到主線路插口上

      和之前我們創建主文件一樣導入 FastApi

      from fastapi import FastAPI app = FastAPI() app.include_router(routers.router, prefix="/api")

      其中 include_router() 函數就是上面說的注冊。

      這時候就完成了,使用該 app 來啟動服務即可。當然你也可以將該核心對象包裝成函數返回,然后在主目錄調用啟動,

      def create_app(): app = FastAPI() app.include_router(routers.router, prefix="/api") return app

      主目錄中創建 main.py 文件調用啟動,

      from app import create_app app = create_app()

      啟動命令:

      uvicorn main:app --host=0.0.0.0 --port=8800

      -完-

      Flask HTML Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Java基礎之算術運算符
      下一篇:Excel表格中插入圖片圖表的按鈕呈灰色怎么解決(excel圖片置于文字下方)
      相關文章
      精品亚洲综合久久中文字幕| 亚洲日韩v无码中文字幕| 亚洲AV中文无码乱人伦下载| 久久久青草青青国产亚洲免观| 亚洲精品成人片在线观看| 亚洲精品人成网线在线播放va| 亚洲国产精品免费在线观看| 久久久亚洲欧洲日产国码二区| 亚洲福利在线视频| 亚洲s色大片在线观看| 亚洲va中文字幕无码久久 | 亚洲综合偷自成人网第页色| 久久精品国产亚洲av麻豆蜜芽| 亚洲av无码专区在线| 国产成人精品日本亚洲直接| 狠狠色香婷婷久久亚洲精品| 亚洲kkk4444在线观看| 亚洲精品无码av片| gogo全球高清大胆亚洲| 亚洲精品tv久久久久| 久久亚洲2019中文字幕| 亚洲精品~无码抽插| 亚洲欧洲日韩不卡| 亚洲国语在线视频手机在线| 亚洲娇小性xxxx| 亚洲欧美熟妇综合久久久久| 亚洲AV无码男人的天堂| 亚洲国产精品人人做人人爱| 久久久久亚洲精品男人的天堂 | 亚洲免费闲人蜜桃| 亚洲精品国产日韩| 亚洲精品无码mⅴ在线观看 | 久久久久亚洲AV片无码下载蜜桃| 亚洲网站免费观看| 亚洲中文字幕一区精品自拍| MM1313亚洲国产精品| 综合亚洲伊人午夜网| 亚洲va在线va天堂va四虎| 亚洲精品永久www忘忧草| 最新亚洲卡一卡二卡三新区| 亚洲av日韩aⅴ无码色老头 |