FastAPI PyPI: Python 高性能 Web 框架入门 – wiki词典

“`text

FastAPI PyPI: Python 高性能 Web 框架入门

在当今快速发展的软件世界中,构建高性能、可扩展的 API 是许多应用程序的核心需求。Python 社区为此提供了众多选择,但近年来,一个框架凭借其出色的性能、现代化的特性和卓越的开发者体验脱颖而出——那就是 FastAPI。本文将带您深入了解 FastAPI,从其核心优势到基本使用,助您快速入门。

什么是 FastAPI?

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 Web 框架,使用 Python 3.7+ 版本,基于标准的 Python 类型提示。它的核心优势在于:

  1. 极高的性能: 与 Starlette (用于 Web 部分) 和 Pydantic (用于数据部分) 紧密结合,FastAPI 提供了与 NodeJS 和 Go 相当的性能。
  2. 快速开发: 减少了约 20% 的开发时间,因为它自动化了许多任务,如数据验证和序列化。
  3. 减少错误: 减少了约 40% 的人为错误,得益于强大的类型检查和数据验证。
  4. 直观且易学: 优秀的用户文档和清晰的 API 设计,让开发者能够快速上手。
  5. 强大的编辑器支持: 得益于类型提示,您的代码编辑器能够提供出色的自动补全和错误检查。
  6. 基于开放标准: 完全兼容 OpenAPI (以前称为 Swagger) 用于 API 创建、以及 JSON Schema 用于数据定义。
  7. 自动交互式 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 是必需的查询参数,而 limitskip 是可选的,并带有默认值。

请求体 (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.

滚动至顶部