CalcGuide · 技术博客主页 / 一页纸学习计划
🔥极高

API 性能与可靠交付:缓存、幂等与异步事件

分类:Web 与后端 · 路径:docs/topics/performance-delivery/README.md

#rest#api#http#openapi

覆盖 Cache-Control/ETag、条件更新、idempotency、Webhook 与异步可靠性

父主题

REST API 设计与实现:从资源建模到可观测 API

子主题(0)

API 性能与可靠交付:缓存、幂等与异步事件

0. 元信息

1. 学习路线

缓存策略 → ETag → 条件请求 → idempotency → outbox → Webhook 签名/重试

2. 阶段周数分配

精简子主题不固定周数。按 §3 顺序完成,卡住时回到 RFC、契约样例和可重复请求。

3. 九阶段表

阶段核心知识实践产出学会标准
1术语与边界术语表不混淆相邻概念
2HTTP/标准语义请求矩阵能引用规范解释
3数据与状态schema/状态图正常与冲突可区分
4安全边界威胁清单非法路径被拒绝
5失败语义错误目录客户端能稳定处理
6兼容策略变更表能识别 breaking change
7工具验证curl/collection可重复运行
8自动检查契约测试修改后会报警
9小项目可运行交付第三方可复现

4. 第一周任务

精简版省略固定日程。做一个最小正常请求,再补认证失败、非法输入、冲突、重试与超时。

5. 阶段通用验收

精简版省略;每个产出至少保留命令、预期、实际与版本。

6. 最终验收

精简版省略;以 §3 第 9 阶段和 §9.4 问题口述检查为准。

7. 综合项目

精简版省略;成果并入父主题电商商品 / 订单 API。

本主题贡献

交付物清单

  1. /cache.yaml + cache.md:GET /products/{id} 完整缓存策略(Cache-Control / ETag / Vary / Age)+ 304 命中率压测 ≥ 80% 的截图与 If-None-Match 报文;
  2. /conditional.{py|go}:PUT /products/{id}If-Match 412 实现 + 集成测试 6 条(含两个 client 并发改同一 ETag,互斥成功一次);
  3. /idempotency.*:POST /ordersIdempotency-Key(同 key + body 返回同结果;同 key + 不同 body 报 422),含 24 h 持久化(Redis 或 DB unique index 双重防护);
  4. /webhook.md + sig.{lua|python}:HMAC-SHA256 签名 + 时间戳容差(±300 s)+ partition key = order_id 顺序保证(含 partition rebalance 演练)的可重放证据,并补 Outbox 投递失败演练。

验收标准

8. 推荐资料

精简版省略;使用 §9.3 和 §9.6 Source。

9. 学习资料汇聚(v0.3 自包含)

9.1 背景与动机

覆盖 Cache-Control/ETag、条件更新、idempotency、Webhook 与异步可靠性。API 一旦被客户端依赖,错误的语义会变成多年兼容成本。我们用规范、可运行样例和失败测试约束选择。

9.2 概念地图

flowchart LR
  Design[设计] --> Contract[HTTP/OpenAPI 契约]
  Contract --> Runtime[实现/网关]
  Runtime --> Client[客户端]
  Runtime --> Evidence[日志/指标/trace]
  Test[契约与失败测试] -.验证.-> Contract
  Test -.验证.-> Runtime

这张图把设计、实现、调用和证据串起来。任何规则都要能落到契约或运行时检查。

9.3 基础知识讲解

9.3.1 论文 / 规范

9.3.2 书

9.3.3 博客 / 文档

9.3.4 人物

9.3.5 方法

可运行示例:

# 条件 GET
curl -i https://api.example.com/products/p_123
curl -i -H 'If-None-Match: "product-p_123-v7"' https://api.example.com/products/p_123

# Stripe 风格 idempotency;同一 key + 同一 body 返回同一结果
curl https://api.example.com/orders \
  -H 'Authorization: Bearer test-token' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: order-20260730-001' \
  -d '{"product_id":"p_123","quantity":1}'

典型响应头:

HTTP/1.1 304 Not Modified
ETag: "product-p_123-v7"
Cache-Control: private, max-age=60

9.4 经典问题与经典案例

问题为什么重要最简答案
ETag 强弱校验怎么选影响客户端正确性和长期兼容写清语义、失败码、重试与测试证据
304 是否有 body影响客户端正确性和长期兼容写清语义、失败码、重试与测试证据
If-Match 如何防覆盖影响客户端正确性和长期兼容写清语义、失败码、重试与测试证据
重复 POST 怎么处理影响客户端正确性和长期兼容写清语义、失败码、重试与测试证据
Webhook 顺序是否可靠影响客户端正确性和长期兼容写清语义、失败码、重试与测试证据
签名如何防重放影响客户端正确性和长期兼容写清语义、失败码、重试与测试证据

9.5 学习难点

9.6 技术标准与接口

9.6.1 Entity

名称版本组织状态 / 可访问性
OpenAPI Specification3.1OpenAPI Initiative正式;Apache-2.0 仓库,规范公开
JSON:API1.1JSON:API 社区正式;公开
JSON Schema2020-12JSON Schema / IETF 社区正式;公开
Problem Details for HTTP APIsRFC 7807IETF已被 RFC 9457 更新;RFC 公开
HALdraft-kelly-json-halIETF Internet-Draft / HAL 社区草案;公开

9.6.2 Scope

OpenAPI 描述 HTTP API;JSON Schema 描述数据约束;JSON:API 与 HAL 约定表示和链接;Problem Details 约定机器可读错误。它们不替代业务授权、事务设计或运行时保护。

9.6.3 Structure

OpenAPI 必会 pathsoperationsparametersrequestBodyresponsescomponentssecuritySchemes;JSON Schema 必会 typerequiredproperties、组合与引用;Problem Details 必会 type/title/status/detail/instance

9.6.4 Ecosystem

实现与工具包括 Swagger UI、Redoc、Spectral、OpenAPI Generator、Postman、Insomnia、Bruno、httpie、curl。API gateway 常用 Apigee、AWS API Gateway、Kong、Envoy。工具默认值不是规范。

9.6.5 Depth Tiers

层级可观察能力
L0知道这些标准解决什么问题
L1看懂 schema、operation 和 problem body
L2能正确编写、校验、生成客户端并调用
L3能解释语义、排错兼容/鉴权/缓存/限流问题
L4能设计扩展、治理规则与跨团队演进机制

本计划目标:L3

9.6.6 Source

10. 常见误区

11. 所有知识点分类(统一规则)

  1. 编程语言 2. 数据结构与算法 3. 计算机基础 4. 工程技术 5. Web 与后端 6. 前端与客户端 7. 数据与人工智能 8. 项目与职业能力 9. 安全与可靠性

本计划归属:Web 与后端 主 + 工程技术 辅。

直接依赖(2)

查看知识图谱 · 热度 🔥极高