FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。Starlette 构建 web 服务。
关键特性
-
快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。 -
高效编码:提高功能开发速度约 200% 至 300%。* -
更少 bug:减少约 40% 的人为(开发者)导致错误。* -
智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。 -
简单:设计的易于使用和学习,阅读文档的时间更短。 -
简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。 -
健壮:生产可用级别的代码。还有自动生成的交互式文档。 -
标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。
依赖
Python 3.6 及更高版本
FastAPI 站在以下巨人的肩膀之上:
-
Starlette 负责 web 部分。 -
Pydantic 负责数据部分。
FastAPI 为什么使用 Starlette 作为基础框架?
FastAPI 使用 Starlette 作为其基础框架,主要是因为 Starlette 是一个现代化的 ASGI 框架,专注于高性能和可扩展性。与传统的 Web 框架相比,ASGI(异步服务器网关接口)允许异步处理 HTTP 请求,从而提高了应用程序的性能。
Starlette 提供了一些高级功能,如 WebSocket 支持、请求和响应对象的构建以及中间件支持等,这些功能都可以轻松地集成到 FastAPI 中。此外,Starlette 还提供了一些可插拔的组件,如模板引擎、安全性功能和跨域资源共享等,使得开发者可以根据不同的需求来选择自己需要的组件进行集成。
FastAPI 借助于 Starlette 的所有这些功能特性,使得其具有出色的性能和灵活性,并且易于使用和扩展。
FastAPI 为什么使用 Pydantic 做数据处理?
FastAPI 使用 Pydantic 作为其数据验证库,主要是因为 Pydantic 是一个高度可扩展的数据序列化和验证库,可以帮助开发者轻松地验证输入数据,并将其转换为 Python 对象。
Pydantic 具有以下优点:
快速且易于使用:通过使用类型提示、注解和默认值,可以快速定义数据模型; 高度可扩展:可以自定义验证逻辑、编写自己的字段类型和转换器; 支持异步验证:可以在异步 API 中使用,而不会阻塞事件循环; 支持从 JSON、YAML 和其他格式中加载数据:可以轻松地从各种不同来源加载数据; 易于集成:可以直接与 FastAPI 集成,使得请求数据的验证和处理变得非常简单。 因此,使用 Pydantic 作为 FastAPI 的数据验证库,可以帮助开发人员更轻松地定义数据模型、验证请求数据并构建类型安全的 API。
并发和并行
异步有时候也叫做并发。并发(Concurrency)和并行(parallelism)是不同的概念,并发是指一个处理器同时处理多个任务,并行是指多个处理器同时处理多个不同的任务,并发是逻辑上的同时发生,并行是物理上的同时发生。
FastAPI 既支持异步并发,也支持多线程并行。
async 和 await
异步并发使用 async 和 await 来实现。
FastAPI 的请求生命周期
ASGI是 异步服务器网关接口,介于网络协议和 python 应用之间的标准接口,能够处理多种通用的协议类型
FastAPI 使用 Uvicorn 来启动服务,Uvicorn 是 Python 的 ASGI web 服务器实现。
直到最近,Python 还缺乏用于异步框架的最低层次的服务器/应用程序接口。ASGI 规范填补了这一空白,这意味着我们现在能够开始构建一套可跨所有异步框架使用的通用工具。
Uvicorn 目前支持 HTTP/1.1 和 WebSockets。
Uvicorn 基于 uvloop 和 httptools 构建的非常快速的 ASGI 服务器,uvloop 是 asyncio 的优秀替代。实现异步任务。
下图是 FastAPI 完整的请求生命周期

原文始发于微信公众号(有追求的开发者):FastAPI生命周期简析
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/256987.html