一度觉得 sanic是python web框架的未来,支持异步,性能好,类flask的语法,代码简单,没想到被fastapi截胡了,fastapi在github的上星速度非常快。它在怎么样把后端api做好的这件事情上,做的比sanic更全面,更彻底。
FastAPI
FastAPI 是用于构建 Web API 的现代、开源、快速、高性能的 Web 框架,它基于Python 3.6+ 标准类型提示,支持异步,正如它的名字,FastAPI 就是为构建快速的 API 而生。
优点
- 速度快:可与 NodeJS 和 Go 比肩的极高性能(归功于 Starlette 和 Pydantic),是最快的 Python 网络框架之一
- 开发快:开发速度提高约 200% 至 300%
- Bug 少:人为错误减少约 40%*
- 智能:强大的编辑器支持,处处皆可自动补全,减少调试时间
- 简单:易学、易用,阅读文档所需时间更短
- 简短:代码重复最小化,通过不同的参数声明实现丰富功能,Bug 更少
- 健壮:生产级别的代码,还有自动交互文档
- 标准:完全兼容并基于 API 开放标准:OpenAPI 和 JSON Schema
缺点
由于 FastAPI 相对较新,因此与其他框架相比,社区较小,第三方的教程相对较少。
用例
FastAPI 适用于构建高性能的 API,本身支持异步,如果要构建异步 API,可以优先选择 FastAPI。Netflix 将其用于内部危机管理。它还可以在部署准备就绪的机器学习模型时完美缩放,因为当 ML 模型封装在 REST API 并部署在微服务中时,它在生产中会发挥最佳作用。
特性
FastAPI 特性
FastAPI 提供了以下内容:
基于开放标准
- 用于创建 API 的 OpenAPI 包含了路径操作,请求参数,请求体,安全性等的声明。
- 使用 JSON Schema (因为 OpenAPI 本身就是基于 JSON Schema 的)自动生成数据模型文档。
- 经过了缜密的研究后围绕这些标准而设计。并非狗尾续貂。
- 这也允许了在很多语言中自动 生成客户端代码。
自动生成文档
交互式 API 文档以及具探索性 web 界面。因为该框架是基于 OpenAPI,所以有很多可选项,FastAPI 默认自带两个交互式 API 文档。
- Swagger UI,可交互式操作,能在浏览器中直接调用和测试你的 API 。
- 另外的 API 文档: *ReDoc
更主流的 Python
全部都基于标准的 Python 3.6 类型声明(感谢 Pydantic )。没有新的语法需要学习。只需要标准的 Python 。
如果你需要2分钟来学习如何使用 Python 类型(即使你不使用 FastAPI ),看看这个简短的教程:Python Types。
编写带有类型标注的标准 Python:
from datetime import date
from pydantic import BaseModel
Declare a variable as a str
and get editor support inside the function
def main(user_id: str):
return user_id
A Pydantic model
class User(BaseModel):
id: int
name: str
joined: date
可以像这样来使用:
my_user: User = User(id=3, name="John Doe", joined="2018-07-19")
second_user_data = {
"id": 4,
"name": "Mary",
"joined": "2018-11-30",
}
my_second_user: User = User(**second_user_data)
Info
**second_user_data
意思是:
直接将 second_user_data
字典的键和值直接作为key-value参数传递,等同于: User(id=4, name="Mary", joined="2018-11-30")
编辑器支持
整个框架都被设计得易于使用且直观,所有的决定都在开发之前就在多个编辑器上进行了测试,来确保最佳的开发体验。
在最近的 Python 开发者调查中,我们能看到 被使用最多的功能是”自动补全”。
整个 FastAPI 框架就是基于这一点的。任何地方都可以进行自动补全。
你几乎不需要经常回来看文档。
在这里,你的编辑器可能会这样帮助你:
- PyCharm 中:
你将能进行代码补全,这是在之前你可能曾认为不可能的事。例如,在来自请求 JSON 体(可能是嵌套的)中的键 price
。
不会再输错键名,来回翻看文档,或者来回滚动寻找你最后使用的 username
或者 user_name
。
简洁
任何类型都有合理的 默认值,任何和地方都有可选配置。所有的参数被微调,来满足你的需求,定义成你需要的 API。
但是默认情况下,一切都能 “顺利工作”。
验证
- 校验大部分(甚至所有?)的 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 数据库等等集成。
依赖注入
FastAPI 有一个使用非常简单,但是非常强大的 依赖注入系统。
- 甚至依赖也可以有依赖,创建一个层级或者 “图”依赖。
- 所有 自动化处理都由框架完成。
- 所有的依赖关系都可以从请求中获取数据,并且 增加了路径操作约束和自动文档生成。
- 即使在依赖项中被定义的 路径操作 也会 自动验证。
- 支持复杂的用户身份认证系统, 数据库连接等等。
- 不依赖数据库,前端等。 但是和它们集成很简单。
无限制”插件”
或者说,导入并使用你需要的代码,而不需要它们。
任何集成都被设计得被易于使用(用依赖关系),你可以用和 _路径操作_相同的结构和语法,在两行代码中为你的应用创建一个”插件”。
测试
- 100% 测试覆盖。
- 代码库100% 类型注释。
- 用于生产应用。
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% 类型注释。
对python感兴趣的小伙们,这有免费学习教程 python基础入门15天,不长不短适合小白
下面这个教程是适合0基础的,liunx都是0基础讲的,很多不好理解的地方都用了各种形象的例子。
总的来说这个教程,很适合刚入门没有什么基础的伙伴学,有其他语言基础的伙伴可以两倍速快速刷,效率很高,时间上可以这样分配,用15天去学
- 1-3 天内容为Linux基础命令
- 4-13 天内容为Python基础教程
- 14-15 天内容为 飞机大战项目演练
入门后还想多学,这些Python好课可以继续:
- python大数据方向2022最新大数据Hadoop入门视频教程,最适合零基础自学的大数据Hadoop教程
2022年大数据spark3.2入门Spark全套视频教程,4天spark3.2快速入门到精通,全网首套基于Python语言的spark教程
2022年MySQL基础入门2022最新MySQL知识精讲+mysql实战案例_零基础mysql数据库入门到高级全套教程
Python+大数据开发
MySQL数据库:2022最新MySQL知识精讲+mysql实战案例_零基础mysql数据库入门到高级全套教程
Hadoop入门:2022最新大数据Hadoop入门视频教程,最适合零基础自学的大数据Hadoop教程
Hive数仓项目:大数据项目实战教程_大数据企业级离线数据仓库,在线教育项目实战(Hive数仓项目完整流程)
PB内存计算
Python入门:全套Python教程_Python基础入门视频教程,零基础小白自学Python必备教程
Python编程进阶:Python高级语法进阶教程_python多任务及网络编程,从零搭建网站全套教程
spark3.2从基础到精通:Spark全套视频教程,4天spark3.2快速入门到精通,全网首套基于Python语言的spark教程
Hive+Spark离线数仓工业项目实战:全网首次披露大数据Spark离线数仓工业项目实战,Hive+Spark构建企业级大数据平台
趁着年轻,不怕多吃一些苦。这些逆境与磨练,才会让你真正学会谦恭。不然,你那自以为是的聪明和藐视一切的优越感,迟早会毁了你。
Original: https://blog.csdn.net/m0_57290404/article/details/126105940
Author: 测试小扎
Title: 如何评价最近爆红的FastAPI?
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/750476/
转载文章受原作者版权保护。转载请注明原作者出处!