FastAPI - 一款新型的 Python Web 框架(对比 Flask)

近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让Flask配合 Flasgger, 所以写了篇Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了FastAPI这么一款集成了 Swagger UI 的更新的 Python Web 框架。起初想要在标题中表达的意思大概是 Flask + Swagger = FastAPI, 后来发现 FastAPI 的闪亮点不仅如此,顺便找了些 Flask 与 FastAPI 对比的文章来,在文后附有链接。

本文不对 Flask 与 FastAPI 的各个方面对进行对比,本人兴趣依然还在 FastAPI 的 Swagger UI 功能,以及与 Flask 的 Blueprint 类似的特性。如果要拿 Flask 与 FastAPI 比较的话,应该用 Flask 2.x, 因为它开始支持类似 @app.get 的装饰器,并引入了 async 路由函数。

Flask 是在 2010 年发布的,它构建于 WSGI(Python Web Server Gateway Interface) 之上的,产品环境中运行需与 uWSGI, Gunicorn 搭配,或用 mod_wsgi 模块与 Apache 集成。因发布较早,所以目前应该有较多的使用者。Flask 2.0 需要 Python 3.6+ 的支持,如果支持 , 需 Python 3.7+async

FastAPI 发布于 2018 年,构建于 ASGI(Asynchronous Server Gateway Interface) 之上,在 IO 密集型的应用中有更优越的性能。生成环境中配合 ASGI 服务器,如Uvicorn或Hypercorn .FastAPI 最为亮丽的特性是集成了 Swagger UI -- 外加一个福利ReDoc 。FastAPI 需 Python 3.6+ 版本。

毕竟是在开始学一个新的框架,还是从它的基本用法开始,途中会穿插与 Flask 的对比。

FastAPI 的基本用法

安装:

 $ pip install fastapi  $ pip install "uvicorn[standard]" 

当前安装的 fastapi 版本为 0.70.1, uvicorn 版本为 0.16.0。开始第一个例子,摘自官方

创建一个 文件,内容为main.py

from typing import Optional
from 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}

从键入导入可选

从 fastapi 导入 FastAPI

应用 = 快速 API ( )

@ 应用 . 获取 ( "/" )

防御read_root ( ) :

     返回 { "Hello" : "World" }

@ app . get ( "/items/{item_id}" )

防御read_item (item_id : int , q : 可选 [ str ] = 无 ) :

     返回{ "item_id" : item_id , "q" : q }

注:以上两个函数前面可以加上 关键字async

启动服务,用命令

 $  uvicorn main:app --reload  INFO: Will watch for changes in these directories: ['/Users/yanbin/demo/first-fastapi']  INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)  INFO: Started reloader process [81730] using watchgod  INFO: Started server process [81732]  INFO: Waiting 

你可能感兴趣的:(python,web,FastAPI,Flask)