FastAPI 入门

前言

来啦老铁!

许久不见,甚是想念~

最近偶然看到一个 python web 框架,刚好又需要搭建一个后端,因此就打算练练手,顺便记录一下,它就是:

  • FastAPI

学习路径

  1. 认识 FastAPI;
  2. FastAPI 与 Flask 对比;
  3. 安装 FastAPI;
  4. 运行第一个 FastAPI 应用;
  5. API 文档;
  6. APIRouter;
  7. 启动 server 指定端口;

1. 认识 FastAPI;

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,专为在 Python 中构建 RESTful API 而设计。。

FastAPI 使用 Python 3.8+ 并基于标准的 Python 类型提示。

FastAPI 建立在 Starlette 和 Pydantic 之上,利用类型提示进行数据处理,并自动生成API文档。

FastAPI 于 2018 年 12 月 5 日发布第一版本,以其易用性、速度和稳健性在开发者中间迅速流行起来。

FastAPI 支持异步编程,可在生产环境中运行。

【以上,引用自网络文章】

2. FastAPI 与 Flask 对比;

FastAPI 是一个现代化的 Python web 框架,它提供了高性能和易用性。与之相比,Flask 是一个轻量级的 Python web 框架,也是非常受欢迎的。

以下是 FastAPI 与 Flask 的一些对比:

性能:FastAPI 比 Flask 更快。它使用了基于类型的请求参数验证和响应模型,以及异步请求处理,从而提供了更好的性能。

类型提示:FastAPI 支持使用 Python 的类型提示来定义请求参数和响应模型,这使得代码更加清晰和易于维护。而 Flask 则需要使用额外的库来实现类似的功能。

异步支持:FastAPI 支持异步请求处理,这意味着它可以处理更多的并发请求,从而提高性能。而 Flask 在处理异步请求方面相对较弱。

文档生成:FastAPI 自带了自动生成 API 文档的功能,可以通过访问特定的 URL 来查看 API 文档。而 Flask 需要使用额外的库来实现类似的功能。

生态系统:Flask 有一个庞大的生态系统,拥有大量的第三方扩展和插件。而 FastAPI 相对较新,生态系统相对较小,但在不断增长。

总的来说,FastAPI 是一个更现代化和高性能的框架,特别适合构建高性能的 API 服务。而 Flask 则更适合构建小型的 web 应用和快速原型开发。选择哪个框架取决于项目的需求和开发团队的偏好。

【以上,引用自 AI 的回复,看着还挺靠谱】

3. 安装 FastAPI;

  • 安装 fastapi 包;
pip install fastapi
  • 另外我们还需要一个 ASGI 服务器,生产环境可以使用 Uvicorn 或者 Hypercorn:
    (实际上,安装 fastapi 时已经默认安装了,如果没有,再安装也不迟)
pip install "uvicorn[standard]"

4. 运行第一个 FastAPI 应用;

  • 例如,在项目中创建一个文件 main.py,并写入代码:
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}
  • 启动应用;
uvicorn main:app --reload
启动应用

其中:main 为文件名,--reload 代表热启动,即有代码变更时会自动重启服务,生产肯定是不能用这个参数的。

  • 调用接口;
  • 浏览器打开 url 进行接口 get 调用:
调用接口

5. API 文档;

FastAPI 已经帮我们集成好了 Swagger,我们可以直接在浏览器访问以下 url 以访问 Swagger UI:

Swagger UI

还挺方便的,不用像其他有些框架如 Flask 需要自己集成这一部分。

Swagger 此处就不做介绍了~

6. APIRouter;

实际场景中,我们不可能把所有接口都在 main.py 里头声明,即不可能所有的接口都放在一个文件中进行管理,就像 SpringBoot 中,我们会编写多个 controller 一样。

此时需要用到 FastAPI 的 router 进行管理,步骤演示如下:
a. 项目下创建文件夹,如 router;
b. 在 router 下创建多个 .py 文件,例如创建 product.py 和 user.py 进行演示;

router 1

c. 编写 product.py 和 user.py,分别声明接口,例如:
product.py

from fastapi import APIRouter

router = APIRouter(
    prefix='/product',
    tags=['router for product']
)


@router.get("/info")
def get_product_info():
    return {
        "name": "product 1",
        "stock": 100
    }

user.py

from fastapi import APIRouter

router = APIRouter(
    prefix='/user',
    tags=['router for user']
)


@router.get("/info")
def get_product_info():
    return {
        "name": "dylan zhang",
        "age": 18
    }

d. 修改 main.py,主要将接口声明改为引用自上述 router,例如:

from fastapi import FastAPI

from routers import product, user

app = FastAPI()


@app.get("/", summary="ping", deprecated=False)
async def ping():
    return "success"


app.include_router(product.router)
app.include_router(user.router)

e. 保存后,接口文档变为:

接口文档

f. 此时,我们可以访问通过 router 声明的接口了,例如:

接口 1
接口 2

7. 启动 server 指定端口;

有时候我们需要指定端口启动 server,这时候我们可以类似这么做:

uvicorn main:app --port 8001 --reload

如上,我们在 8001 端口启动了我们的 server。

uvicorn 更多可用参数,可以使用以下命令进行查阅:

uvicorn --help

关于 FastAPI 更多内容,我们可以参考其他教程。

FastAPI 更多内容包含:

  • GET 请求参数;
  • POST/PUT 请求;
  • FastAPI Pydantic 模型;
  • FastAPI 路径操作依赖项;
  • 等~

这些网上已经有很多教程了,当前,请读者自行脑补~

今天就到这吧,能力有限,欢迎指正、互相交流,感谢~

如果本文对您有帮助,麻烦点赞、关注!

感谢~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容