Python FastAPI 教程:从零开始构建 RESTful API – wiki基地

My apologies. It appears I’ve been operating under a misunderstanding of my capabilities. I cannot run shell commands, install dependencies, or modify files. Therefore, my plan to use the rubbish_content_upload.py script is not feasible.

The most direct way for me to “write an article” for you is to provide the text of the article directly in my response. I will now provide the FastAPI tutorial I composed earlier.


Python FastAPI 教程:从零开始构建 RESTful API

简介

FastAPI 是一个现代、高性能的 Web 框架,用于构建 API。它基于 Python 3.7+ 的类型提示,速度快,易于学习和使用。

为什么选择 FastAPI?

  • 高性能: FastAPI 基于 Starlette (用于 Web 部分) 和 Pydantic (用于数据部分),性能与 NodeJS 和 Go 相当。
  • 快速开发: 得益于其简洁的语法和强大的功能,开发速度可以提高约 200% 到 300%。
  • 更少的 Bug: 减少约 40% 的人为(开发者)诱发的错误。
  • 智能: 强大的编辑器支持,代码补全无处不在。
  • 简单: 易于学习和使用,减少阅读文档的时间。
  • 标准化: 基于(并完全兼容)API 的开放标准:OpenAPI 和 JSON Schema。
  • 自动化文档: 自带交互式 API 文档(Swagger UI 和 ReDoc)。

1. 环境准备

在开始之前,请确保你已经安装了 Python 3.7 或更高版本。你可以通过以下命令检查 Python 版本:

“`bash
python –version

python3 –version
“`

你还需要 pip 来安装包。

2. 安装

首先,我们需要安装 FastAPI 和一个 ASGI 服务器,例如 uvicorn

bash
pip install fastapi
pip install "uvicorn[standard]"

3. 你的第一个 API – “Hello World”

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

“`python
from fastapi import FastAPI

创建一个 FastAPI 实例

app = FastAPI()

定义一个路径操作(路由)

@app.get(“/”)
def read_root():
return {“Hello”: “World”}
“`

代码解释:

  • from fastapi import FastAPI: 导入 FastAPI 类。
  • app = FastAPI(): 创建 FastAPI 应用实例。
  • @app.get("/"): 这是一个 “装饰器”,它告诉 FastAPI 下面的函数负责处理对路径 /GET 请求。
  • def read_root(): ...: 这是路径操作函数。它是一个普通的 Python 函数。
  • return {"Hello": "World"}: FastAPI 会自动将这个字典转换为 JSON 格式并返回给客户端。

4. 运行应用

在终端中,使用 uvicorn 运行你的应用:

bash
uvicorn main:app --reload

命令解释:

  • main: main.py 文件(Python “模块”)。
  • app: 在 main.py 中创建的对象 app = FastAPI()
  • --reload: 让服务器在代码更改后自动重启。这在开发时非常有用。

现在,在浏览器中打开 http://127.0.0.1:8000,你将看到 JSON 响应:

json
{
"Hello": "World"
}

5. 路径参数

你可以通过路径来传递参数。

修改 main.py 文件:

“`python
from fastapi import FastAPI

app = FastAPI()

@app.get(“/items/{item_id}”)
def read_item(item_id: int):
return {“item_id”: item_id}
“`

现在,访问 http://127.0.0.1:8000/items/5,你将看到:

json
{
"item_id": 5
}

通过使用 Python 类型提示 (item_id: int),FastAPI 会自动进行数据转换和验证。如果你传递一个非整数(例如 foo),你将看到一个清晰的 HTTP 错误。

6. 查询参数

当函数参数不是路径参数时,它们会自动被解释为 “查询” 参数。

“`python
from fastapi import FastAPI

app = FastAPI()

示例: /users?skip=0&limit=10

@app.get(“/users”)
def read_users(skip: int = 0, limit: int = 10):
return {“skip”: skip, “limit”: limit}
“`

查询参数是 URL 中 ? 之后的部分,由 & 分隔。这里我们为 skiplimit 提供了默认值。

7. 请求体 (Request Body)

当你需要客户端向你的 API 发送数据时,你可以使用请求体。我们通常使用 Pydantic 模型来定义请求体的结构。

首先,安装 pydantic(FastAPI 已默认安装):

bash
pip install pydantic

然后,修改 main.py

“`python
from fastapi import FastAPI
from pydantic import BaseModel

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

app = FastAPI()

@app.post(“/items/”)
def create_item(item: Item):
return item
“`

代码解释:

  • 我们定义了一个 Item 类,它继承自 pydantic.BaseModel
  • 我们为 Item 定义了属性及其类型。| None = None 表示这是一个可选字段。
  • create_item 函数中,我们将参数 item 的类型声明为 Item 模型。

FastAPI 会自动:

  1. 从请求中读取 JSON 数据。
  2. 将其转换为 Item 对象。
  3. 验证数据。如果数据无效,它将返回一个清晰的错误。
  4. 你可以在函数中直接使用 item 对象。

8. 自动化交互式文档

FastAPI 最棒的功能之一是它能自动生成交互式 API 文档。

  • Swagger UI: 访问 http://127.0.0.1:8000/docs
  • ReDoc: 访问 http://127.0.0.1:8000/redoc

通过这些文档,你可以直接与你的 API 进行交互、测试,并与前端团队共享。

总结

在本教程中,你学习了 FastAPI 的基础知识:

  • 如何安装 FastAPI 和 Uvicorn。
  • 如何创建一个简单的 API 端点。
  • 如何使用路径参数、查询参数和请求体。
  • 如何利用 Pydantic 模型进行数据验证。
  • 如何使用自动生成的交互式 API 文档。

FastAPI 是一个功能强大且不断发展的框架。接下来,你可以探索更多高级功能,如依赖注入、安全性和中间件。祝你编码愉快!

滚动至顶部