Skip to content

先理解 Web、HTTP 与 API ​

1.1 FastAPI 用来做什么 ​

假设你要做一个待办事项应用。页面负责显示按钮、输入框和列表;服务器负责保存任务、读取任务、判断用户是否有权限。

FastAPI 帮你编写服务器上的接口,例如:

  • 获取全部任务。
  • 创建一个任务。
  • 把某个任务标记为已完成。
  • 删除一个任务。

API 可以理解为“别人按照约定调用你程序的入口”。 调用者可以是网页、手机应用、另一个 Python 程序,也可以是其他后端服务。

FastAPI 的核心工作,是把“某种 HTTP 请求”对应到“某个 Python 函数”,并根据声明解析数据、校验数据、组织响应和生成接口文档。官方第一个应用说明

1.2 一次请求的过程 ​

text
用户点击“查看任务”
    ↓
客户端发送 GET /todos/1
    ↓
服务器接收请求
    ↓
FastAPI 找到处理 GET /todos/{todo_id} 的函数
    ↓
解析 todo_id,执行校验,运行函数
    ↓
函数查询任务并返回数据
    ↓
客户端收到状态码和 JSON,显示到页面

客户端是发起请求的一方;服务器是接收并处理请求的一方。浏览器只是客户端的一种。

1.3 URL 的组成 ​

text
http://127.0.0.1:8000/todos/3?done=true
│      │         │    │       └─ 查询字符串
│      │         │    └───────── 路径
│      │         └────────────── 端口
│      └──────────────────────── 主机地址
└─────────────────────────────── 协议

127.0.0.1 指当前电脑;8000 是服务监听的端口。路径 /todos/3 表示某个具体任务,done=true 是附加条件。

1.4 HTTP 请求中有什么 ​

部分作用例子
方法表达操作意图GET、POST
路径指定接口或资源/todos/3
查询参数提供筛选、分页等条件?skip=0&limit=10
请求头提供认证、格式等信息Authorization、Content-Type
请求体携带较复杂的数据新任务的标题和描述

请求体是请求的“正文”。创建任务通常需要正文;查询任务通常用路径和查询参数。

1.5 JSON 是什么 ​

JSON 是一种常用的数据交换格式,长得很像 Python 字典,但二者不是同一种东西。

json
{
  "title": "学习 FastAPI",
  "done": false,
  "description": null,
  "tags": ["Python", "后端"]
}
含义PythonJSON
布尔真Truetrue
布尔假Falsefalse
空值Nonenull
字符串单引号或双引号双引号
对象dictobject
数组listarray

你在 Python 函数中通常返回字典或模型,框架再把它序列化为 JSON。序列化就是把程序中的对象转换成适合传输的形式。

1.6 四个容易混淆的角色 ​

名称可以怎样理解
FastAPI组织接口、参数、依赖和文档的框架
StarletteFastAPI 所使用的底层 Web 工具
Pydantic根据类型与规则解析、校验结构化数据
Uvicorn接收网络请求并运行应用的 ASGI 服务器

先记住“框架负责处理规则,服务器负责接收网络请求”。ASGI 的详细协议可以以后再学。官方 ASGI 服务器说明