目录
WSGI(Web Server Gateway Interface)
1,WSGI接口 VS API接口
对比维度 | WSGI 接口 | API 接口 |
---|---|---|
核心作用 | 底层通信协议,协调 Web 服务器 和 Python Web 框架 的交互 | 提供具体功能服务(如数据查询、支付、天气等) |
功能范围 | 仅处理 HTTP 请求/响应的格式转换(如 URL 解析、Header 传递) | 自由设计业务逻辑(如数据库查询、第三方服务调用) |
是否涉及业务逻辑 | ❌ 不涉及 | ✅ 直接实现业务功能 |
典型例子 | Gunicorn、uWSGI、Flask/Werkzeug 的 WSGI 适配器 | RESTful API、支付 API、天气 API |
比喻 | 铁轨(运输工具) | 列车服务(座位、Wi-Fi、餐饮) |
依赖关系 | 是 Python Web 运行的基础 | 依赖 WSGI 或其他运行环境(如 ASGI) |
局限性 | 只能做“底层运输”,不能直接提供业务功能 | 可自由设计各种功能,满足不同需求 |
两者关系 | WSGI 是基础设施,负责请求的传递 | API 是业务实现,决定最终的功能体验 |
(1)WSGI接口(铁轨)
-
核心功能:
只是规定了一种标准格式,让Web服务器(如Nginx)和Python Web框架(如Django)能互相通信。- 输入:服务器把HTTP请求(如
GET /home
)转成Python能理解的格式(environ
字典)。 - 输出:Python程序返回的结果(如HTML页面)转成HTTP响应格式(状态码、头部、内容)。
- 输入:服务器把HTTP请求(如
-
特点:
- 不包含业务逻辑:它不知道你在做什么,只管“传递请求”和“返回结果”。
- 功能有限:只能处理HTTP协议层面的交互,比如解析URL、传递Header等。
-
类比:
就像铁轨,只负责把火车从A城市运到B城市,但不会关心车上有多少乘客、乘客是否舒适。
(2) API接口(列车服务)
-
核心功能:
提供具体的服务能力,比如:- 查询天气(调用气象API)
- 下单支付(调用电商API)
- 获取用户数据(调用数据库API)
-
特点:
- 包含业务逻辑:直接实现具体功能,比如通过API查询数据库返回用户信息。
- 功能丰富:可以设计各种复杂的操作(如分页、过滤、排序)。
-
类比:
就像列车本身,提供座位、空调、餐饮等服务,直接影响乘客的体验。
两者的协作关系
-
WSGI的作用:
- 确保Python Web程序能被服务器正确调用(比如Nginx通过WSGI把请求交给Django)。
- 没有WSGI,Django无法直接和Nginx通信(就像没有铁轨,火车无法运行)。
-
API的作用:
- 提供具体的功能(比如Django内部通过调用数据库API查询数据)。
- 用户最终接触的是API提供的服务(比如网页上显示的天气信息)。
2.什么是HTTP,且与WSGI的区别
对比项 | HTTP | WSGI |
---|---|---|
核心功能 | 传递信息(不管内容是什么) | 转换信息(适配 Python 和 HTTP) |
关注点 | 传输规则(如 GET /POST ) | 格式转换(Python ↔ HTTP)(专属服务) |
是否涉及业务逻辑 | ❌ 否 | ❌ 否(仅适配,不处理数据) |
依赖关系 | 可独立存在(如访问静态文件) | 依赖 HTTP(必须通过 HTTP 传输) |
HTTP(超文本传输协议)
- 核心职责:只负责传递信息(像快递员只管送货,不关心包裹内容)。
- 特点:
- 传输任何类型的数据(网页、图片、API 请求、视频等)。
- 定义了传输的格式(如
GET
/POST
请求、状态码200
/404
)。
WSGI(Web Server Gateway Interface)
- 核心职责:只负责转换信息(像集装箱适配器,确保货物能正确装卸)。
- 特点:
- 是 Python Web 程序和 HTTP 服务器之间的“翻译官”。
- 把 HTTP 的原始请求(如浏览器发的
GET /home
)转换成 Python 能理解的格式(如environ
字典)。 - 把 Python 程序的响应(如 HTML 页面)转换回 HTTP 格式(状态码、头部、内容)。
- 不处理业务逻辑,只做格式适配。
协作流程示例
- HTTP:浏览器发送
GET /home
请求 → 通过 HTTP 协议传输到服务器。 - WSGI:WSGI 服务器(如 Gunicorn)接收 HTTP 请求,转换成 Python 格式(
environ
字典),交给 Django/Flask 处理。 - Python 程序:Django/Flask 处理请求,生成 HTML 页面。
- WSGI:把 Python 的响应转换回 HTTP 格式(状态码
200
+ HTML 内容)。 - HTTP:将 HTTP 响应返回给浏览器。