久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

介紹一下Web框架之fastapi

 碼農(nóng)9527 2021-06-24

Web框架在最近幾年也發(fā)生了很大的變化,,從大而全,轉(zhuǎn)向現(xiàn)在專注于后端接口服務(wù),。例如PHP的codeigniter(我只用過這一點),,比如Python的django框架,,都是基于MVC的Web框架,一個框架就可以完全解決前后端的問題,。在基于javascript語言的前端大放異彩之后,,后端Web框架已經(jīng)讓出了V(視圖),把注意力集中在做MC的工作上,,當(dāng)然前端可以干MC的工作,,但先從后端開發(fā)同學(xué)的工作上來。

web

    Python語言下面的Web框架非常的多,。

    從大而全的Django,。

    小而且美的Flask。

    很早就支持異步的Tornado,。

    性能更進一步的異步框架sanic,。

    以上幾款Web框架我多少都有使用過,我一度覺得sanic是pythonWeb框架的未來,,支持異步,,性能好,類flask的語法,,代碼簡單,,沒想到被fastapi截胡了,fastapi在github的上星速度非???。它在如何把后端api做好的這件事情上,,做的比sanic更全面,更徹底,。

    個覺得fastapi在以下幾個方面做得很優(yōu)秀,。

    性能

    先做個簡單的性能對比:

    flask

# flask==2.0.1from flask import Flaskfrom flask import jsonify

app = Flask(__name__)


@app.route("/")
def hello_world(): return jsonify({"hello": "world"})1234567891011復(fù)制代碼類型:[javascript]

    fastapi

# fastapi==0.65.1from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root(): return {"Hello": "World"}12345678910復(fù)制代碼類型:[javascript]

    雖然兩個框架都支持異步(flask2.0支持異步),但我們使用的都是同步代碼,。

    JMeter配置:并發(fā)(500)*循環(huán)(100)*啟動時間(1s)=總請求數(shù)(50000)

結(jié)果flaskfastapigin
運行時長67s28s5s
最大值37197ms641ms270ms
平均值582ms266ms40ms
吞吐量751.s/sec1798.3/sec9817.4/sec

    雖然是簡單的對比,,fastapi在各項性能指標(biāo),都有非常明顯的性能優(yōu)勢,。

    api文檔

    fastapi直接支持OpenAPI(前身是Swagger)和redoc兩種文檔格式,。

# main.pyfrom typing import Optionalfrom fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root(): return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None): return {"item_id": item_id, "q": q}1234567891011121314151617復(fù)制代碼類型:[javascript]

    啟動服務(wù):

> uvicorn main:app --reloadINFO:  Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)INFO:  Started reloader process [19224] using statreloadINFO:  Started server process [23320]INFO:  Waiting for application startup.INFO:  Application startup complete.123456復(fù)制代碼類型:[javascript]

    訪問:http://127.0.0.1:8000/docs

web

    訪問:http://127.0.0.1:8000/redoc

web

    對于開發(fā)來說,簡直不要太爽了,,代碼即文檔,,壓根不用寫接口文檔。試問:還是誰,?

    類型檢查

    我們知道python是弱類型的語言,,直到python3.5才加入類型系統(tǒng)。而我們在做接口參數(shù)校驗的時候,,必定要寫大量代碼驗證參數(shù)是否為空,,類型是否正確,。

    flask

import jsonfrom flask import Flaskfrom flask import jsonifyfrom flask import request

app = Flask(__name__)

@app.route('/items/<int:item_id>', methods=['GET', 'POST', "PUT", "DELETE"])
def update_item(item_id): if request.method == "PUT":  try:
   data = json.loads(request.get_data())
  except json.decoder.JSONDecodeError:   return jsonify({"code":10101, "msg": "format error"})  try:
   name = data["name"]
   price = data["price"]
   is_offer = data["is_offer"]
  except KeyError:   return jsonify({"code": 10102, "msg": "key null"})  if not isinstance(name, str):   return jsonify({"code": 10103, "msg": "name not is str"})  if not isinstance(price, float):   return jsonify({"code": 10104, "msg": "price not is float"})  if not isinstance(is_offer, bool):   return jsonify({"code": 10105, "msg": "is_offer not is bool"})  return jsonify({"item_name": name, "item_id": item_id})1234567891011121314151617181920212223242526272829303132復(fù)制代碼類型:[javascript]

    在flask中為了驗證參數(shù)是否為空,,以及參數(shù)的類型,必須要寫大量的異常和類型判斷的代碼,。

    fastapi

from typing import Optionalfrom fastapi import FastAPIfrom pydantic import BaseModel

app = FastAPI()class Item(BaseModel): name: str
 price: float
 is_offer: Optional[bool] = None


@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item): return {"item_name": item.name, "item_id": item_id}1234567891011121314151617復(fù)制代碼類型:[javascript]

    fastapi通過pydantic檢查參數(shù)類型,,有一點像go的結(jié)構(gòu)體,簡直不要太簡單,。

    總結(jié)

    fastapi憑借上面幾個優(yōu)點,,真的非常適合做后端API開發(fā)的工作,不管是從性能,,還是開發(fā)效率上面優(yōu)勢非常明顯,,受到大家的追捧也是必然的。

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多