Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

后端是什么?

方法论: 从日常现象出发,理解后端的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 提示

看到这里,你可能还是有点懵,这很正常!

🎯 你只需要记住这三点

  1. 数据存在云端,不在你手机里(所以换设备数据还在)
  2. 操作都是发 API 请求,前后端通过 API 对话(就像点外卖)
  3. 后端处理复杂逻辑,前端只管显示界面(前端做不了的事后端来做)

✅ 你不需要做的

  • 不需要背代码:所有代码都可以让 AI 写
  • 不需要懂语法asyncawait@app.post 这些都不用懂
  • 不需要完全理解:Token怎么生成、SQL怎么写,后面章节会学

🤖 遇到困惑时的行动指南

如果你对某个概念还是不理解,复制这个模板问 AI

我正在学习后端开发,不太理解 [后端/API/Token/数据库] 是什么。

我的理解是:[写下你的理解]

请用日常生活的例子(比如银行、餐厅、快递)帮我解释一下:
1. 它是什么?
2. 它解决什么问题?
3. 为什么需要它?

AI 会用你能懂的方式重新解释,直到你理解为止。

📌 下一步建议

不用全部理解透彻才继续,能理解 60-70% 就可以进入下一节

很多概念在实际动手后会突然“顿悟“,现在只需要有个大概印象就好。


📚 下一步

👉 环境搭建

学习如何配置 Python、VS Code、Supabase 等开发工具。

返回 后端开发基础 查看完整目录。