FastApi學習-01

寫在前面

FastApi是python的異步Web框架,具有和Go,NodeJs相當的性能,總而言之,很快。當然還有一些相比於其他Web框架的優勢,例如支持了Swagger文檔,增加Python3.6+的數據類型指示功能,基於Pydantic的數據類型校驗等等。個人覺得有學一學必要,所在這寫下自己的學習記錄。

安裝

pip install fastapi
pip install uvicorn

其中uvicorn是一個ASGI(異步網關協議接口)服務器,介於網絡協議和Python應用之間的標準接口,而Flask框架使用的是WSGI(Web服務器網關協議接口)。

HelloWorld

新建一個main.py,在其中創建一個最簡單的應用

from fastapi import FastAPI

app = FastAPI()  # 創建應用實例,uvicorn啓動時也基於這個實例


@app.get("/")  # 定義了一個"/"根目錄的路由,直接返回了一個字符串
def hello_world():
    return "Hello World"

應用的啓動方式有兩種,一種是通過命令行的方式啓動

uvicorn main:app

另一種是在main.py內部實現應用的啓動

import uvicorn

if __name__ == "__main__":
    uvicorn.run("main:app")
    '''或者使用uvicorn.run(app) 傳入fastapi的實例,但是這種情況下不允許設置reload和workers參數'''

uvicorn啓動參數(應用內啓動)

參數 說明 參數類型 默認值
host 綁定的IP地址 String 127.0.0.1
port 綁定的端口 Integer 8000
reload 是否自動重啓,開發階段適用 Bool False
reload_dir 自定義重啓的目錄 Text None
workers 工作進程數,當設置reload時,該參數不生效 Integer 1
log_level 日誌級別 Text info
access_log 是否輸出訪問日誌 Bool True
debug debug模式,開啓後會自動重啓服務 Bool False
proxy_headers 允許X-Forward-* Bool True
forwarded_allow_ips 以逗號分割的IP列表,來自與這些IP的代理頭被新人 Text 127.0.0.1
root_path (可選)指定應用所在的路徑 Text None
limit_concurency 併發限制 Integer None不限制
limit_max_requests 到達進程前的最大連接數 Integer None不限制
backlog 積壓的最大連接數 Integer 2048
timeout_keep_live 超過多長時間自動關閉Keep-Alive連接 Integer 5
headers 自定義響應頭 List 形如[(a, b)]

 

獲取API文檔

訪問綁定的127.0.0.1:8000/doc 獲取SwaggerUI風格的API文檔

訪問綁定的127.0.0.1:8000/redoc 獲取ReDoc庚哥的API文檔

接口方法簡介

@app.get("/")  # 定義了一個"/"根目錄的路由,直接返回了一個字符串
def hello_world():
    return "Hello World"

其中app是FastApi的一個實例,在上文定義的。

get是http協議的方法,除了GET,還包括POST,PUT,DELETE等方法。一般情況下,GET用於獲取數據,POST用於創建數據,PUT用於更新數據,DELETE用於刪除數據。當然了,也可以根據自己的習慣,使用不同的辦法。

"/"是定義的路由,當服務器進行訪問時,只有匹配上該路由,才能映射到對應的接口函數。

hello_world是定義的接口函數,用於實現具體的操作。FastApi是一個異步框架,所以接口函數也可以定義成以下方式

@app.get("/")  # 定義了一個"/"根目錄的路由,直接返回了一個字符串
async def hello_world():
    return "Hello World"

官方文檔中對於選擇def還是async def也做了一個簡單的說明

1.如果使用的第三方庫告訴你調用的時候用await somefunc()的方式,使用async def

2.如果使用的第三方庫與數據庫,API等有交互時,並且不支持await調用方式,就使用def

3.如果不與其他交互和等待其他的響應,使用async def

4.如果你什麼都不知道,使用def

不管在那種情況下,FastApi都會以異步的方式來提高效率,但是根據不同的情況選擇合適的方式有助於性能優化。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章