FastAPI上手指南(一):框架简介与安装

FastAPI


文档: https://fastapi.tiangolo.com

源码: https://github.com/tiangolo/fastapi

一、FastAPI简介

FastAPI是高性能的web框架。他的主要特点是:

- 快速编码

- 减少人为bug

- 直观

- 简易

- 具有交互式文档

- 基于API的开放标准(并与之完全兼容):OpenAPI(以前称为Swagger)和JSON Schema。

FastAPI 站在巨人的肩膀上的框架,这个巨人就是指 Flask 框架。

FastAPI 从语法上和 Flask 非常的相似,有异曲同工之妙。

二、FastAPI 特性

1.基于开放标准

用于创建 API 的 OpenAPI 包含了路径操作,请求参数,请求体,安全性等的声明。

使用 JSON Schema (因为 OpenAPI 本身就是基于 JSON Schema 的)自动生成数据模型文档。

经过了缜密的研究后围绕这些标准而设计。并非狗尾续貂。

这也允许了在很多语言中自动生成客户端代码

2.自动生成文档

交互式 API 文档以及具探索性 web 界面。因为该框架是基于 OpenAPI,所以有很多可选项,FastAPI 默认自带两个交互式 API 文档。一个是docs,一个是redoc

--Swagger UI,可交互式操作,用于测试,能在浏览器中直接调用和测试你的 API 。


--API 文档:ReDoc 


三、编辑器支持

整个框架都被设计得易于使用且直观,所有的决定都在开发之前就在多个编辑器上进行了测试,来确保最佳的开发体验。

在最近的 Python 开发者调查中,我们能看到 被使用最多的功能是"自动补全"

整个 FastAPI 框架就是基于这一点的。任何地方都可以进行自动补全。

在这里,你的编辑器可能会这样帮助你

四、类型验证与身份校验

校验大部分(甚至所有?)的 Python 数据类型,包括:

JSON 对象 (dict).

JSON 数组 (list) 定义成员类型。

字符串 (str) 字段, 定义最小或最大长度。

数字 (int, float) 有最大值和最小值, 等等。

校验外来类型, 比如:

URL.

Email.

UUID.

...及其他.

所有的校验都由完善且强大的 Pydantic 处理。

安全性及身份验证

集成了安全性和身份认证。杜绝数据库或者数据模型的渗透风险。

OpenAPI 中定义的安全模式,包括:

HTTP 基本认证。

OAuth2 (也使用 JWT tokens)。在 OAuth2 with JWT查看教程。

API 密钥,在:

请求头。

查询参数。

Cookies, 等等。

加上来自 Starlette(包括 session cookie)的所有安全特性。

所有的这些都是可复用的工具和组件,可以轻松与你的系统,数据仓库,关系型以及 NoSQL 数据库等等集成。


五、Starlette 特性

FastAPI 和 Starlette 完全兼容(并基于)。所以,你有的其他的 Starlette 代码也能正常工作。FastAPI 实际上是 Starlette的一个子类。所以,如果你已经知道或者使用 Starlette,大部分的功能会以相同的方式工作。

通过 FastAPI 你可以获得所有 Starlette 的特性 ( FastAPI 就像加强版的 Starlette ):

令人惊叹的性能。它是 Python 可用的最快的框架之一,和NodeJS 及Go 相当

支持 WebSocket 。

支持 GraphQL 。

后台任务处理。

Startup 和 shutdown 事件。

测试客户端基于 requests。

CORS, GZip, 静态文件, 流响应。

支持 Session 和 Cookie 。

100% 测试覆盖率。

代码库 100% 类型注释。

六、Pydantic 特性

FastAPI 和 Pydantic 完全兼容(并基于)。所以,你有的其他的 Pydantic 代码也能正常工作。

兼容包括基于 Pydantic 的外部库, 例如用与数据库的 ORMs, ODMs。

这也意味着在很多情况下,你可以将从请求中获得的相同对象直接传到数据库,因为所有的验证都是自动的。

反之亦然,在很多情况下,你也可以将从数据库中获取的对象直接传到客户端

通过 FastAPI 你可以获得所有 Pydantic (FastAPI 基于 Pydantic 做了所有的数据处理):

更简单

没有新的模式定义 micro-language 需要学习。

如果你知道 Python types,你就知道如何使用 Pydantic。

和你 IDE/linter/brain 适配:

因为 pydantic 数据结构仅仅是你定义的类的实例;自动补全,linting,mypy 以及你的直觉应该可以和你验证的数据一起正常工作。

更快

在 基准测试 中,Pydantic 比其他被测试的库都要快。

验证复杂结构:

使用分层的 Pydantic 模型, Python typing的 List 和 Dict 等等。

验证器使我们能够简单清楚的将复杂的数据模式定义、检查并记录为 JSON Schema。

你可以拥有深度嵌套的 JSON 对象并对它们进行验证和注释。

可扩展:

Pydantic 允许定义自定义数据类型或者你可以用验证器装饰器对被装饰的模型上的方法扩展验证。

100% 测试覆盖率。

七、FastAPI安装

安装 FastAPI。首先搭建环境,我用的是VS code,需要下载配置插件code runnner和python

在终端安装FastAPI

pip install fastapi[all]

安装还包括了 uvicorn,你可以将其用作运行代码的服务器。这是一个一个ASGI服务器。

其中包括依赖项Pydantic和Starlette。

1. Pydantic提供:

ujson- 更快的JSON

email_validator- 电子邮件的验证

2. Starlette提供:

requests- 如果你想要使用TestClient, 需要导入requests.

aiofiles- 如果你想使用FileResponseorStaticFiles, 需要导入aiofiles.

jinja2- 如果你想使用默认的模板配置,需要导入jinjia2.

python-multipart-如果要使用request.form()支持表单“解析”,则为必需。

itsdangerous-“SessionMiddleware”支持需要。

pyyaml- 如果需要SchemaGenerator支持, 则为必要.

graphene-如果需要GraphQLApp支持, 则为必要.

ujson- 如果你想使用UJSONResponse, 则为必要.

八、启动HelloWorld

```python

# -*- coding: UTF-8 -*-

from fastapi import FastAPI

app = FastAPI()

@app.get("/")

async def main():

    return {"message": "Hello,FastAPI"}

if __name__ == '__main__':

    import uvicorn

    uvicorn.run(app, host="127.0.0.1", port=8000)

```

右键点击Run Code,或者Ctrl+Alt+N启动服务。

打开浏览器的本地服务就会看到


FastAPI安装完成

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