从零开始学 FastAPI:Python Web 开发新选择 – wiki词典


从零开始学 FastAPI:Python Web 开发新选择

在 Python Web 开发领域,Flask 和 Django 长期以来一直是两大主流框架。然而,随着异步编程和高性能需求的日益增长,一个名为 FastAPI 的新星正迅速崛起,成为许多开发者构建 API 和微服务的首选。本文将带你从零开始,了解 FastAPI 的魅力所在,并指导你迈出使用它的第一步。

为什么选择 FastAPI?

FastAPI 是一个现代、快速(高性能)、高生产力、基于标准(OpenAPI & JSON Schema)的 Python Web 框架。它的核心优势体现在以下几个方面:

  1. 极高的性能:FastAPI 基于 Starlette(用于 Web 部分)和 Pydantic(用于数据部分),并充分利用了 Python 的类型提示特性。这使得它能够提供与 Go 或 Node.js 等高性能语言相媲美的速度,尤其在处理异步请求时表现卓越。
  2. 快速的开发体验:由于其强大的类型提示支持,FastAPI 提供了自动的数据验证、序列化和反序列化,极大减少了样板代码。同时,内置的交互式 API 文档(Swagger UI 和 ReDoc)能让你在编写代码的同时自动生成详尽的 API 文档,实现“所写即所得”。
  3. 强大的数据验证:通过 Pydantic,你可以使用标准的 Python 类型提示来定义数据模型。FastAPI 会自动验证传入请求的数据,并在数据不符合预期时返回清晰的错误信息。这不仅提高了 API 的健壮性,也大大简化了数据处理逻辑。
  4. 异步支持:FastAPI 从设计之初就支持 async/await 语法,使得它能够原生处理异步请求,非常适合构建高并发的 I/O 密集型应用。
  5. 易学易用:尽管功能强大,FastAPI 的 API 设计直观且易于理解。如果你有 Flask 或其他 Web 框架的基础,学习 FastAPI 将会非常顺畅。
  6. 成熟的生态系统:FastAPI 兼容并深度整合了许多流行的 Python 库,例如 SQLAlchemy、Requests、Celery 等,使得扩展功能变得轻而易举。

入门:你的第一个 FastAPI 应用

让我们通过一个简单的例子来感受 FastAPI 的开发流程。

1. 环境准备

首先,确保你安装了 Python 3.7+。然后,安装 FastAPI 和 ASGI 服务器(如 Uvicorn):

bash
pip install fastapi uvicorn

2. 编写你的第一个 API

创建一个名为 main.py 的文件,并添加以下代码:

“`python

main.py

from fastapi import FastAPI

创建一个 FastAPI 应用实例

app = FastAPI()

定义第一个路由:根路径

@app.get(“/”)
async def read_root():
return {“message”: “Hello, FastAPI!”}

定义一个带路径参数的路由

@app.get(“/items/{item_id}”)
async def read_item(item_id: int, query_param: str = None):
“””
获取指定 ID 的 Item。
item_id 是路径参数,必须是整数。
query_param 是可选的查询参数。
“””
return {“item_id”: item_id, “query_param”: query_param}

定义一个带请求体的 POST 路由

from pydantic import BaseModel

class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None

@app.post(“/items/”)
async def create_item(item: Item):
“””
创建一个新的 Item。
请求体必须符合 Item 模型。
“””
item_dict = item.dict()
if item.tax:
price_with_tax = item.price + item.tax
item_dict.update({“price_with_tax”: price_with_tax})
return item_dict
“`

代码解析:

  • from fastapi import FastAPI: 导入 FastAPI 类。
  • app = FastAPI(): 创建 FastAPI 应用实例。
  • @app.get("/"): 这是一个装饰器,用于定义一个处理 HTTP GET 请求的路由,路径为 /async def 表明这是一个异步函数。
  • read_root(): 当访问 / 路径时,这个函数会被调用,并返回一个 JSON 响应。
  • @app.get("/items/{item_id}"): 定义一个带有路径参数 item_id 的 GET 路由。item_id: int 声明了参数类型,FastAPI 会自动进行类型转换和验证。
  • query_param: str = None: 定义一个可选的查询参数,默认值为 None
  • class Item(BaseModel): 使用 Pydantic 的 BaseModel 定义了一个数据模型。这会自动为你的 API 请求体提供验证、序列化和生成文档的功能。str | None 是 Python 3.10+ 的类型提示,等同于 Optional[str]
  • @app.post("/items/"): 定义一个处理 HTTP POST 请求的路由。
  • create_item(item: Item): FastAPI 会自动读取请求体,并将其解析为 Item 类的实例,同时进行数据验证。

3. 运行你的应用

在终端中,进入 main.py 所在的目录,然后运行 Uvicorn:

bash
uvicorn main:app --reload

  • main:app: 指示 Uvicorn 找到 main.py 文件中的 app 实例。
  • --reload: 开启热重载模式,当你修改代码时,应用会自动重启。

你将看到类似以下的输出:

INFO: Will watch for changes in these directories: ['C:\\Users\\test\\Desktop\\proj']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [xxxxx] using WatchFiles
INFO: Started server process [xxxxx]
INFO: Waiting for application startup.
INFO: Application startup complete.

现在,你的 FastAPI 应用已经在 http://127.0.0.1:8000 上运行了!

4. 探索 API 文档

打开浏览器,访问 http://127.0.0.1:8000/docs。你将看到由 Swagger UI 自动生成的交互式 API 文档。你可以直接在这里测试你的 API 端点,发送请求并查看响应。

或者,访问 http://127.0.0.1:8000/redoc,查看另一种风格的 API 文档。

更多特性和进阶

FastAPI 的功能远不止于此,以下是一些值得你深入探索的特性:

  • 依赖注入系统:FastAPI 拥有一个非常强大的依赖注入系统,可以让你轻松管理数据库连接、用户认证、外部服务等依赖。
  • 安全认证:内置支持 OAuth2、JWT 等多种认证方式,以及 FastAPI 的安全工具。
  • 数据库集成:可以无缝集成 SQLAlchemy、Tortoise ORM、Peewee 等 ORM,支持同步和异步数据库操作。
  • WebSocket:支持构建实时通信应用。
  • 后台任务:可以方便地集成 Celery 等任务队列处理耗时操作。
  • 测试:FastAPI 提供了一套易于使用的测试客户端,方便你编写自动化测试。

总结

FastAPI 作为 Python Web 开发领域的新选择,凭借其卓越的性能、高效的开发体验、强大的数据验证和完善的异步支持,正快速获得开发者的青睐。无论你是构建 RESTful API、微服务,还是需要高性能的 Web 应用,FastAPI 都是一个值得深入学习和使用的框架。

从本文的入门示例开始,你已经迈出了拥抱 FastAPI 的第一步。现在,是时候查阅官方文档,探索更多高级特性,并将你的想法付诸实践了!


滚动至顶部