后端是什么?
方法论: 从日常现象出发,理解后端的5个最核心概念(第一性原理)。
📖 本节目标
学完本节,你将理解:
- ✅ 后端到底是干什么的
- ✅ 数据为什么存在云端
- ✅ API 请求是怎么回事
- ✅ 数据库为什么像 Excel
- ✅ Token 验证的原理
- ✅ 为什么不能在前端做所有事
预计用时: 30 分钟
0. 开始前必看:Vibe Coding 心法
0.1 不要被代码吓到!
本节会出现一些代码示例,但你不需要看懂代码!
你只需要理解的(核心概念):
| 概念 | 你要懂什么 | 为什么重要 |
|---|---|---|
| 数据在云端 | 数据存在远程服务器,不在你的设备 | 理解为什么换手机数据还在 |
| API请求 | 前端通过API和后端对话 | 理解前后端如何通信 |
| 数据库表格 | 数据像Excel一样存在表格里 | 理解数据如何组织 |
| Token验证 | 登录后拿到“通行证“ | 理解身份验证原理 |
| 业务逻辑 | 复杂处理在后端做 | 理解为什么需要后端 |
AI 可以代劳的(具体代码):
| 代码类型 | 例子 | 不用背! |
|---|---|---|
| API 请求代码 | fetch('/api/login', {...}) | 让 AI 写 ✅ |
| 数据库查询 | SELECT * FROM users | 让 AI 写 ✅ |
| Token 生成 | jwt.encode(...) | 让 AI 写 ✅ |
| 密码加密 | hashlib.sha256(...) | 让 AI 写 ✅ |
记住: 看到代码就跳过,只看注释和说明!本节重点是理解5个核心概念,不是学写代码。
1. 先看三个日常现象
现象1: 换手机登录微信,聊天记录还在
你有没有想过:
- 你的聊天记录存在哪里?
- 为什么换了手机,记录还在?
- 如果存在手机里,那手机丢了怎么办?
答案: 聊天记录存在微信的服务器(云端),不在你手机里。
现象2: 删除淘宝 APP 重装,购物车商品还在
- 你的购物车数据存在哪里?
- 为什么 APP 删了重装,购物车还是那些东西?
答案: 购物车数据存在淘宝的服务器(云端),不在你手机里。
现象3: 你朋友也能看到你发的朋友圈
- 朋友圈的照片和文字存在哪里?
- 为什么你的朋友能看到?
答案: 朋友圈内容存在微信的服务器(云端),所有好友从服务器获取。
🎯 后端的5个核心知识点
1️⃣ 数据存在云端服务器(不是你的设备里)
日常类比
数据库 = 银行的金库
- 你的钱不在钱包里,在银行
- 你的 APP = ATM 机(只是操作界面,不存钱)
- 服务器 = 银行总部(24小时运行,处理所有人的请求)
底层原理
┌─────────────┐ 网络 ┌──────────────┐
│ 你的手机 │ ────────────────> │ 云端服务器 │
│ (显示界面) │ <──────────────── │ (存储数据) │
└─────────────┘ └──────────────┘
┌──────────────┐
│ 数据库 │
│ (真正的仓库) │
└──────────────┘
实际案例
当你点击“保存笔记“按钮时:
前端: 把笔记内容打包 → 发送到服务器
后端: 收到内容 → 存进数据库
数据库: id=123, 标题="今天学习", 内容="后端好难"
当你换设备登录时:
前端: 发送"获取我的笔记"请求
后端: 从数据库查询 → 找到 id=123 的笔记
前端: 收到数据 → 显示在屏幕上
为什么不能把数据存在手机里?
- ❌ 换手机数据就丢了
- ❌ 其他人无法看到你的数据(如朋友圈)
- ❌ 手机存储空间有限
- ✅ 存在云端,随时随地可以访问
2️⃣ 每次操作都是发送 API 请求(就像点外卖)
日常类比
API = 餐厅的点菜系统
- 你(前端)不能直接进后厨(数据库)
- 必须通过服务员(API)下单
- 后厨(后端)做好菜,通过服务员送回来
❓ 小白疑问:API 到底长什么样?是一个网址链接吗?
答案:是的!API 就是一个特殊的网址(URL)。
例如:
- 你在浏览器输入
https://baidu.com→ 看到百度首页(这是给人看的) - 后端 API 是
https://api.example.com/login→ 返回数据(这是给程序看的)
如何测试 API? 有个叫 Postman 的工具(就像 API 的“试衣间“):
- 你输入 API 地址:
https://api.example.com/login - 选择操作类型:POST(创建)
- 填写数据:
{username: "test", password: "123"} - 点击“发送“→ 看到返回结果:
{code: 200, msg: "登录成功"}
类比:
- 浏览器 = 逛网页的工具(给人看的)
- Postman = 测试 API 的工具(给开发者测试的)
- 后端 API = 数据的“取货窗口“(程序从这里拿数据)
💡 不用慌:你不需要现在就下载 Postman!下一章《环境搭建》会手把手教你安装和使用。现在只需要知道:API 是一个网址,有工具可以测试它。
底层原理
用户操作 API请求 服务器处理
───────────────────────────────────────────────────────────
点击"登录"按钮 → POST /api/login → 验证账号密码
{username, password}
点击"发布笔记" → POST /api/notes → 保存到数据库
{title, content}
打开笔记列表 → GET /api/notes → 查询数据库
?user_id=123
API 的4种常见操作
| 操作 | API方法 | 类比 | 示例 |
|---|---|---|---|
| 查看 | GET | 看菜单 | GET /api/notes 获取笔记列表 |
| 创建 | POST | 点菜 | POST /api/notes 创建新笔记 |
| 修改 | PUT | 改菜 | PUT /api/notes/123 修改笔记 |
| 删除 | DELETE | 退菜 | DELETE /api/notes/123 删除笔记 |
❓ 小白疑问:为什么 POST 是“创建“,PUT 是“修改“?
- POST(邮寄/投递)→ 把新东西送到服务器(创建)
- PUT(放置/替换)→ 把旧的换成新的(修改)
- DELETE(删除)→ 直接扔掉(删除)
- GET(获取)→ 拿回来看(查看)
💡 Vibe Coding 提示: 下面会出现一些“流程描述“,不是真正的代码!这只是展示逻辑流程,真正的代码让 AI 写。
流程描述(理解逻辑就好,具体代码让 AI 写)
用户点击“登录“按钮时发生什么?
步骤1:前端准备数据
├─ 收集用户输入:用户名="zhangsan", 密码="123456"
└─ 打包成一个"包裹"(这种格式叫 JSON,就像快递包装盒)
格式:{username: "zhangsan", password: "123456"}
解释:大括号{}表示"这是一个包裹"
冒号:表示"这是什么东西"
引号""表示"这是文字"
步骤2:发送到服务器
├─ 目标地址:https://api.example.com/login
├─ 发送方式:POST(告诉服务器"我要创建新的登录会话")
└─ 包裹内容:上面打包好的数据
步骤3:服务器返回结果
└─ 返回内容:{code: 200, msg: "登录成功", data: {token: "abc123"}}
解释:code=200 表示"成功"
msg 是给你看的提示文字
token 是你的"通行证"(下一节会讲)
🔍 如果你想看真实的代码长什么样(可跳过):
点击展开查看真实代码(AI 会帮你写,现在不用看懂)
// 用户点击"登录"按钮时
async function login() {
const response = await fetch('https://api.example.com/login', {
method: 'POST',
body: JSON.stringify({
username: 'zhangsan',
password: '123456'
})
});
const result = await response.json();
// result = {code: 200, msg: "登录成功", data: {token: "abc123"}}
}
解释:
async/await:告诉浏览器“这个操作需要等一会儿“(网络请求需要时间)fetch():浏览器内置的“发快递“函数JSON.stringify():把数据打包成标准格式- 你不需要理解每个单词,AI 会帮你写这些!
3️⃣ 数据库用“表格“存储数据(像 Excel 一样)
日常类比
数据库 = 一堆 Excel 表格的集合
用户表 (users)
┌────┬──────────┬─────────────────────┬──────────┐
│ id │ username │ email │ 密码 │
├────┼──────────┼─────────────────────┼──────────┤
│ 1 │ zhangsan │ zhang@example.com │ abc123 │
│ 2 │ lisi │ li@example.com │ def456 │
└────┴──────────┴─────────────────────┴──────────┘
笔记表 (notes)
┌────┬─────────┬────────────┬─────────────────────┐
│ id │ user_id │ 标题 │ 内容 │
├────┼─────────┼────────────┼─────────────────────┤
│ 1 │ 1 │ 学习笔记 │ 今天学习了Python... │
│ 2 │ 1 │ 购物清单 │ 需要买牛奶... │
│ 3 │ 2 │ 旅游计划 │ 下周去北京... │
└────┴─────────┴────────────┴─────────────────────┘
关键概念
- 表(Table) = 一张 Excel 表格(如“用户表“)
- 列(Column) = 表格的列名(如“用户名“、“邮箱”)
- 行(Row) = 一条记录(如“张三的账号信息“)
- 主键(Primary Key) = 唯一标识(如“身份证号“)
- 外键(Foreign Key) = 关联其他表(如笔记表的
user_id关联用户表)
❓ 小白疑问:既然像 Excel,为什么不能直接打开表格界面操作?
答案:因为数据量太大了!
- Excel 适合:几百行数据,你可以滑鼠标翻页查看
- 数据库 适合:几百万、几亿行数据,不可能手动翻页找
类比:
- Excel = 你家的书架(几十本书,可以一本本翻)
- 数据库 = 国家图书馆(几千万本书,必须用检索系统精准查找)
所以我们要用**指令(SQL)**告诉数据库“帮我找用户ID=1的所有笔记“,而不是手动翻几百万行数据。
💡 Vibe Coding 提示: 下面的 SQL 查询示例只是让你看懂逻辑,不用背!真正写项目时,让 AI 帮你生成这些查询语句。
SQL 查询逻辑示例(理解意思就好,不用背语法)
你想做的事:查询张三(user_id=1)的所有笔记
用 SQL 指令表达:
SELECT * FROM notes WHERE user_id = 1;
翻译成人话:
SELECT * → 选择所有列(标题、内容等全要)
FROM notes → 从"笔记表"里
WHERE user_id=1 → 条件是"用户ID等于1"
返回结果(就像 Excel 筛选后的结果):
id | user_id | 标题 | 内容
1 | 1 | 学习笔记 | 今天学习了Python...
2 | 1 | 购物清单 | 需要买牛奶...
记住:AI 会帮你写这些 SQL,你只需要用人话告诉 AI“我要查张三的所有笔记“就行!
4️⃣ 需要验证身份(Token 就像会员卡)
日常类比
Token = 健身房会员卡
- 第一次办卡:出示身份证(账号密码)→ 工作人员验证 → 发会员卡(Token)
- 后续进门:刷卡(带 Token)→ 闸机验证 → 放行
- 不用每次都出示身份证
底层原理
完整流程(用户登录):
1. 用户登录
POST /api/login
{username: "zhangsan", password: "123456"}
2. 服务器验证
├─ 检查用户名密码
└─ 生成 Token(有效期7天)
3. 返回 Token
{code: 200, data: {token: "eyJhbGciOiJIUzI1NiIsInR5..."}}
4. 前端存储 Token
localStorage.setItem('token', 'eyJhbGci...')
5. 后续请求都带 Token
GET /api/user/profile
Headers: {Authorization: "Bearer eyJhbGci..."}
6. 服务器验证 Token
├─ 解析 Token → 知道是 user_id=123
├─ 检查是否过期
└─ 允许访问
❓ 小白疑问:Token 那一长串乱码是什么?需要记住吗?
答案:完全不需要记!Token 是电脑自动生成和自动使用的。
Token 长这样:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMjN9.SflKxw...
类比理解:
- 健身房会员卡 = 你只要刷卡就行,不需要知道卡里的芯片是怎么工作的
- Token = 浏览器自动存储和发送,你不需要复制到本子上
它包含什么?(AI 会帮你处理,你只需要知道)
user_id=123(你是谁)过期时间(比如7天后失效)签名(防止别人伪造)
你只需要做的:用户登录成功后,浏览器自动保存 Token。后续操作浏览器自动带上它。就这么简单!
💡 Vibe Coding 提示: 下面的 JavaScript 代码现在不需要看懂!这只是展示“登录流程“的样子。真正写项目时,复制这段逻辑描述给 AI,让它帮你写代码。
代码示例(理解流程就好,具体代码让 AI 写)
// 步骤1: 用户登录
async function login() {
const response = await fetch('/api/login', {
method: 'POST',
body: JSON.stringify({
username: 'zhangsan',
password: '123456'
})
});
const result = await response.json();
// 步骤2: 存储 Token
localStorage.setItem('token', result.data.token);
}
// 步骤3: 后续操作都带上 Token
async function getUserInfo() {
const token = localStorage.getItem('token');
const response = await fetch('/api/user/profile', {
headers: {
'Authorization': `Bearer ${token}`
}
});
return await response.json();
}
为什么用 Token 而不是每次输密码?
- ❌ 不安全: 密码在网络中传输太多次,容易被截获
- ❌ 体验差: 每次操作都输密码太麻烦
- ✅ 用 Token: Token 有有效期(如7天),过期需要重新登录
5️⃣ 后端负责“业务逻辑“(不只是存取数据)
日常类比
前端 vs 后端
- 前端 = 银行柜台(接待客户,展示界面)
- 后端 = 银行系统(验证身份、扣款、转账、记录)
你不能自己在柜台的电脑上输入“给我转100万“,必须由银行系统验证和执行。
💡 Vibe Coding 提示: 下面的 Python 代码示例只是让你理解“后端做什么事“。看不懂代码?正常!你现在不需要懂Python语法,只需要看注释理解每一步在做什么。
业务逻辑示例(看注释理解流程,代码让 AI 写)
# 后端代码(不是前端!)
@app.post("/api/register")
def register(username: str, password: str):
# 1. 检查用户名是否已存在(前端无法做到)
if db.query(User).filter(User.username == username).first():
return {"code": 400, "msg": "用户名已存在"}
# 2. 密码加密(前端不能做,不安全)
hashed = hashlib.sha256(password.encode()).hexdigest()
# 3. 存入数据库
user = User(username=username, password_hash=hashed)
db.add(user)
db.commit()
# 4. 发送欢迎邮件(前端做不到)
send_email(user.email, "欢迎注册!")
return {"code": 200, "msg": "注册成功"}
为什么不能在前端做这些?
| 操作 | 前端能做吗? | 原因 |
|---|---|---|
| 检查用户名是否存在 | ❌ | 前端看不到数据库 |
| 加密密码 | ❌ | 前端代码可以被看到,不安全 |
| 扣减库存 | ❌ | 如果前端做,用户可以改代码“白嫖“ |
| 发送通知 | ❌ | 前端没有权限调用邮件/短信服务 |
| 计算推荐内容 | ❌ | 需要分析大量数据,前端做不到 |
❓ 小白疑问:为什么说“前端代码可以被看到“?我在手机 APP 上看不到代码啊?
答案:前端代码必须暴露,因为浏览器需要执行它。
类比理解(重要!):
前端代码 = 便利贴贴在屏幕上
- 你在网页上右键 → 点击“查看源代码“ → 就能看到所有前端代码
- 按 F12 键 → 打开“开发者工具“ → 看到网络请求、接口地址、所有操作
- 这就像把保险箱密码写在便利贴上贴在屏幕上,虽然普通人不会注意,但懂行的人(黑客)很容易就能翻到那张便利贴
后端代码 = 锁在银行金库里
- 运行在服务器上,用户完全看不到
- 就算黑客按 F12,也只能看到服务器返回的结果,看不到后端代码
所以:
- ✅ 密码加密、权限验证、支付扣款 → 必须在后端做(安全)
- ✅ 界面显示、按钮动画、表单验证 → 可以在前端做(用户体验)
记住:不是前端技术不好,而是前端天生就是“公开“的(必须给浏览器执行),所以重要操作必须交给“不公开“的后端。
🔗 5个知识点如何串联?
完整流程(用户发布笔记)
1. 用户操作
你在APP输入标题和内容,点击"发布"按钮
2. 前端发 API 请求
POST /api/notes
Headers: {Authorization: "Bearer token123"} ← 带Token验证身份
Body: {title: "学习笔记", content: "今天学了..."}
3. 后端接收并处理
├─ 验证Token → 知道是user_id=1的用户
├─ 检查内容是否违规(业务逻辑)
├─ 存入数据库的notes表(表格存储)
└─ 返回结果: {code: 200, msg: "发布成功", data: {note_id: 456}}
4. 前端收到响应
显示"发布成功"提示,跳转到笔记列表页面
5. 数据永久保存
笔记存在云端数据库(服务器),你换设备登录也能看到
📊 知识点总结
| 知识点 | 核心理解 | 日常类比 |
|---|---|---|
| 1. 数据在云端 | 数据存在远程服务器,不在你的设备 | 钱在银行,不在钱包 |
| 2. API请求 | 每次操作都要通过API和服务器对话 | 点外卖下单 |
| 3. 数据库表格 | 数据用表格形式存储,有行和列 | Excel表格 |
| 4. Token身份验证 | 登录后拿到“通行证“,后续操作带着它 | 健身房会员卡 |
| 5. 后端业务逻辑 | 复杂的验证、计算、存储都在后端做 | 银行后台系统 |
💡 Vibe Coding 提示
看到这里,你可能还是有点懵,这很正常!
🎯 你只需要记住这三点
- 数据存在云端,不在你手机里(所以换设备数据还在)
- 操作都是发 API 请求,前后端通过 API 对话(就像点外卖)
- 后端处理复杂逻辑,前端只管显示界面(前端做不了的事后端来做)
✅ 你不需要做的
- ❌ 不需要背代码:所有代码都可以让 AI 写
- ❌ 不需要懂语法:
async、await、@app.post这些都不用懂 - ❌ 不需要完全理解:Token怎么生成、SQL怎么写,后面章节会学
🤖 遇到困惑时的行动指南
如果你对某个概念还是不理解,复制这个模板问 AI:
我正在学习后端开发,不太理解 [后端/API/Token/数据库] 是什么。
我的理解是:[写下你的理解]
请用日常生活的例子(比如银行、餐厅、快递)帮我解释一下:
1. 它是什么?
2. 它解决什么问题?
3. 为什么需要它?
AI 会用你能懂的方式重新解释,直到你理解为止。
📌 下一步建议
不用全部理解透彻才继续,能理解 60-70% 就可以进入下一节。
很多概念在实际动手后会突然“顿悟“,现在只需要有个大概印象就好。
📚 下一步
👉 环境搭建
学习如何配置 Python、VS Code、Supabase 等开发工具。
返回 后端开发基础 查看完整目录。