跳到正文Lab学后总结 · Jimmy Huang's Blogclouds.yaml 或 OpenStack RC 文件;
让程序去请求 OpenStack,从而创建或管理云资源。
以后你不一定每次都登录网页控制台手动创建 VM,而是可以写脚本、用 API、用自动化工具来创建云资源。
Task 2:把 Todo 应用代码传到 VM,并安装依赖
接下来,你需要把 Todo 应用代码放到远程 VM 上。
这一步的意义是:把“本地代码”变成“运行在服务器上的后端服务”。
Task 3:运行 FastAPI Todo 服务,并测试 CRUD
你运行一个基于 FastAPI 的 Todo API 服务,然后通过:
可用材料中明确提到:DELETE 接口一开始可能是缺失的,Lab 需要你把它补出来。
API 不是网页按钮本身,而是一组可以被程序、命令行、前端或其他系统调用的规则化入口。
Task 4:用 Locust 做 Load Testing
最后,你会使用 Locust 对 Todo API 进行压测。
Locust 的作用是模拟很多“虚拟用户”不断访问你的 API,例如:
不断读取 Todo;
不断创建 Todo;
同时发出很多请求;
观察服务是否变慢、是否报错、吞吐量如何。
这一步的意义是:一个 API 只是功能正确还不够,还要知道它在压力下表现如何。
真实项目里,后端服务上线前通常也需要回答类似问题:
多少用户同时访问时还能稳定?
平均响应时间是多少?
请求失败率高不高?
哪些接口最容易成为瓶颈?
3. 每个核心组件有什么用
3.1 REST / RESTful API
REST 是一种设计 Web API 的风格。它强调用 URL 表示资源,用 HTTP 方法表示动作。
它是整个 Todo 服务的设计思想,让接口看起来清晰、统一、可预测。
API 可能会变得混乱,例如所有操作都用一个接口、动作名字随便写,前端或其他程序很难理解和维护。
3.2 HTTP 方法:GET / POST / PUT / DELETE
HTTP 方法就是客户端告诉服务器“我要做什么”的动作类型。
它把不同操作清楚地区分开,让 API 更符合 RESTful 风格。
如果所有请求都用同一种方法,代码虽然也可能跑,但语义会混乱,测试和维护都会变难。
3.3 URL / URI / Endpoint
URL / URI 可以理解成资源地址。Endpoint 是 API 对外暴露的具体入口。
3.4 JSON
JSON 是一种常见的数据交换格式,看起来很像 Python 字典,但本质上是文本格式。
客户端和 FastAPI 服务之间通过 JSON 传递 Todo 数据。
客户端和服务器就需要用别的格式沟通,例如 XML、表单、纯文本等,会降低通用性。
3.5 FastAPI
FastAPI 是一个 Python Web API 框架,用来快速创建后端接口。
它承载 Todo 应用的核心接口,例如创建、查看、更新、删除 Todo。
你仍然可以用 Flask、Django 或其他框架写 API,但 FastAPI 提供了非常方便的:
路由定义;
请求参数解析;
JSON 返回;
自动 API 文档;
类型提示支持。
Uvicorn 通常负责把 FastAPI 服务真正跑起来;
Swagger /docs 由 FastAPI 自动生成;
curl / Locust 会请求 FastAPI 暴露的接口;
VM 是 FastAPI 服务运行的地方。
3.6 Flask
Flask 也是 Python Web 框架。它更轻量、经典,常用于教学和小型 Web 服务。
Lab 标题包含 Flask / FastAPI,可用材料中也提到 Web 框架概念;但当前可确认的实践主线主要是 FastAPI Todo 服务。因此这里不把 Flask 当成已确认的核心实操对象。
3.7 OpenStack API / OpenStackSDK
OpenStack 是云平台;OpenStack API 是它对外提供的操作入口;OpenStackSDK 是 Python 里调用这些 API 的工具包。
让你用代码或配置去创建、查询、管理云资源,而不是只依赖网页控制台。
你只能手动点界面创建资源,无法体验 Infrastructure Automation,也难以批量、重复、自动化管理云资源。
clouds.yaml / RC 文件提供认证信息;
Python 脚本通过 SDK 调 OpenStack;
OpenStack 创建出来的 VM 用来运行 FastAPI Todo 服务。
3.8 clouds.yaml / OpenStack RC 文件
它们是连接 OpenStack 的身份和环境配置文件,通常包含认证地址、项目、用户名、区域等信息。
让你的程序知道“我是谁、我要连接哪个云环境、我有没有权限操作资源”。
SDK 或命令行工具不知道如何认证,也就无法调用 OpenStack API。
3.9 Ubuntu VM
VM 是云平台上租出来的一台虚拟 Linux 服务器。
你只能在本地跑 API,无法体验远程部署、网络访问、SSH、端口、安全组、压测等云环境特性。
3.10 SSH / scp / FileZilla
SSH:远程登录服务器;
scp:通过命令行上传/下载文件;
FileZilla:图形界面上传/下载文件。
你可能无法方便地把 Todo 应用部署到 VM,也无法远程启动或排查服务。
3.11 curl
curl 是命令行 HTTP 客户端,可以用来发送 GET、POST、DELETE 等请求。
验证你的 API 是否真的能被程序调用,而不只是浏览器里看起来能打开。
你会过度依赖网页界面,不容易理解 API 的真实请求和响应过程。
3.12 Swagger / FastAPI /docs
FastAPI 自动生成的交互式 API 文档页面。
让你不用手写 curl 命令,也可以在浏览器里测试 API。
你仍然可以用 curl 或 Postman 测试,但新手更难快速看懂接口有哪些、参数是什么、返回什么。
3.13 Locust
Locust 是一个 Python 压测工具,可以模拟很多用户同时访问你的服务。
帮助你观察 Todo API 在高并发请求下的表现。
你只能知道“一个请求能不能成功”,但不知道“很多请求同时来时会不会崩、会不会变慢”。
4. 用初学者类比解释
可以把整个 Lab 想象成一个“云小区 + Todo 办事大厅”。
4.1 OpenStack 像一个云小区物业
房间:VM;
门禁:认证信息;
网络:小区道路;
安全规则:门卫和通行规则。
你可以去物业柜台手动申请房间,也可以通过线上系统 API 自动申请。
4.2 clouds.yaml / RC 文件像你的工牌
你要让程序帮你申请 VM,程序不能空口说“我要一台服务器”。
我是谁;
我属于哪个项目;
我要连接哪个云平台;
我有没有权限。
所以 clouds.yaml / RC 文件就像你的工牌和门禁卡。
4.3 VM 像你租到的一间办公室
你创建出来的 Ubuntu VM,就像你在云小区里租到的一间办公室。
Python 环境;
Todo 应用代码;
FastAPI 服务;
日志和运行命令。
别人要访问你的服务,就相当于来这间办公室的前台办事。
4.4 FastAPI 像办公室前台
“我要查看所有 Todo”;
“我要新增一个 Todo”;
“我要修改这个 Todo”;
“我要删除这个 Todo”。
4.5 Endpoint 像不同业务窗口
4.6 JSON 像标准申请表
当你创建 Todo 时,需要告诉服务器内容是什么。
4.7 curl 像快递员
GET:去问一问;
POST:递交新申请;
PUT:修改已有申请;
DELETE:撤销申请。
4.8 Locust 像一群群众演员
前台处理速度够不够;
队伍会不会变长;
会不会有人办不成功;
哪个窗口最容易堵住。
5. 重点区分容易混淆的概念
5.1 REST 和 FastAPI 的区别
REST 是设计思想,FastAPI 是实现工具。
5.2 OpenStack API 和你自己写的 FastAPI API 的区别
OpenStack API 是“控制云资源的 API”;FastAPI Todo API 是“你自己业务系统的 API”。
5.3 VM 和 API 服务的区别
5.4 SSH / scp 和 HTTP / curl 的区别
SSH/scp 是“管理服务器”;curl 是“访问服务”。
5.5 Swagger /docs 和真正 API Endpoint 的区别
/docs 是说明书和测试面板,不是业务数据本身。
5.6 JSON 和 Python 字典的区别
JSON 是“发在网络上的表格文本”;dict 是“Python 代码里的对象”。
5.7 功能测试和压测的区别
curl 测“对不对”,Locust 测“扛不扛得住”。
5.8 谁能访问谁?
你的电脑可以通过 SSH 管理 VM,前提是密钥、用户名、网络都正确;
你的电脑可以通过 HTTP 请求访问 FastAPI,前提是服务正在运行并且端口允许访问;
FastAPI 运行在 VM 上;
OpenStack API 负责创建或管理 VM;
没有 OpenStack 凭证的用户不能随便创建云资源;
如果安全组、防火墙或服务监听地址没配置好,即使 FastAPI 跑了,外部也可能访问不到。
5.9 哪个是入口?哪个是数据库?哪个是权限控制?哪个是网络控制?
6. 这个 Lab 有什么实际用途
这个 Lab 的实际价值很高,因为它把后端开发、云计算和 DevOps 的几个关键能力串起来了。
6.1 后端开发:理解 API 服务怎么写
真实项目里,移动 App、网页前端、第三方系统通常都不是直接访问数据库,而是访问后端 API。
API 怎么定义;
请求怎么传参;
响应怎么返回 JSON;
CRUD 如何映射到 HTTP 方法;
为什么 API 文档很重要。
6.2 云计算:理解云平台为什么可以自动化
你通过 OpenStack API / SDK 创建资源,其实是在学习更通用的云自动化思维。
以后换成 AWS、Azure、GCP,也会遇到类似概念:
API;
SDK;
credentials;
region/project;
VM/instance;
network/security rules。
6.3 DevOps:理解部署不是只写代码
一个 API 服务要真正跑起来,除了写代码,还要考虑:
代码怎么上传到服务器;
Python 依赖怎么安装;
服务怎么启动;
端口怎么暴露;
如何远程排查问题;
如何测试和压测。
这就是 DevOps 里“开发 + 部署 + 运维”的基础。
6.4 测试:从能跑到能验证
Swagger 和 curl 帮你验证功能是否正确。
功能测试保证“逻辑对”;
压力测试保证“上线后扛得住”。
6.5 安全和权限:理解不是谁都能访问一切
OpenStack 需要凭证才能操作;
VM 需要 SSH key 才能登录;
API 端口没开放时外部访问不到;
应用是否需要用户认证,要看业务需求和代码设计。
7. 生动形象的示意图
下面用 Mermaid 画图。Markdown 查看器如果支持 Mermaid,就可以渲染成图;如果不支持,也可以直接阅读文本结构。
最后你要记住的核心区别
OpenStack API:控制云平台资源,例如创建 VM。
FastAPI API:你自己写的 Todo 后端服务,处理业务请求。
VM:运行 API 的服务器,不是 API 本身。
Endpoint:API 的具体入口,例如 /todos。
JSON:客户端和服务器交换数据的标准格式。
curl / Swagger:用来测试功能是否正确。
Locust:用来测试很多用户同时访问时服务是否稳定。
SSH / scp / FileZilla:用来管理服务器和传代码,不是调用业务 API 的主要方式。
凭证和网络规则:决定你能不能管理云资源、能不能访问服务器服务。
这个 Lab 的学习主线:先调用别人的云 API,再写自己的业务 API,最后测试和压测自己的 API。
flowchart TB
Title["Lab 05:RESTful Services / Flask / FastAPI 学习地图"]:::title
subgraph Local["你的电脑 / 本地工具"]
User["你:开发者 / 测试者"]
Browser["浏览器<br/>打开 /docs"]
Curl["curl<br/>命令行发送 HTTP 请求"]
Locust["Locust<br/>模拟很多用户压测"]
SDK["Python + OpenStackSDK<br/>调用云平台 API"]
Cred["clouds.yaml / RC file<br/>身份凭证"]
end
subgraph Cloud["OpenStack 云平台"]
OSAPI["OpenStack REST API<br/>云资源管理入口"]
VM["Ubuntu VM<br/>运行后端服务的服务器"]
Sec["网络 / 安全组 / 防火墙<br/>决定端口能不能访问"]
end
subgraph App["VM 里的 Todo API 服务"]
FastAPI["FastAPI Todo Service<br/>业务 API 前台"]
Docs["Swagger /docs<br/>自动 API 文档"]
Todos["Todo 数据<br/>具体存储方式以代码为准"]
end
Block1["❌ 没有 clouds.yaml / RC 凭证<br/>不能随便创建云资源"]:::blocked
Block2["❌ 端口未开放或服务未正确监听<br/>外部无法访问 FastAPI"]:::blocked
Summary["你要记住的核心区别:<br/>OpenStack API 用来创建/管理云资源;<br/>FastAPI API 是你自己写的 Todo 业务服务;<br/>curl / Swagger 测功能;Locust 测压力;<br/>SSH / scp / FileZilla 负责管理服务器和传代码。"]:::summary
Title --> User
User --> Browser
User --> Curl
User --> Locust
User --> SDK
Cred --> SDK
SDK -->|"带凭证调用"| OSAPI
OSAPI -->|"创建 / 管理"| VM
VM --> Sec
Sec --> FastAPI
FastAPI --> Docs
FastAPI --> Todos
Browser -->|"访问 /docs"| Docs
Curl -->|"GET / POST / PUT / DELETE"| FastAPI
Locust -->|"大量并发请求"| FastAPI
User -.->|"没有凭证"| Block1
Block1 -.-> OSAPI
Browser -.->|"如果网络未放行"| Block2
Block2 -.-> FastAPI
FastAPI --> Summary
classDef title fill:#e8f1ff,stroke:#2b6cb0,stroke-width:2px,color:#111;
classDef blocked fill:#ffe6e6,stroke:#d00000,stroke-width:2px,color:#111;
classDef summary fill:#fff7d6,stroke:#b7791f,stroke-width:2px,color:#111;
{
"title": "finish lab",
"completed": false
}
{
"title": "submit lab",
"completed": false
}