知识领域
产品与体验
工程与交付
AI 能力

数据与服务术语

服务与数据

10 个条目

后端Backend

前端点了「提交订单」,校验、算库存、写库这些事到底在哪一层做?出了错算谁的?

店面 · 看得见确认订单

美式拿铁 × 1 · ¥32

提交订单
后厨工单 · 看不见已下单
订单 #1042

库存 12 → 11 · 已鉴权

结论:用户只看见「已下单」,后厨才真正验身份、扣库存、写库。

服务器Server

后端代码部署到哪?跑起来监听端口、对外应答的是谁?挂了怎么办?

机柜 · 机房listening :3000

server-01接流量 · 已处理 3

server-02宕机摘流

结论:同一份程序跑在多台机器上;这台挂了,另一台接着答。

数据库Database

接上数据

刷新或重启之后,订单为什么有的还在、有的就丢了?数据到底存在哪?

orders 表 · 磁盘重启后仍在
订单台账
  • #184 美式拿铁已支付
  • #185 燕麦拿铁制作中
  • #186 冰美式已支付

结论:落在表里的行,重启还能读到;只写在内存便利贴上的会丢。

接上数据看懂网络

前端点保存之后,数据是怎么送到后面、又怎样知道成功还是失败的?

服务窗口 · 前后端交界200 OK
GET /orders/184
{ "id": 184, "total": 32 }

结论:约定好怎么问、怎么答;方法加路径是一次调用,状态码加 JSON 是结果。

接上数据

接口为什么有的写成 DELETE /articles/7,有的写成 POST /deleteArticle?哪种更好读?

资源柜204 已取走
/articles/7

DELETE · 柜子是空的

结论:同一地址加不同动作,操作同一份资源;结果看状态码,不把动词塞进路径。

GraphQLGraphQL

为什么有人说 GraphQL 一次就能拿到标题和作者,还不会把用不到的字段捎回来?

查询单 · 单端点只回声明字段
只要 title 和作者名

回卡:REST 资源建模 · 林晓

views / avatar 未请求,不返回

结论:一次问清要的字段,不多不少;嵌套作者也在同一张回卡里。

WebhookWebhook

接上数据

客户端不想每分钟问支付好没好,怎么让事件一来就主动通知我?

门口信箱 · /hooks/order-paid验签通过 · 已入账
payment.succeeded

POST · evt_184 · ¥32

结论:对方主动推过来,不用反复问「好了吗」;同一封再来也不会重复入账。

缓存Cache

接上数据

缓存命中率很高,可有人刚改了数据,别人看到的还是旧的——缓存到底什么时候算过期?

桌上便签 · 副本HIT · 2 ms
文章 #7 · v12

REST 资源建模

结论:纸条还在就秒回;空了才回柜取。改了源却不撕,就会读到旧版。

流量一大接口就被慢任务拖垮,任务失败也没人重试——怎么把提交和处理拆开?

工单轨道 · broker3 张待做
导出缩略图

#417 已 ack · #418 #419 #420 还挂着

结论:投递即可走;消费成功才摘票。慢了就先挂着,不会悄悄丢。

接口分页API Pagination

接上数据

列表接口一次返回太多太慢,分页后又有新数据插进来,翻页时为什么会看到重复或漏行?

信息流 · 第 2 页after=103
GET /feed
  • #107补全单元测试
  • #106优化首页图片
  • #105接入消息队列

结论:用游标锚定这一页;按页码跳,插入新动态就会重复或漏行。

网络与接口

11 个条目
看懂网络

“网址开头的 http 到底是什么?前端发的请求和服务器回的响应,到底各长什么样?”

请求消息起始行·头部·空行·主体
GET /users/42 HTTP/1.1
Host: api.example.comAccept: application/json
主体(无)
响应消息状态行·头部·空行·主体
HTTP/1.1 200 OK
Content-Type: application/jsonContent-Length: 34
主体{ "id": "42" }

一次 HTTP 交换 = 请求 + 响应;每条消息都是「起始行 · 头部 · 空行 · 主体」。

请求Request

接上数据看懂网络

“一个 HTTP 请求到底由什么组成?方法、路径、请求头和请求体是怎么拼成一条可发送的消息的?”

请求行POST /api/favorites HTTP/1.1
请求头Content-Type: application/jsonAuthorization: Bearer …
空行分隔头与体
请求体{"item_id":"p_7"}

请求 = 请求行 + 头 + 空行 + 可选体;方法说意图,路径说目标,头携带元信息。

响应Response

接上数据看懂网络

“接口返回的结果由什么组成?为什么有的 200 带数据,前端却要自己判 success:false 才知道失败?”

状态行HTTP/1.1 200 OK
响应头Content-Type: application/json
空行分隔头与体
响应体{ data: […], error: null }

响应 = 状态行 + 头 + 空行 + 可选体;状态码定语义,2xx 带 data、4xx/5xx 带 error。

HTTP 请求头HTTP Headers

看懂网络

“HTTP 头部不是无意义的键值堆:它是起始行之后、空行之前那一段元信息,请求响应都有;读错一个字段就可能泄密或串缓存。”

起始行之后、空行之前那一段 = 头部;请求和响应都有,装的是元信息,不是主体。

HTTP 状态码Status Code

看懂网络

接口返回的 200、404、500 到底在说什么,前端该按它做什么?

首位 2= 成功类别,客户端继续读取结果

  • 首位类别客户端动作
  • 1xx信息继续等待
  • 2xx成功读取结果
  • 3xx重定向跟随或用缓存
  • 4xx客户端错修正请求
  • 5xx服务端错谨慎重试

陷阱200 只代表请求完成,不等于业务成功;别用 200 把失败塞进响应体。

看懂网络

「浏览器带着 Origin 提问,服务端用 Access-Control-* 回答;只有浏览器判定允许,网页脚本才能读取跨来源响应。」

BROWSER REQUESTOrigin
https://app.example.comOPTIONS · Access-Control-Request-Method
SERVER RESPONSEAccess-Control-*
Allow-Origin: app.example.comverdict: 匹配 → 脚本可读取

网络错误Network Error

看懂网络

请求发出去了但没等到响应:是断网、超时还是被取消?它和 500 是一回事吗?

客户端信号NO HTTP STATUS
离线本机网络DNS / TCP未连到主机超时停止等待取消用户意图
无响应请求未抵达或未返回4xx / 5xx服务器已经回答

先保留输入,再按请求副作用(读 / 写)选择恢复动作。

资源不存在404 Not Found

看懂网络

访问一个链接,服务器返 404——它是说「出错了」「没权限」还是「这东西找不到」?

GET/users/9999
路由✓ 匹配资源查找∅ 查无此 id404 Not Found

服务器找不到这个资源 → 前端切到空状态,给返回入口。

不是 5xx 出错 · 不是 403 没权限 · 不是 410 已删除

看懂网络

接口返了 4xx,到底是哪里错了、要不要重试、改什么才能过?

HTTP 4xx · 客户端的锅改请求才会过
  • 错在哪成员客户端下一步
  • 格式 / 参数400 · 422改字段
  • 身份 / 权限401 · 403登录 / 无权
  • 资源状态404 · 409 · 410空状态 / 换名
  • 频率 / 容量429退避重试

重试原样重发还会失败;只有 408 超时、429 限流才退避重试。

看懂网络

接口返 500、502、503、504 到底是哪儿坏了,我该重试还是等着?

首位 5= 服务器自己出了问题,请求没错;通常瞬时,退避后重试可能成功。

  • 谁的锅·成因客户端动作
  • 500应用未捕获异常确认幂等再重试
  • 502网关收到上游无效响应退避后重试
  • 503过载·维护·熔断等 Retry-After
  • 504网关等上游超时退避后重试

对照看到状态码 = 请求已到达服务端;根本没连上、没收到码 = network-error。

账号与安全

8 个条目

鉴权Auth

接上数据看懂网络

为什么有时要我登录,有时登录了还进不去?

打开「我的收藏」先问身份,再问权限

你现在是访客。点一下看系统怎么拦。

点进详情可对照三种结果:未登录 / 没权限 / 允许

登录Login

接上数据

“点了登录之后到底发生了什么?为什么连错几次就被锁?登录成功后,下一个请求怎么就知道是我?”

会话Session

接上数据看懂网络

“登录之后每个请求都认识我,退出到底删的是什么?”

服务端记录在才算登录;退出删的是服务端记录,不是清浏览器——对照:只清 cookie 不算登出,记录残留仍能被偷来的 id 使用。

令牌Token

接上数据

“服务器不查数据库就认识我,靠的是我手里这段字符串;它被偷了或我想立刻下线怎么办?”

服务器只验签名和 exp 就放行——不查会话库,所以快、能跨服务;代价是过期前很难单条作废。

对照 session:服务端查记录可即时删;token 靠签名,撤销只能用短 exp + 黑名单,且 payload 是 base64 可读(不是加密)。

角色Role

“每加一个人都得重新勾一遍权限,能不能按岗位一次性给对、走的人一把收回?”

角色把多项权限命名打包:给成员分配 editor,等于一次授予 查看/编辑/发布 三项;移除角色则整组收回——对照直接逐条勾权限,新人到岗不用再勾三遍,调岗也只改一个角色。

权限Permission

接上数据

登录进去了,为什么这条数据我能看、却不能删?没给的按钮直接没了,我到底有没有权?

逐请求判定成员 #42 · 这次能不能做
  • 读 #7 · 本组ALLOW · 本组可读
  • 删 #7 · 本组DENY · 成员无删除权
  • 审批 #7 · 本组DENY · 未授予→默认拒绝

不确定就拒绝;同一身份,每次请求单独判。

加密Encryption

“密码不是该加密存吗?为啥文档总说要哈希?HTTPS 又到底保护了什么?”

明文hello@example.com
  • 加密enc:a1b9f3…可逆 · 有密钥就能还原
  • 哈希sha256:7f3a9c…单向 · 靠重哈希验证(≠ 加密)
  • TLS非对称换会话钥传输混合保护
密码存哈希、不存加密;传输走 TLS;永远别自己造密码学——用受审库。

限流Rate Limit

“登录接口被人疯狂试密码怎么办?限流到底限的是什么?超限之后客户端又该做什么?”

POST /login · 窗口上限 5 次 / 60 秒结论:限流按 key 在时间窗口内数请求数,超上限回 429 + Retry-After,让客户端等而不是猛重试。

运行与可靠性

12 个条目

数据校验Validation

接上数据

“前端没拦,后端也没验,脏数据直接写进数据库,半夜被 500 告警叫醒。”

POST/api/signupreq_7f2
  • 邮箱bob格式不对 · you@site.com
  • 密码123至少 8 位 · 含字母和数字
  • 年龄9须 13 岁以上
  • 条款未同意必须勾选
400 · 4 个字段错误在入口挡回 · 脏数据未入库

若不校验直接放行 → 脏数据落库 · 业务逻辑崩溃 500。

错误处理Error Handling

接上数据

“代码出错了直接 catch 掉?还是把错误甩给用户看?”

GET /api/orders/ord_882 · 数据库连接断开

同一个错误,处理方式决定用户看到什么系统能不能查

幂等性Idempotency

「用户连点支付、网络抖动重发了一次,接口怎么保证不扣两次钱?」

POST /payments · Idempotency-Key: pay-104
第 1 次发送首次·扣款 ¥100¥300 → ¥200
第 2 次·同键重发重放·未扣款¥200 → ¥200

同一个 key 再发,服务端返回第一次的结果,不重复扣款。

POST 默认不幂等:没有 key 时,第 2 次会再扣 ¥100。

环境变量Environment Variable

交付上线

「代码在本地能跑,上了生产就报错;密钥到底该放哪、为什么换个环境配置就全乱?」

同一份代码 · 配置随环境切换
变量devprod
DATABASE_URLlocalhostprod-db
LOG_LEVELdebugwarn
错误堆栈显示隐藏
API_KEY注入注入

密钥永远不进 git · 只进环境变量

部署Deployment

交付上线

「代码在本地能跑,怎么变成用户能打开的网站?上线出了问题能立刻退吗?」

把 v2 推上生产 · 4 种姿势
  • 一次性一次全换出问题 = 全站宕
  • 滚动分批替换炸一实例,其余仍在服务
  • 蓝绿切流量指针秒级切回旧环境
  • 灰度5% → 25% → 100%小流量先验证再放大

策略决定「炸多大、能不能立刻退」· 每个实例靠健康检查放行,失败就回滚到上一版

交付上线

“线上出错了却两眼一抹黑——日志该写什么、不该写什么?”

INFOWARNERROR

结论:等级 + requestId 串起一次请求;明文密码=泄漏,对照正确写法 password=***。

监控Monitoring

交付上线

“半夜接口挂了,为什么是用户先发现?仪表盘和告警到底该看哪个、该报哪个指标?”

API 服务 · v1.4.2 · 8 分钟前错误预算 12%
结论:监控盯四个黄金信号里用户能感觉的症状——错误率、延迟超阈值才发告警;告警带触发规则、版本和日志入口,不是把每个内部数字都报一遍。

数据迁移Migration

生产表要加字段、改名字——怎么改才不会锁表,也不会让正在跑的代码挂掉?

001 新列 ✓002 回填 ✓003 改名
按序应用 · 可回滚,已上线历史不改

“让它每天凌晨两点自动清理过期链接——这条时间表达式怎么写?跑挂了谁知道、跑得比一天还久怎么办?”

时区 Asia/Shanghai下次 今晚 02:00最近 成功 · 12 秒
结论:cron 把“每天 02:00”写成 5 段时间表达式 + 固定时区;任务要幂等、防重叠、失败必告警,别拿它跑长时或实时任务。

「缩略图生成阻塞主请求,后台进度、失败原因和安全重试都不可见。」

POST /upload · 后台生成缩略图
主请求202 · jobId #4170.4s 返回,不等处理
  • #417 thumbnailrunning 75%
  • #418 thumbnailqueued
  • #416 thumbnaildead-letter · 3/3

请求秒返 202,缩略图在worker 后台逐帧生成;进度可查、失败退避重试3 次后进死信

实时连接WebSocket

接上数据

“HTTP 一问一答就断了,聊天和协同编辑那种服务器随时主动推、客户端也随时发的效果,到底靠什么实现?”

HTTP · 一问一答就断每次都要重新建连
WebSocket · 连一次,双向随时发握手一次,双方随时互发帧

对照:HTTP 每问一次都要重新连接;WebSocket 握手一次后保持一条双向通道,结果就是实时聊天、协同与推送都能做。

交付上线

远处地区的用户打开站点,图片转圈、白屏很久——CDN 怎么让资源到他们手里快一点?

GET /hero.webp
  • 北京 · 命中 HIT12 ms就近返回,没碰源站
  • 纽约 · 未命中 MISS210 ms回到远端源站取,再写进边缘

对照看:同一张图,离你近的边缘命中就近秒回;别的地区第一次仍要回源——结论是 CDN 把副本搬到离用户近的地方,不是把内容变少。