BACKEND COURSEWARE

后端基础知识

从服务器、API、HTTP、日志、缓存、GIT到接口文档。

HTTP / API / GIT 接口文档 实战
Course Outline

课程目录

01 / 后端最小必备知识

后端到底在做什么

先不急着写代码,先看懂一次请求从哪里来、到哪里去,后端在中间做了什么。

核心流程

请求 -> 处理 -> 返回

后端的核心任务很明确:接收客户端请求,处理业务逻辑,访问数据库或第三方服务,最后把结果返回给前端。

客户端发起请求 -> 服务器接收 -> 业务处理 -> 读写数据库 -> 返回 JSON 响应
角色分工

客户端 vs 服务器

  • 客户端:浏览器、App、小程序,负责发起请求和展示结果。
  • 服务器:一台持续运行的远程电脑,负责接收请求、计算并返回结果。
  • 你写的后端代码,本质上就是运行在服务器上的程序。
API

接口是约定,不是页面

API 是“我发什么,你回什么”的约定。它通常不直接面向人看,而是面向前端、App、脚本或别的服务使用。

HTTP

互联网里的通用语言

浏览器和服务器之间主要靠 HTTP 通信。你会频繁看到 GET、POST、状态码、请求头、响应体这些概念。

JSON / DB

数据格式和数据仓库

JSON 是后端最常见的返回格式,数据库则负责长期保存数据,像用户、订单、文章这类信息都离不开它。

02 / GET 与 POST

先认识 HTTP 请求

这一页只讲分类:GET 负责拿数据,POST 负责提交数据,PUT / DELETE 留到进阶阶段再展开。

HTTP 请求分类

后端接口主要基于 HTTP 协议实现,按请求方式可以分成几类。培训里最先要掌握的是 GET 和 POST。

  • GET 请求
    用于获取数据,参数通常拼接在 URL 后面,适合读取、查询和展示。
  • POST 请求
    用于提交数据,参数通常放在请求体里,适合登录、注册、表单提交。
  • PUT / DELETE
    用于修改和删除数据,适合进阶时再展开讲。
03 / GET 请求

GET 是读取数据的请求

它适合查询、获取和展示数据,通常不改变服务器状态。

定义

只读,不改状态

GET 用于从服务器读取资源,不应该带来数据修改。

参数传递

参数放在 URL 后面

GET /users?id=1&keyword=tom

常见形式是查询字符串,复制、调试都很方便。

主要特点

4 个关键点

  • 可缓存,适合重复读取相同结果。
  • 幂等,多次请求通常得到相同结果。
  • 长度有限,URL 不适合太长的数据。
  • 参数暴露在 URL 中,不适合放敏感信息。
典型场景

3 个常见用途

  • 查询列表,如商品列表、文章列表。
  • 查看详情,如用户信息、订单详情。
  • 搜索和筛选,如关键词检索、分页。
快速判断口诀

一句话记住

要数据,放 URL,能缓存,会重复,别传密。

04 / POST 请求

POST 是提交数据的请求

它适合登录、注册、创建和表单提交,通常会改变服务器状态。

定义

提交数据,改变状态

POST 用于把数据提交给服务器,常用于创建、保存和执行操作。

参数传递

参数放在请求体里

POST /login Content-Type: application/json { "username": "tom", "password": "123456" }

常见是 JSON、表单或文件上传,适合承载较多内容。

主要特点

4 个关键点

  • 通常不缓存,适合一次性提交。
  • 一般不幂等,多次提交可能产生多条记录。
  • 参数不放在 URL,敏感信息更适合放请求体。
  • 更适合较大的数据,常用于表单和文件。
典型场景

3 个常见用途

  • 登录、注册、找回密码。
  • 提交表单、发表评论、发起订单。
  • 上传文件、保存配置、触发动作。
快速判断口诀

一句话记住

要提交、要改状态、要传多数据,优先 POST。

05 / HTTP 请求 · 案例页

典型场景

做题场景

GET 取题,POST 交卷

GET /question?id=1 POST /submit Body: { "user_id": 1, "answer": "A", "time": 10 }

读取题目只是获取数据,不改变服务器状态,所以用 GET。提交答案会改变状态,所以用 POST。

图书馆场景

查询用 GET,借阅用 POST

GET /books?keyword=西游记&page=1 POST /borrow Body: { "userId": "U10086", "bookId": 101 }

搜索图书是读取数据,借阅图书会创建记录、改变库存状态,所以两者的请求方式不同。

为什么登录不要把密码放进 URL?

GET 的参数会出现在地址栏和日志里,不适合传递敏感信息;POST 把内容放在请求体中,更符合登录这类提交场景。

06 / 接口文档

一份标准接口文档长什么样

看接口文档时,先找请求地址和方法,再看参数,最后看返回值和状态码,就不容易迷路。

要素 说明 例子
接口名称 这个接口是干什么的 用户登录接口
URL 请求地址 /api/v1/login
请求方法 GET / POST / PUT / DELETE POST
请求参数 路径、查询、请求体参数 {"username":"张三"}
返回结果 成功时返回什么 {"code":0,"data":{...}}
状态码 200、404、500 等 200 / 404 / 500
读文档顺序

先请求,再参数,最后返回

  • 左边先确认接口地址和请求方法,知道“怎么调用”。
  • 中间看参数表,确认哪些参数必填,哪些可以选填。
  • 右边看返回值,重点判断 code、message 和 data 的含义。
实践建议

拿到文档后,先手动拼一次请求,再交给 Postman、curl 或 Codex 生成调用代码,学习效率会更高。

表格文档

适合培训和共享

字段清楚、层级简单,最适合做成讲义里的标准格式,重点内容一目了然。

Swagger

适合在线试调

可以直接点 Try it out 试运行,特别适合联调阶段快速验证接口是否可用。

纯文本

适合快速交接

写提示词、贴给 Codex、发群里临时说明,都很方便,虽然轻量但传播效率高。

07 / 接口信息

地址、参数、响应,一次看懂真实接口

先看地址和方法,再看参数表,最后看响应结果。

接口地址
POST http://api.xmark.buzhi.com/api/inside/robot/pushMessage

消息推送接口,地址 + 方法 + 参数 + 响应 的完整链路。

参数名称 类型 必填 示例 备注
robot string 必填 buzhivip 微信机器ID
wxid string 必填 wx_1234d 用户微信ID
type int 必填 1 消息类型:1文字 2图片
content string 必填 你好 文字内容、图片 url 地址
响应示例

接口返回结果

{"code": 0,"message": "非法请求","data": []}

课堂上可以把这个返回值当成“接口调用成功后拿到的结果”,再继续讲 code、message 和 data 分别代表什么。

接口文档参考

http://apidoc.gwy1.com/project/57/interface/api

通过浏览器来演示GET、POST 请求

08 / 配置文件

把环境和敏感信息从代码里拿出来

配置文件的核心,就是让同一套代码适配不同环境,同时避免把密码、密钥和可变行为写死在代码中。

为什么要配置文件?

1. 分离环境,一套代码多套环境

  • 开发、测试、生产环境的数据库、API 地址、端口通常不同。
  • 写死在代码里,每次换环境都要改代码,容易出错。
  • 用配置文件,同一份代码加载不同配置即可切换环境。
为什么要配置文件?

2. 保护敏感信息,不提交到仓库

  • 数据库密码、API密钥、私钥等不能出现在代码里。
  • 配置文件如 .env 加入 .gitignore,只提交模板,真实值放服务器上。
  • 还可结合环境变量或密钥管理服务,进一步提升安全性。
为什么要配置文件?

3. 不改代码就能调整行为

  • 修改端口、日志级别、功能开关等,只需改配置文件。
  • 通常重启应用即可,不需要重新编译、打包、发布代码。
  • 紧急情况可快速关闭某个功能或调整性能参数。
一句话记住

代码负责逻辑,配置负责环境,敏感信息永远不要硬编码。

配置文案案例
PORT=8787
SQLITE_PATH=../dialogue-runtime-core-data/runtime.sqlite
STRATEGY_PACK_PATH=./strategy_packs/public_exam_phone_cta_strategy_pack_v0.2.yaml
LLM_PROVIDER=openai_compatible
LLM_BASE_URL=https://api.deepseek.com
LLM_API_KEY=sk-c6fxxxxxx
LLM_MODEL=deepseek-v4-flash
LLM_STREAM=false
09 / 程序与端口 · 上

端口号是什么,程序和端口是什么关系

先把“端口”理解成一台主机上的门牌号,再看程序怎样绑定端口,最后理解一个 IP 为什么能同时跑多个服务。

一、什么是端口号

把一台计算机想象成一栋大楼

  • 大楼有唯一门牌号,对应 IP 地址,例如 192.168.1.10。
  • 大楼里有很多房间,每个房间有自己的房间号,对应端口号,范围 0~65535。
  • 快递员必须同时知道“哪栋楼 + 哪个房间”,才能把信息准确送到指定程序。
二、程序和端口的关系

程序要先监听端口,操作系统再转发请求

  • Web 服务、Node.js 应用、MySQL 等程序需要占用端口进行监听。
  • 操作系统根据请求里的目标端口,把数据交给对应程序。
  • 一台机器上可以同时存在多个服务,因为它们监听不同端口。
记忆方式

IP 是大楼地址,端口是房间号,程序就是房间里真正接收消息的人。

10 / 程序与端口 · 下

为什么需要端口号,常见问题怎么理解

端口号解决的是“同一台机器上多个程序如何不打架”的问题,也顺带解释 localhost、80、8080 这些常见现象。

三、为什么需要端口号

一台服务器同时跑多个服务

  • 同一台服务器上可以同时运行 Web、数据库、SSH 等服务。
  • 请求到达时,操作系统根据目标端口把数据分给正确程序。
  • 端口号让同一个 IP 也能承载多个网络服务,互不干扰。
四、常见问题

几个实践里最常见的小问题

  1. 两个不同程序能否使用同一个端口?同一台机器上不行,会冲突。
  2. 为什么访问 http://localhost:8080 要写端口,而 http://localhost 不用?
  3. 端口最大是多少?端口号是 16 位,范围 0~65535。
一句话记住

一个 IP 像一栋楼,端口像房间号,程序就是住在房间里的人。

11 / 日志

底层调试与监控的第一工具

日志是后端程序运行过程中的记录。出问题先看日志,通常就能快速缩小范围。

底层定位

后端日志记录程序运行状态中的关键信息和错误信息,主要用来调试、排查问题和监控运行情况。日志通常保存在服务器本地,方便后续查看分析。

核心理解

先看发生了什么,再看为什么出错

  • 记录请求经过、代码分支和异常位置。
  • 开发时用于调试,上线后用于监控和排障。
  • 定位问题时,通常先查错误日志,再看上下文日志。
底层逻辑

程序运行时自动留下“轨迹”

  • 接口调用、数据库查询、第三方请求都可以记录。
  • 日志文件一般会持续追加,形成连续记录。
  • 结合时间点和请求信息,可以快速复盘问题现场。
快速判断口诀

开发看 Debug,监控看 Info,异常先看 Warn,出错重点查 Error。

12 / 日志分类

4 种常见日志,先记住用途

不同级别的日志,关注点不一样。先分清“记录什么”,再决定“要不要重点处理”。

Debug

调试日志

记录最详细的执行过程,比如接口参数、返回结果、分支判断等。开发阶段最常用,上线后通常关闭。

Info

信息日志

记录程序正常运行的关键信息,比如启动成功、接口调用成功,主要用于观察系统状态。

Warn

警告日志

记录潜在问题,比如参数不规范、数据异常,但程序还能继续运行,提醒尽快排查。

Error

错误日志

记录真正的错误,比如代码报错、接口失败、数据库连接失败,是定位问题的重点依据。

一句话记忆

Debug 看过程,Info 看状态,Warn 看风险,Error 看故障。

13 / 接口调用

告诉 Codex 四个关键信息

调用任何第三方接口时,把接口位置、请求方式、请求头和请求体说清楚,Codex 才能正确生成代码。

核心原则

调用接口前先给全信息

  • 接口的 URL,包括路径参数和查询参数。
  • HTTP 方法,例如 GET、POST、PUT、DELETE。
  • 请求头,尤其是 Authorization、Content-Type 等认证与类型信息。
  • 请求体,如果是 POST 或 PUT,需要给出数据结构示例。
补充说明

最好再说明使用语言和库

  • 明确你希望用什么编程语言,例如 JavaScript、Python、Java。
  • 最好指定库,例如 fetch、axios、requests。
  • 这样 Codex 更容易直接给出可运行的调用代码。
一句话记住

把 URL、方法、请求头、请求体说完整,再补上语言和库,接口代码就更容易一次写对。

14 / 介绍接口调用方式

两个常见调用模板,先会写再会改

接口调用时,先按场景写出 URL、方法、请求头和请求体,再让 Codex 生成代码,效率最高。

场景 1

简单 GET 接口,无需认证

适合公开 API 或查询类接口,重点是把 URL 说完整,并说明要取哪个字段。

请使用 JavaScript (Node.js) 中的 fetch 调用以下 GET 接口: URL: https://api.github.com/repos/facebook/react 要求: - 打印返回的 stargazers_count 字段 - 处理可能出现的网络错误
场景 2

带 Bearer Token 的 POST 接口

适合需要认证的接口,通常要明确请求头和 JSON 请求体结构。

请用 TypeScript + axios 调用以下 POST 接口: URL: https://api.example.com/v1/tasks 请求头: Authorization: Bearer {token} Content-Type: application/json 请求体: { "title": "学习Codex", "dueDate": "2025-12-31" }
一句话记住

先把场景、方法、认证和请求体说清楚,再让 Codex 按模板生成代码。

15 / 缓存讲解

让高频数据先跑进内存

缓存的目标很简单:减少数据库访问次数,提升数据查询速度,让接口响应更快。

底层定位

把常用数据临时放到更快的地方

  • 缓存是将高频访问的数据临时存储在高速存储介质中。
  • 数据库在磁盘中,访问慢;缓存常放在内存中,访问快。
  • 适合首页列表、用户基础信息等高频访问但变化不大的数据。
缓存原理

先查缓存,命中就直接返回

  • 前端请求数据时,后端先查询缓存。
  • 缓存命中时直接返回;缓存未命中时再查数据库。
  • 查询结果写回缓存,下一次请求就能更快拿到数据。
失效机制

缓存不是永久保存

需要设置失效时间,避免缓存数据和数据库数据长期不一致。

核心工具

Redis 是主流选择

Redis 支持多种数据类型,性能高、容量大,是入门阶段必须了解的缓存工具。

使用场景

高频且不常变化的数据

例如首页列表、热门数据、用户基础信息,都很适合放缓存。

一句话记住

先查缓存,命中就直接返回,没命中再查数据库并写回缓存。

16 / Git 入门

先搞懂 Git 是什么,为什么要用

Git 不是只给程序员用的,它更像版本时光机和团队协作白板,适合管理文档、表格、设计稿和代码。

为什么需要 Git?

避免冲突,保留历史

  • 避免文件冲突:再也不会出现“最终版_v5_最终最终版”
  • 历史可追溯:谁在什么时候改了什么,一目了然
  • 安全备份:代码/文档云端同步,本地损坏也不怕
  • 并行协作:多人同时编辑不同模块,互不干扰
三个核心概念

仓库、提交、分支

  • 仓库:项目文件夹加上 Git 记录,像项目保险箱。
  • 提交:一个版本快照,像游戏存档点。
  • 分支:平行开发新功能,不影响主版本。
分支小贴士

分支就像建议模式或草稿副本,先单独改,确认后再合并到主稿。

17 / Git 流程

日常协作六步法

先同步,再修改,再提交,这是团队里最常见、最稳妥的工作节奏。

1. 克隆

把远程项目拿到本地

第一次接手项目时使用 `git clone`,把仓库复制到自己的电脑。

2. 修改

在本地编辑内容

修改文档、表格或设计稿,完成后再统一检查变更。

3. 暂存

选择要保存的改动

用 `git add .` 把需要提交的文件放进暂存区。

4. 提交

生成版本快照

用 `git commit -m "说明"` 记录这次改了什么。

5. 推送

上传到云端共享

用 `git push` 把本地版本同步到远程仓库。

6. 拉取

获取队友的最新改动

每天开始工作前先 `git pull`,避免和别人冲突。

流程提醒

第 1 步只需要做一次,之后通常重复“修改 - 暂存 - 提交 - 推送”,开始前记得先拉取。

18 / Git 命令

常用命令速查

命令不需要一次全记住,先知道每条命令在做什么,实际操作时再对照使用。

命令 作用 什么时候用
git clone [地址] 把远程仓库复制到自己的电脑 第一次接手项目,先把仓库拉到本地
git status 查看当前哪些文件被修改了 每次提交前先确认有哪些改动
git add . 把需要提交的文件放进暂存区 准备提交前,先选择要保存的内容
git commit -m "说明" 创建一个版本快照,并写清楚改动 完成一组修改后,保存成一个版本
git push 把本地改动上传到远程仓库 本地确认没问题后,同步给团队成员
git pull 从远程仓库拉取最新版本 每天开始工作前,先同步队友的更新
一句话记住

先看状态,再选择改动,提交后推送,开始前先拉取。

19 / Git 工具

图形工具和团队协作小贴士

不会命令行也没关系,图形化工具同样能完成克隆、提交、推送和拉取。

图形工具推荐

点点鼠标就能完成大部分操作

  • GitHub Desktop:界面友好,适合初次使用。
  • Sourcetree:分支视图清晰,适合看协作关系。
  • VS Code + Git 插件:直接在编辑器里管理版本。
  • TortoiseGit:是一款强大的、为Windows量身定做的Git客户端
团队协作

几条最实用的习惯

  • 每天开始工作前先 `git pull`,保持同步。
  • 提交信息写清楚改了什么,不要只写“更新”。
  • 不要提交临时文件和密码,必要时用 `.gitignore` 忽略。
演示

GIT演示