FastAPI 構建 API 服務,究竟有多快?

FastAPI 幹啥的?
前端

FastAPI 是用來構建 API 服務的一個高性能框架。web

爲何選擇 FastAPI ?

FastAPI 是一個現代、高性能 web 框架,用於構建 APIs,基於 Python 3.6 及以上版本。算法

最大特色:快!性能極高,可與 NodeJS, Go 媲美。json

基於 Starlette 和 Pydantic,是 FastAPI 如此高性能的重要緣由。api

還具有代碼複用性高,容易上手,健壯性強的優勢。服務器

我的還以爲,FastAPI 還有一個很是強的優點:方便的 API 調試,生成 API 文檔,直接可以作到調試本身構建的 API,這在實際應用中,價值凸顯。微信

FastAPI 這麼強悍,有必要研究和使用,由於不管作開發,仍是作算法,API 服務真的過重要,過重要,尤爲是大廠,離不開 API 接口。app

Pydantic 作類型強制檢查

FastAPI 基於 PydanticPydantic 主要用來作類型強制檢查。參數賦值,不符合類型要求,就會拋出異常。框架

對於 API 服務,支持類型檢查很是有用,會讓服務更加健壯,也會加快開發速度,由於開發者不再用本身寫一行一行的作類型檢查。編輯器

首先 pip install pydantic

而後,使用 Pydantic 作強制類型檢查。

from pydantic import ValidationError

from datetime import datetime
from typing import List
from pydantic import BaseModel

class User(BaseModel):
id:int
name='jack guo'
signup_timestamp: datetime = None
friends: List[int] = []

觀察到:

  • id 要求必須爲 int
  • name 要求必須爲 str, 且有默認值
  • signup_timestamp 要求爲 datetime, 默認值爲 None
  • friends 要求爲 List,元素類型要求 int, 默認值爲 []

使用 User 類:

try:
User(signup_timestamp='not datetime',friends=[1,2,3,'not number'])
except ValidationError as e:
print(e.json())

id 沒有默認值,按照預期會報缺失的異常

signup_timestamp 被賦爲非 datetime 類型值,按照預期會報異常

friends 索引爲 3 的元素被賦值爲 str,按照預期也會報異常

執行代碼,驗證是否符合預期。

執行結果顯示,符合預期

[
{
"loc": [
"id"
],
"msg": "field required",
"type": "value_error.missing"
},
{
"loc": [
"signup_timestamp"
],
"msg": "invalid datetime format",
"type": "value_error.datetime"
},
{
"loc": [
"friends",
3
],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}
]

快速上手 FastAPI

這是一個入門 demo, 構建如下三個路由:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class User(BaseModel):
id: int
name: str
friends: list


@app.get("/")
def index():
return {"admin": "welcome to FastAPI"}


@app.get("/users/{user_id}")
def read_user(user_id: int, name: str = None):
return {"user_id": user_id, "name": name}


@app.put("/users/{user_id}")
def update_user(user_id: int, user: User):
return {"user_name": user.name, "user_id": user_id}

將上述代碼保存爲 main.py

再安裝與構建服務相關的框架 uvicorn

安裝完成後,後臺執行:uvicorn main:app --reload 

啓動服務,顯示以下:

打開客戶端,輸入:localhost:8000,回車:

輸入請求:localhost:8000/users/5,回車,看到前臺數據,很是容易的就能傳遞到 controller 層,方便。

  輸入請求:localhost:8000/docs,回車:,看到 API 文檔界面

  點開第二個 get 請求,而後點擊 Try it out 後,即可以進行接口調試。很是方便!


 輸入user_id, name 後,點擊 Execute,執行成功。若是 user_id 輸入非數值型,點擊 Execute 後,紅框閃動一下,不會執行,直到輸入正確爲止。


 輸入user_id, name 後,點擊 Execute,


能看到結果,包括請求的 URL


 也能看到,服務器響應前端,返回的結果:


FastAPI 基於以上這些強大的優勢,相信在實際開發 API 服務時,會很敏捷。期待!

本文分享自微信公衆號 - Python與算法社區(alg-channel)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索