Skip to content

Commit fc94ca6

Browse files
📝 更新文档,增强FastAPI与JSON模块的说明
- 在FastAPI文档中新增了ASGI服务器的介绍及其技术选型,提升了对框架的理解。 - 增加了FastAPI自动生成文档的功能说明,强调了Swagger UI和ReDoc的使用。 - 在JSON模块文档中详细列出了Python字典与JSON字符串的区别,帮助用户避免常见错误。
1 parent 0fee7a9 commit fc94ca6

2 files changed

Lines changed: 84 additions & 4 deletions

File tree

docs/docs/后端通识/接口开发.mdx

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,54 @@ API,全称为 **应用程序编程接口**(Application Programming Interface
5555

5656
安装:`pip install "fastapi[standard]"`
5757

58-
### 基础用法
58+
### ASGI
59+
60+
FastAPI 是一个现代的、快速的(高性能)、功能强大的 Web 框架,用于构建 API。运行在 ASGI 服务器上。
61+
62+
* **A (Asynchronous)** :异步。支持 `async/await` 特性,允许程序在等待 IO(如读数据库)时去处理其他请求。
63+
* **S (Server)** :服务器。
64+
* **G (Gateway)** :网关。
65+
* **I (Interface)** :接口/标准。
66+
67+
ASGI 服务器技术选型
68+
69+
Uvicorn:目前最流行的轻量级、超快速的 ASGI 服务器。
70+
71+
Daphne:最早的 ASGI 服务器(由 Django 团队开发)。
72+
73+
Hypercorn:支持 HTTP/2 和 HTTP/3 的 ASGI 服务器。
74+
75+
### 接口文档
76+
77+
FastAPI 最受开发者欢迎的特性之一就是它原生内置了两套完全自动生成的交互式文档。你不需要写一行额外的文档代码,只要你写好了 API 逻辑,文档就实时生成了。
78+
79+
这两套文档分别是 Swagger UI 和 ReDoc。
80+
81+
FastAPI 并不是硬生生写了两套网页。它的逻辑是:
82+
83+
1. **解析代码** :FastAPI 扫描你的路径、参数、Pydantic 模型。
84+
2. **生成 OpenAPI 规范** :它会自动生成一个符合国际标准 (OpenAPI/Swagger) 的 **JSON 架构文件** (你可以访问 `http://127.0.0.1:8000/openapi.json` 看到它)。
85+
3. **渲染 UI** :Swagger UI 和 ReDoc 只是两个“皮肤”,它们读取这个 JSON 文件并将其可视化。
86+
87+
#### Swagger UI
88+
89+
访问地址:http://127.0.0.1:8000/docs
5990

60-
相较于 Flask,FastAPI 会自动生成 2 种风格的 API 文档,地址为:http://127.0.0.1:8000/docshttp://127.0.0.1:8000/redoc
91+
核心用途:调试与测试。
92+
93+
直接测试 (Try it out):你不需要安装 Postman 或使用 curl 命令。点击 API 展开,点击 "Try it out",填入参数,直接就能看到服务器返回的结果。
94+
95+
实时校验:如果你定义的 Pydantic 模型要求某个字段是 int,你在 Swagger 里输入字符串,它会立刻变红提示你错误。
96+
97+
#### ReDoc
98+
99+
访问地址:http://127.0.0.1:8000/redoc
100+
101+
核心用途:阅读与归档。
102+
103+
极其整洁:它采用经典的三栏式布局(导航、说明、代码示例),非常适合给前端同学或第三方合作伙伴阅读。
104+
105+
### 基础用法
61106

62107
```python showLineNumbers
63108
from fastapi import FastAPI, Header, HTTPException, Query, Path
@@ -354,8 +399,29 @@ if __name__ == "__main__":
354399
uvicorn.run(app, host="0.0.0.0", port=8000)
355400
```
356401

402+
:::tip
403+
如何验证 FastAPI 的真实并发能力?
404+
405+
通过代码而不是浏览器。如果你在 **同一个浏览器** (比如 Chrome)中打开两个标签页,同时请求同一个 URL:
406+
407+
* **浏览器的锁定机制** :大多数现代浏览器为了防止过度消耗服务器资源,会对**完全相同的 URL** 进行连接锁定。它会等待第一个请求完成后,才发出第二个。
408+
:::
409+
410+
### 数据流
411+
412+
在 Web 接口请求中,数据主要分布
413+
414+
| **数据来源 (Location)** | **浏览器/HTTP 格式** | **FastAPI 参数定义方式** | **Python 转换后的类型** | **典型用途** |
415+
| ----------------------------- | ---------------------------- | ------------------------------ | ------------------------------ | ------------------ |
416+
| **Path (路径)** | `/users/10` | `user_id: int` | `int` | 定位特定资源 |
417+
| **Query (查询)** | `?q=fast&page=1` | `q: str, page: int` | `str`,`int` | 搜索、排序、分页 |
418+
| **Body (JSON)** | `{"id": 1, "name": "AI"}` | `item: Item(BaseModel)` | **Pydantic Model** | 提交复杂业务数据 |
419+
| **Body (Form)** | `user=me&pw=123` | `user: str = Form()` | `str` | 传统表单登录 |
420+
| **File (文件)** | 二进制流 (Multipart) | `file: UploadFile` | **SpooledTemporaryFile** | 上传头像、文档 |
421+
| **Header (请求头)** | `Authorization: Bearer...` | `token: str = Header()` | `str` | 鉴权、设备信息 |
422+
| **Cookie** | `session=xyz` | `id: str = Cookie()` | `str` | 身份追踪 |
357423

358-
### 传输二进制
424+
### 传输二进制案例
359425

360426
接口除了可以传输文本数据,还可传输图片、视频等数据,OpenCV 可以捕获屏幕,将两者结合起来,实现内网直播功能,可以在局域网内通过浏览器观看屏幕共享。
361427

docs/docs/选择编程语言/Python标准库/14互联网数据处理/json.mdx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11

22
## json 模块
33

4+
Python 字典 (Dict) 和 JSON 字符串 (String) 是导致校验失败的最常见原因。
5+
6+
| **特性** | **Python 字典 (Dict)** | **JSON 字符串 (String)** |
7+
| ------------------ | ------------------------------------- | ---------------------------------------- |
8+
| **引号** | 单引号 `'`或 双引号 `"`均可 | **必须**使用双引号 `"` |
9+
| **布尔值** | `True`/`False`(首字母大写) | `true`/`false`(全小写) |
10+
| **空值** | `None` | `null` |
11+
| **末尾逗号** | 允许有额外逗号 `{"a":1,}` | **严禁**有末尾逗号 `{"a":1}` |
12+
| **数据类型** | 可以存 Python 对象(如 `datetime`| 只能是字符串、数字、数组、对象等基本类型 |
13+
14+
如果你希望传输一个对象,键为 `A` ,值为 `1'"2`可以写为 `{"A":"1'\"2"}`,其中`\`是转义字符,和Python一致。
15+
416
json 模块提供了 python->json 以及 json->python 两种格式,转换规则如下
517

618
| JSON -> | Python -> | JSON |
@@ -16,7 +28,9 @@ json 模块提供了 python->json 以及 json->python 两种格式,转换规
1628
| | tuple | array |
1729

1830
注意:JSON 中的键-值对中的键永远是 str 类型的。当一个对象被转化为
19-
JSON 时,字典中所有的键都会被强制转换为字符串。这所造成的结果是字典被转换为 JSON 然后转换回字典时可能和原来的不相等。换句话说,如果 x 具有非字符串的键,则有 loads(dumps(x)) != x。
31+
JSON 时,字典中所有的键都会被强制转换为字符串。这所造成的结果是字典被转换为 JSON 然后转换回字典时可能和原来的不相等。
32+
33+
换句话说,如果 x 具有非字符串的键,则有 loads(dumps(x)) != x。
2034

2135
json 模块还有一些其他参数可以控制:编码形式、格式化输出等,不过很少用到
2236

0 commit comments

Comments
 (0)