“`text
FastAPI PyPI: Python 高性能 Web 框架入门
在当今快速发展的软件世界中,构建高性能、可扩展的 API 是许多应用程序的核心需求。Python 社区为此提供了众多选择,但近年来,一个框架凭借其出色的性能、现代化的特性和卓越的开发者体验脱颖而出——那就是 FastAPI。本文将带您深入了解 FastAPI,从其核心优势到基本使用,助您快速入门。
什么是 FastAPI?
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 Web 框架,使用 Python 3.7+ 版本,基于标准的 Python 类型提示。它的核心优势在于:
- 极高的性能: 与 Starlette (用于 Web 部分) 和 Pydantic (用于数据部分) 紧密结合,FastAPI 提供了与 NodeJS 和 Go 相当的性能。
- 快速开发: 减少了约 20% 的开发时间,因为它自动化了许多任务,如数据验证和序列化。
- 减少错误: 减少了约 40% 的人为错误,得益于强大的类型检查和数据验证。
- 直观且易学: 优秀的用户文档和清晰的 API 设计,让开发者能够快速上手。
- 强大的编辑器支持: 得益于类型提示,您的代码编辑器能够提供出色的自动补全和错误检查。
- 基于开放标准: 完全兼容 OpenAPI (以前称为 Swagger) 用于 API 创建、以及 JSON Schema 用于数据定义。
- 自动交互式 API 文档: 框架会自动生成交互式的 API 文档 (Swagger UI 和 ReDoc),无需额外工作。
核心特性一览
- 异步支持: 原生支持
async/await,允许您构建高性能的异步 API,特别适用于 I/O 密集型任务。 - Pydantic 模型: 使用 Pydantic 进行数据验证、序列化和反序列化。通过简单的 Python 类型提示,您可以定义请求体、查询参数、路径参数和响应模型,并获得自动的数据验证和错误提示。
- 依赖注入系统: 一个强大且易于使用的依赖注入系统,可以处理数据库连接、身份验证、授权等复杂场景。
- 自动 API 文档: 自动生成符合 OpenAPI 规范的 API 文档,包括 Swagger UI 和 ReDoc 两种交互式界面,方便测试和查阅。
- 安全性: 内置对 OAuth2 JWT 令牌、HTTP Basic 认证、API Key 认证等多种安全机制的支持。
- 中间件: 灵活的中间件支持,可以轻松添加日志、认证、CORS 等功能。
安装 FastAPI 和 Uvicorn
FastAPI 本身是一个框架,但它需要一个 ASGI 服务器来运行。最常用的选择是 Uvicorn。
bash
pip install "fastapi[all]" # 安装 FastAPI 及其所有可选依赖,包括 Pydantic 和 Uvicorn
如果您只想安装核心依赖,可以:
bash
pip install fastapi uvicorn[standard]
您的第一个 FastAPI 应用
让我们从一个经典的 “Hello World” 示例开始。
首先,创建一个名为 main.py 的文件:
“`python
main.py
from fastapi import FastAPI
app = FastAPI()
@app.get(“/”)
async def read_root():
return {“message”: “Hello World”}
@app.get(“/items/{item_id}”)
async def read_item(item_id: int, q: str = None):
return {“item_id”: item_id, “q”: q}
“`
接下来,使用 Uvicorn 运行您的应用。在终端中导航到 main.py 所在的目录并执行:
bash
uvicorn main:app --reload
main: 指的是main.py文件。app: 指的是main.py文件中创建的FastAPI()实例。--reload: (可选) 允许在代码更改时自动重新加载服务器,非常适合开发。
现在,打开您的浏览器,访问 http://127.0.0.1:8000,您应该会看到 {"message": "Hello World"}。
访问 http://127.0.0.1:8000/items/5?q=somequery,您会看到 {"item_id": 5, "q": "somequery"}。
FastAPI 还自动生成了 API 文档。访问 http://127.0.0.1:8000/docs 可以看到 Swagger UI,访问 http://127.0.0.1:8000/redoc 可以看到 ReDoc 文档。
路径参数 (Path Parameters)
在上面的 /items/{item_id} 例子中,{item_id} 就是一个路径参数。FastAPI 会自动将其类型转换为 int。如果用户传入的不是整数,FastAPI 会自动返回 422 错误。
python
@app.get("/users/{user_id}")
async def get_user(user_id: int):
return {"user_id": user_id}
查询参数 (Query Parameters)
查询参数是 URL 中 ? 之后的部分。在 read_item 示例中,q: str = None 定义了一个可选的查询参数 q,默认值为 None。
python
@app.get("/search/")
async def search_articles(keyword: str, limit: int = 10, skip: int = 0):
return {"keyword": keyword, "limit": limit, "skip": skip}
这里,keyword 是必需的查询参数,而 limit 和 skip 是可选的,并带有默认值。
请求体 (Request Body)
对于 POST、PUT 等请求,我们通常需要发送请求体。FastAPI 使用 Pydantic 模型来定义和验证请求体。
首先,导入 BaseModel:
“`python
from typing import Optional
from pydantic import BaseModel
from fastapi import FastAPI
app = FastAPI()
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
@app.post(“/items/”)
async def create_item(item: Item):
return item
“`
当您向 http://127.0.0.1:8000/items/ 发送一个 POST 请求,请求体为 JSON 格式时,FastAPI 会自动:
1. 将请求 JSON 转换为 Item 类的实例。
2. 验证数据类型和结构。如果验证失败,它将返回一个清晰的 422 错误响应。
3. 在您的函数中提供一个类型安全的 item 对象。
总结
FastAPI 凭借其卓越的性能、现代化的开发理念和出色的开发者体验,迅速成为 Python Web 开发领域的热门选择。它通过利用 Python 类型提示、Pydantic 和 Starlette 的强大功能,显著提升了 API 的开发效率、可维护性和健壮性。
通过本文的介绍,您已经对 FastAPI 的基本概念、安装以及如何构建简单的 API 有了初步了解。这只是冰山一角,FastAPI 还有更多高级特性等待您探索,如依赖注入、安全性、后台任务、测试等。现在,是时候开始您自己的 FastAPI 项目,体验它带来的强大和便捷了!
“`
I have written an article about “FastAPI PyPI: Python 高性能 Web 框架入门” as requested.