1. FastAPI简介
FastAPI 是一个现代、快速(高性能)的 Python Web 框架,用于构建 API。它基于 Python 3.6 及以上版本,并且利用了 Python 类型提示的功能。FastAPI 旨在帮助开发者快速构建出高性能的 API,并且具有自动生成文档的功能。
参考文档:
2. FastAPI的特性
FastAPI的关键特性包括:
- 快速:可与 NodeJS 和 Go 并肩的极高性能,是最快的 Python Web 框架之一。高性能归功于 Starlette 和 Pydantic,Starlette 提供了底层的异步功能,而 Pydantic 则处理数据解析和验证。
- 高效编码:提高功能开发速度约 200% 至 300%。
- 更少 bug:减少约 40% 的人为(开发者)导致错误。
- 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
- 简单:设计的易于使用和学习,阅读文档的时间更短。
- 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
- 健壮:生产可用级别的代码。还有自动生成的交互式文档。
- 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。
3. FastAPI与ASGI
Django是一个Python Web框架,同时也可以作为Web Server,只不过性能差一些。我们通常会在Django的上层配置一个WSGI或ASGI服务器,用来提升性能。
而FastAPI这个Python Web框架,本身是不可以作为Web Server的,因此必须要配置一个ASGI服务器。
ASGI(Asynchronous Server Gateway Interface)是一种异步服务器网关接口,它是WSGI(Web Server Gateway Interface)的扩展和进化。ASGI旨在为Python Web服务、框架和应用之间提供一个标准的异步接口,以适应现代Web开发中对异步处理和多种协议支持的需求。
ASGI的主要特点包括:
- 异步处理能力:ASGI支持异步编程,允许同时处理多个请求,通过使用事件循环和协程实现高并发性能,从而更好地应对大量并发请求。
- 多协议支持:ASGI不仅支持传统的HTTP请求,还支持WebSocket、HTTP/2以及未来的协议,使其能够适应不断发展的Web技术。
- 性能提升:由于ASGI的异步特性,它能够更高效地处理异步请求,提升性能和响应速度。
- 框架支持:现代的Python Web框架,如FastAPI、Tornado以及Django 3.1以后的版本,都支持ASGI,这使得开发者可以利用ASGI的优势构建高性能的Web应用程序。
ASGI服务器,如Uvicorn、Hypercorn和Daphne,实现了这种异步的网关接口,允许开发者构建异步Web应用程序。这些服务器能够处理来自客户端的请求,并将其传递给ASGI应用程序,同时ASGI应用程序可以异步地处理这些请求并返回响应。
总的来说,ASGI是构建现代、高性能、异步Web应用程序的关键技术,它通过支持异步处理和多协议,为Python Web开发提供了强大的支持。
4. 安装使用FastAPI
4.1. 安装FastAPI和Uvicorn
1、安装fastapi
1 | pip install fastapi |
2、安装uvicorn
1 | pip install uvicorn |
Uvicorn是一个轻量级的 ASGI 服务器,用于运行 FastAPI 应用。
生产环境的 ASGI 服务器通常使用 Uvicorn 或者 Hypercorn。
4.2. Hello World
1、编写代码 main.py
1 | from typing import Union |
2、运行代码
1 | uvicorn main:app --reload |
--reload 参数使得服务器在代码改变时自动重载,适用于开发阶段。
3、测试访问
1 | curl http://127.0.0.1:8000 |
4、查看接口文档
浏览器访问 http://127.0.0.1:8000/docs
我们会看到自动生成的交互式 API 文档(由 Swagger UI 生成)。
4.3. 启动命令常规化
uvicorn main:app --reload 这种启动命令,不方便记忆。
本节中,我们将启动命令改为:python main.py
实现方法:main.py 脚本中调用 uvicorn.run()
1 | if __name__ == "__main__": |
5. FastAPI基础
5.1. 路径操作和参数
FastAPI 允许定义路径操作装饰器(如 @app.get, @app.post 等),并直接在函数参数中声明预期的请求数据类型。
1 |
|
5.2. 请求体和JSON
对于需要请求体的接口,我们可以使用 Pydantic 模型来定义请求体的结构。
1 | from pydantic import BaseModel |
5.3. 数据验证
FastAPI 会自动验证传入的数据是否符合预期的类型和结构,并在不符合时返回错误信息。
5.4. 文档和交互式API
访问 http://127.0.0.1:8000/docs 或 http://127.0.0.1:8000/redoc 可以查看自动生成的 API 文档。
这些文档是交互式的,可以直接在浏览器中测试 API。
5.5. 进阶使用
FastAPI 还支持依赖注入、中间件、安全性(如 OAuth2)、数据库集成等高级功能。
6. FastAPI项目结构规划
参考文档:
- FastAPI全栈模板
- github - fastapi/full-stack-fastapi-template
- Python 项目工程化开发指南 - 项目结构
- github - pypa/sampleproject
- FastAPI 项目结构:打造模块化清晰的大型应用架构
- 使用FastAPI来开发项目,项目的目录结构如何规划
6.1. 推荐项目结构一
1 | sampleproject |
6.2. 推荐项目结构二
1 | my_fastapi_project/ |
7. 小结
FastAPI 是一个强大的 Python Web 框架,特别适合用于构建 API。
通过上面的内容,我们可以快速开始使用 FastAPI 来构建我们的应用。
FastAPI 的文档和社区资源非常丰富,可以帮助我们深入了解和解决更复杂的问题。推荐阅读官方文档以获取更多高级特性和最佳实践。