@mison/ag-kit-cn 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
  2. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
  3. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
  4. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
  5. package/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
  6. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
  7. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
  8. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  9. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  10. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  11. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  12. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  13. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  14. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  15. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
  16. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  17. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  18. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  19. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  20. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
  21. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
  22. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  23. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  24. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
  25. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
  26. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
  27. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +106 -0
  28. package/.agent/ARCHITECTURE.md +285 -0
  29. package/.agent/agents/backend-specialist.md +268 -0
  30. package/.agent/agents/code-archaeologist.md +106 -0
  31. package/.agent/agents/database-architect.md +225 -0
  32. package/.agent/agents/debugger.md +225 -0
  33. package/.agent/agents/devops-engineer.md +242 -0
  34. package/.agent/agents/documentation-writer.md +104 -0
  35. package/.agent/agents/explorer-agent.md +73 -0
  36. package/.agent/agents/frontend-specialist.md +618 -0
  37. package/.agent/agents/game-developer.md +162 -0
  38. package/.agent/agents/mobile-developer.md +382 -0
  39. package/.agent/agents/orchestrator.md +438 -0
  40. package/.agent/agents/penetration-tester.md +188 -0
  41. package/.agent/agents/performance-optimizer.md +187 -0
  42. package/.agent/agents/product-manager.md +112 -0
  43. package/.agent/agents/product-owner.md +95 -0
  44. package/.agent/agents/project-planner.md +405 -0
  45. package/.agent/agents/qa-automation-engineer.md +103 -0
  46. package/.agent/agents/security-auditor.md +170 -0
  47. package/.agent/agents/seo-specialist.md +111 -0
  48. package/.agent/agents/test-engineer.md +158 -0
  49. package/.agent/mcp_config.json +12 -0
  50. package/.agent/rules/GEMINI.md +273 -0
  51. package/.agent/scripts/auto_preview.py +148 -0
  52. package/.agent/scripts/checklist.py +217 -0
  53. package/.agent/scripts/session_manager.py +120 -0
  54. package/.agent/scripts/verify_all.py +327 -0
  55. package/.agent/skills/api-patterns/SKILL.md +84 -0
  56. package/.agent/skills/api-patterns/api-style.md +42 -0
  57. package/.agent/skills/api-patterns/auth.md +24 -0
  58. package/.agent/skills/api-patterns/documentation.md +26 -0
  59. package/.agent/skills/api-patterns/graphql.md +41 -0
  60. package/.agent/skills/api-patterns/rate-limiting.md +31 -0
  61. package/.agent/skills/api-patterns/response.md +37 -0
  62. package/.agent/skills/api-patterns/rest.md +40 -0
  63. package/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
  64. package/.agent/skills/api-patterns/security-testing.md +122 -0
  65. package/.agent/skills/api-patterns/trpc.md +41 -0
  66. package/.agent/skills/api-patterns/versioning.md +22 -0
  67. package/.agent/skills/app-builder/SKILL.md +75 -0
  68. package/.agent/skills/app-builder/agent-coordination.md +74 -0
  69. package/.agent/skills/app-builder/feature-building.md +53 -0
  70. package/.agent/skills/app-builder/project-detection.md +34 -0
  71. package/.agent/skills/app-builder/scaffolding.md +118 -0
  72. package/.agent/skills/app-builder/tech-stack.md +40 -0
  73. package/.agent/skills/app-builder/templates/SKILL.md +39 -0
  74. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  75. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  76. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  77. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  78. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  79. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  80. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  81. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
  82. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
  83. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
  84. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
  85. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  86. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
  87. package/.agent/skills/architecture/SKILL.md +57 -0
  88. package/.agent/skills/architecture/context-discovery.md +43 -0
  89. package/.agent/skills/architecture/examples.md +94 -0
  90. package/.agent/skills/architecture/pattern-selection.md +68 -0
  91. package/.agent/skills/architecture/patterns-reference.md +50 -0
  92. package/.agent/skills/architecture/trade-off-analysis.md +77 -0
  93. package/.agent/skills/bash-linux/SKILL.md +201 -0
  94. package/.agent/skills/behavioral-modes/SKILL.md +264 -0
  95. package/.agent/skills/brainstorming/SKILL.md +164 -0
  96. package/.agent/skills/brainstorming/dynamic-questioning.md +359 -0
  97. package/.agent/skills/clean-code/SKILL.md +200 -0
  98. package/.agent/skills/code-review-checklist/SKILL.md +125 -0
  99. package/.agent/skills/database-design/SKILL.md +54 -0
  100. package/.agent/skills/database-design/database-selection.md +43 -0
  101. package/.agent/skills/database-design/indexing.md +39 -0
  102. package/.agent/skills/database-design/migrations.md +50 -0
  103. package/.agent/skills/database-design/optimization.md +36 -0
  104. package/.agent/skills/database-design/orm-selection.md +30 -0
  105. package/.agent/skills/database-design/schema-design.md +56 -0
  106. package/.agent/skills/database-design/scripts/schema_validator.py +172 -0
  107. package/.agent/skills/deployment-procedures/SKILL.md +241 -0
  108. package/.agent/skills/doc.md +177 -0
  109. package/.agent/skills/documentation-templates/SKILL.md +194 -0
  110. package/.agent/skills/frontend-design/SKILL.md +418 -0
  111. package/.agent/skills/frontend-design/animation-guide.md +331 -0
  112. package/.agent/skills/frontend-design/color-system.md +307 -0
  113. package/.agent/skills/frontend-design/decision-trees.md +418 -0
  114. package/.agent/skills/frontend-design/motion-graphics.md +306 -0
  115. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  116. package/.agent/skills/frontend-design/scripts/ux_audit.py +727 -0
  117. package/.agent/skills/frontend-design/typography-system.md +345 -0
  118. package/.agent/skills/frontend-design/ux-psychology.md +1118 -0
  119. package/.agent/skills/frontend-design/visual-effects.md +383 -0
  120. package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
  121. package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
  122. package/.agent/skills/game-development/SKILL.md +167 -0
  123. package/.agent/skills/game-development/game-art/SKILL.md +185 -0
  124. package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
  125. package/.agent/skills/game-development/game-design/SKILL.md +129 -0
  126. package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
  127. package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
  128. package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
  129. package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
  130. package/.agent/skills/game-development/web-games/SKILL.md +150 -0
  131. package/.agent/skills/geo-fundamentals/SKILL.md +155 -0
  132. package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  133. package/.agent/skills/i18n-localization/SKILL.md +154 -0
  134. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  135. package/.agent/skills/intelligent-routing/SKILL.md +335 -0
  136. package/.agent/skills/lint-and-validate/SKILL.md +44 -0
  137. package/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -0
  138. package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  139. package/.agent/skills/mcp-builder/SKILL.md +176 -0
  140. package/.agent/skills/mobile-design/SKILL.md +394 -0
  141. package/.agent/skills/mobile-design/decision-trees.md +516 -0
  142. package/.agent/skills/mobile-design/mobile-backend.md +491 -0
  143. package/.agent/skills/mobile-design/mobile-color-system.md +420 -0
  144. package/.agent/skills/mobile-design/mobile-debugging.md +122 -0
  145. package/.agent/skills/mobile-design/mobile-design-thinking.md +355 -0
  146. package/.agent/skills/mobile-design/mobile-navigation.md +458 -0
  147. package/.agent/skills/mobile-design/mobile-performance.md +767 -0
  148. package/.agent/skills/mobile-design/mobile-testing.md +356 -0
  149. package/.agent/skills/mobile-design/mobile-typography.md +432 -0
  150. package/.agent/skills/mobile-design/platform-android.md +666 -0
  151. package/.agent/skills/mobile-design/platform-ios.md +561 -0
  152. package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
  153. package/.agent/skills/mobile-design/touch-psychology.md +537 -0
  154. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +311 -0
  155. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +241 -0
  156. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +489 -0
  157. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +263 -0
  158. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
  159. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +431 -0
  160. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +683 -0
  161. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +149 -0
  162. package/.agent/skills/nextjs-react-expert/SKILL.md +286 -0
  163. package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
  164. package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
  165. package/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
  166. package/.agent/skills/parallel-agents/SKILL.md +194 -0
  167. package/.agent/skills/performance-profiling/SKILL.md +149 -0
  168. package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  169. package/.agent/skills/plan-writing/SKILL.md +152 -0
  170. package/.agent/skills/powershell-windows/SKILL.md +166 -0
  171. package/.agent/skills/python-patterns/SKILL.md +441 -0
  172. package/.agent/skills/red-team-tactics/SKILL.md +203 -0
  173. package/.agent/skills/rust-pro/SKILL.md +190 -0
  174. package/.agent/skills/seo-fundamentals/SKILL.md +135 -0
  175. package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +215 -0
  176. package/.agent/skills/server-management/SKILL.md +161 -0
  177. package/.agent/skills/systematic-debugging/SKILL.md +114 -0
  178. package/.agent/skills/tailwind-patterns/SKILL.md +269 -0
  179. package/.agent/skills/tdd-workflow/SKILL.md +149 -0
  180. package/.agent/skills/testing-patterns/SKILL.md +178 -0
  181. package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
  182. package/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
  183. package/.agent/skills/vulnerability-scanner/checklists.md +131 -0
  184. package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +459 -0
  185. package/.agent/skills/web-design-guidelines/SKILL.md +57 -0
  186. package/.agent/skills/webapp-testing/SKILL.md +187 -0
  187. package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  188. package/.agent/workflows/brainstorm.md +113 -0
  189. package/.agent/workflows/create.md +59 -0
  190. package/.agent/workflows/debug.md +103 -0
  191. package/.agent/workflows/deploy.md +176 -0
  192. package/.agent/workflows/enhance.md +63 -0
  193. package/.agent/workflows/orchestrate.md +242 -0
  194. package/.agent/workflows/plan.md +89 -0
  195. package/.agent/workflows/preview.md +80 -0
  196. package/.agent/workflows/restore-localize-compat.md +525 -0
  197. package/.agent/workflows/status.md +86 -0
  198. package/.agent/workflows/test.md +144 -0
  199. package/.agent/workflows/ui-ux-pro-max.md +295 -0
  200. package/AGENT_FLOW.md +609 -0
  201. package/CHANGELOG.md +68 -0
  202. package/LICENSE +21 -0
  203. package/README.md +260 -0
  204. package/bin/adapters/base.js +63 -0
  205. package/bin/adapters/codex.js +391 -0
  206. package/bin/adapters/gemini.js +137 -0
  207. package/bin/ag-kit.js +1336 -0
  208. package/bin/core/builder.js +80 -0
  209. package/bin/core/generator.js +59 -0
  210. package/bin/core/resource-loader.js +64 -0
  211. package/bin/core/transformer.js +208 -0
  212. package/bin/interactive.js +65 -0
  213. package/bin/utils/atomic-writer.js +97 -0
  214. package/bin/utils/git-helper.js +68 -0
  215. package/bin/utils/managed-block.js +65 -0
  216. package/bin/utils/manifest.js +241 -0
  217. package/bin/utils.js +82 -0
  218. package/docs/codex-rules-template.md +36 -0
  219. package/docs/mapping-spec.md +68 -0
  220. package/docs/multi-target-adapter.md +80 -0
  221. package/docs/official/README.md +53 -0
  222. package/docs/official/antigravity/agent-modes-settings.md +64 -0
  223. package/docs/official/antigravity/rules-workflows.md +96 -0
  224. package/docs/official/antigravity/skills.md +147 -0
  225. package/docs/official/codex/agents-md.md +119 -0
  226. package/docs/official/codex/config-advanced.md +358 -0
  227. package/docs/official/codex/config-basic.md +141 -0
  228. package/docs/official/codex/config-reference.md +223 -0
  229. package/docs/official/codex/config-sample.md +216 -0
  230. package/docs/official/codex/mcp.md +107 -0
  231. package/docs/official/codex/rules.md +79 -0
  232. package/docs/official/codex/skills.md +114 -0
  233. package/docs/official/sources-index.md +32 -0
  234. package/docs/operations.md +145 -0
  235. package/docs/terminology-style-guide.md +69 -0
  236. package/package.json +51 -0
  237. package/scripts/postinstall-check.js +112 -0
@@ -0,0 +1,491 @@
1
+ # 移动端后端模式(Mobile Backend Patterns)
2
+
3
+ > **本文件专门覆盖移动端客户端所需的后端/API 模式。**
4
+ > 通用后端模式请参考 `nodejs-best-practices` 与 `api-patterns`。
5
+ > **移动端后端 ≠ Web 后端,约束不同,模式不同。**
6
+
7
+ ---
8
+
9
+ ## 🧠 移动端后端思维(MOBILE BACKEND MINDSET)
10
+
11
+ ```
12
+ 移动端客户端与 Web 完全不同:
13
+ ├── 网络不稳定(2G/地铁/电梯)
14
+ ├── 电量敏感(减少唤醒)
15
+ ├── 存储有限(不能全量缓存)
16
+ ├── 会话频繁中断(电话/通知)
17
+ ├── 设备差异极大(老机到旗舰)
18
+ └── 二进制更新很慢(App Store 审核)
19
+ ```
20
+
21
+ **后端必须补偿以上全部问题。**
22
+
23
+ ---
24
+
25
+ ## 🚫 AI 移动端后端反模式(ANTI-PATTERNS)
26
+
27
+ ### AI 常见移动端后端错误
28
+
29
+ | ❌ AI 默认 | 为什么错 | ✅ 移动端正确做法 |
30
+ |-----------|----------|------------------|
31
+ | Web 与移动共用同一 API | 移动端需要更紧凑响应 | 独立移动端接口或字段选择 |
32
+ | 全对象返回 | 浪费带宽与电量 | 部分字段 + 分页 |
33
+ | 不考虑离线 | 断网即崩 | Offline-first + 同步队列 |
34
+ | 全用 WebSocket | 电量消耗大 | Push + 轮询兜底 |
35
+ | 不做版本管理 | 无法强更,破坏兼容 | 版本头 + 最低版本检查 |
36
+ | 泛化错误信息 | 用户无法自救 | 移动端错误码 + 复原动作 |
37
+ | Session 认证 | App 重启丢状态 | Token + Refresh |
38
+ | 忽略设备信息 | 无法定位问题 | 设备 ID/版本入 Header |
39
+
40
+ ---
41
+
42
+ ## 1. 推送通知(Push Notifications)
43
+
44
+ ### 平台架构(Platform Architecture)
45
+
46
+ ```
47
+ ┌─────────────────────────────────────────────────────────────────┐
48
+ │ YOUR BACKEND │
49
+ ├─────────────────────────────────────────────────────────────────┤
50
+ │ │ │
51
+ │ ┌──────────┴──────────┐ │
52
+ │ ▼ ▼ │
53
+ │ ┌─────────────────┐ ┌─────────────────┐ │
54
+ │ │ FCM (Google) │ │ APNs (Apple) │ │
55
+ │ │ Firebase │ │ Direct or FCM │ │
56
+ │ └────────┬────────┘ └────────┬────────┘ │
57
+ │ │ │ │
58
+ │ ▼ ▼ │
59
+ │ ┌─────────────────┐ ┌─────────────────┐ │
60
+ │ │ Android Device │ │ iOS Device │ │
61
+ │ └─────────────────┘ └─────────────────┘ │
62
+ └─────────────────────────────────────────────────────────────────┘
63
+ ```
64
+
65
+ ### Push 类型(Push Types)
66
+
67
+ | 类型(Type) | 场景(Use Case) | 用户可见(User Sees) |
68
+ |-------------|------------------|-----------------------|
69
+ | **Display** | 新消息、订单更新 | 通知横幅 |
70
+ | **Silent** | 后台同步、内容更新 | 用户不可见(后台) |
71
+ | **Data** | App 自定义处理 | 由 App 决定 |
72
+
73
+ ### 反模式(Anti-Patterns)
74
+
75
+ | ❌ NEVER | ✅ ALWAYS |
76
+ |----------|----------|
77
+ | 推送中携带敏感数据 | Push 只提示“新消息”,内容由 App 拉取 |
78
+ | 高强度推送轰炸 | 合并、去重、尊重静默时段 |
79
+ | 所有人同文案 | 按用户偏好/时区分组 |
80
+ | 忽略失效 token | 定期清理无效 token |
81
+ | iOS 不走 APNs | 仅 FCM 无法保证 iOS 投递 |
82
+
83
+ ### Token 管理(Token Management)
84
+
85
+ ```
86
+ TOKEN 生命周期:
87
+ ├── App 注册 → 获取 token → 回传后端
88
+ ├── Token 可能变化 → App 启动需重新注册
89
+ ├── Token 过期 → 从数据库清理
90
+ ├── 用户卸载 → token 失效(靠错误反馈识别)
91
+ └── 多设备登录 → 同一用户多 token
92
+ ```
93
+
94
+ ---
95
+
96
+ ## 2. 离线同步与冲突处理(Offline Sync & Conflict Resolution)
97
+
98
+ ### 同步策略选择(Sync Strategy Selection)
99
+
100
+ ```
101
+ 数据类型是什么?
102
+
103
+ ├── 只读(新闻、目录)
104
+ │ └── 简单缓存 + TTL
105
+ │ └── ETag/Last-Modified 做失效
106
+
107
+ ├── 用户私有(笔记、待办)
108
+ │ └── Last-write-wins(简单)
109
+ │ └── 或时间戳合并
110
+
111
+ ├── 协作(共享文档)
112
+ │ └── 必须 CRDT 或 OT
113
+ │ └── 可考虑 Firebase/Supabase
114
+
115
+ └── 关键交易(支付、库存)
116
+ └── 服务器为事实源
117
+ └── Optimistic UI + 服务端确认
118
+ ```
119
+
120
+ ### 冲突处理策略(Conflict Resolution Strategies)
121
+
122
+ | 策略(Strategy) | 机制(How It Works) | 适用(Best For) |
123
+ |------------------|----------------------|------------------|
124
+ | **Last-write-wins** | 最新时间戳覆盖 | 单人简单数据 |
125
+ | **Server-wins** | 服务端绝对权威 | 关键交易 |
126
+ | **Client-wins** | 优先离线变更 | 离线重应用 |
127
+ | **Merge** | 字段级合并 | 文档、富文本 |
128
+ | **CRDT** | 数学级无冲突 | 实时协作 |
129
+
130
+ ### 同步队列模式(Sync Queue Pattern)
131
+
132
+ ```
133
+ 客户端:
134
+ ├── 用户操作 → 写本地 DB
135
+ ├── 入同步队列 → { action, data, timestamp, retries }
136
+ ├── 网络可用 → FIFO 处理队列
137
+ ├── 成功 → 移除队列
138
+ ├── 失败 → 退避重试(最多 5 次)
139
+ └── 冲突 → 应用冲突策略
140
+
141
+ 服务端:
142
+ ├── 接收带客户端时间戳的数据
143
+ ├── 与服务端版本比较
144
+ ├── 应用冲突策略
145
+ ├── 返回合并结果
146
+ └── 客户端以服务端结果更新本地
147
+ ```
148
+
149
+ ---
150
+
151
+ ## 3. 移动端 API 优化(Mobile API Optimization)
152
+
153
+ ### 响应体积缩减(Response Size Reduction)
154
+
155
+ | 技术(Technique) | 节省(Savings) | 实现(Implementation) |
156
+ |------------------|----------------|------------------------|
157
+ | **字段选择** | 30-70% | `?fields=id,name,thumbnail` |
158
+ | **压缩** | 60-80% | gzip/brotli(自动) |
159
+ | **分页** | 视情况 | 移动端优先 Cursor |
160
+ | **图像变体** | 50-90% | `/image?w=200&q=80` |
161
+ | **Delta 同步** | 80-95% | 仅拉变更记录 |
162
+
163
+ ### 分页:Cursor vs Offset
164
+
165
+ ```
166
+ OFFSET(移动端不友好):
167
+ ├── Page 1: OFFSET 0 LIMIT 20
168
+ ├── Page 2: OFFSET 20 LIMIT 20
169
+ ├── 问题:新增数据会重复/错位
170
+ └── 问题:offset 越大越慢
171
+
172
+ CURSOR(移动端友好):
173
+ ├── First: ?limit=20
174
+ ├── Next: ?limit=20&after=cursor_abc123
175
+ ├── Cursor = 编码后的 id + sort
176
+ ├── 数据变化不重复
177
+ └── 性能稳定
178
+ ```
179
+
180
+ ### 批量请求(Batch Requests)
181
+
182
+ ```
183
+ 不要这样:
184
+ GET /users/1
185
+ GET /users/2
186
+ GET /users/3
187
+ (3 次往返,3 倍延迟)
188
+
189
+ 应该这样:
190
+ POST /batch
191
+ { requests: [
192
+ { method: "GET", path: "/users/1" },
193
+ { method: "GET", path: "/users/2" },
194
+ { method: "GET", path: "/users/3" }
195
+ ]}
196
+ (1 次往返)
197
+ ```
198
+
199
+ ---
200
+
201
+ ## 4. 应用版本管理(App Versioning)
202
+
203
+ ### 版本检查接口(Version Check Endpoint)
204
+
205
+ ```
206
+ GET /api/app-config
207
+ Headers:
208
+ X-App-Version: 2.1.0
209
+ X-Platform: ios
210
+ X-Device-ID: abc123
211
+
212
+ Response:
213
+ {
214
+ "minimum_version": "2.0.0",
215
+ "latest_version": "2.3.0",
216
+ "force_update": false,
217
+ "update_url": "https://apps.apple.com/...",
218
+ "feature_flags": {
219
+ "new_player": true,
220
+ "dark_mode": true
221
+ },
222
+ "maintenance": false,
223
+ "maintenance_message": null
224
+ }
225
+ ```
226
+
227
+ ### 版本比较逻辑(Version Comparison Logic)
228
+
229
+ ```
230
+ CLIENT VERSION vs MINIMUM VERSION:
231
+ ├── client >= minimum → 正常继续
232
+ ├── client < minimum → 强制更新页
233
+ │ └── 未更新不可用
234
+ └── client < latest → 弹出可选升级提示
235
+
236
+ FEATURE FLAGS:
237
+ ├── 不用发版就能开关功能
238
+ ├── 按版本/设备做 A/B
239
+ └── 灰度发布(10% → 50% → 100%)
240
+ ```
241
+
242
+ ---
243
+
244
+ ## 5. 移动端认证(Authentication for Mobile)
245
+
246
+ ### Token 策略(Token Strategy)
247
+
248
+ ```
249
+ ACCESS TOKEN:
250
+ ├── 短期(15 分钟 - 1 小时)
251
+ ├── 存内存(非持久化)
252
+ ├── API 请求使用
253
+ └── 过期自动刷新
254
+
255
+ REFRESH TOKEN:
256
+ ├── 长期(30-90 天)
257
+ ├── 存 SecureStore/Keychain
258
+ ├── 仅用于换新 access token
259
+ └── 每次使用轮换(安全)
260
+
261
+ DEVICE TOKEN:
262
+ ├── 标识设备
263
+ ├── 支持“一键登出所有设备”
264
+ ├── 与 refresh token 绑定
265
+ └── 服务端追踪设备列表
266
+ ```
267
+
268
+ ### 静默续期(Silent Re-authentication)
269
+
270
+ ```
271
+ 请求流程:
272
+ ├── 带 access token 请求
273
+ ├── 401 Unauthorized?
274
+ │ ├── 有 refresh token?
275
+ │ │ ├── Yes → 调 /auth/refresh
276
+ │ │ │ ├── 成功 → 重试原请求
277
+ │ │ │ └── 失败 → 强制登出
278
+ │ │ └── No → 强制登出
279
+ │ └── 仅过期(非失效)
280
+ │ └── 静默刷新,用户无感
281
+ └── 成功 → 继续
282
+ ```
283
+
284
+ ---
285
+
286
+ ## 6. 移动端错误处理(Error Handling for Mobile)
287
+
288
+ ### 移动端错误格式(Mobile-Specific Error Format)
289
+
290
+ ```json
291
+ {
292
+ "error": {
293
+ "code": "PAYMENT_DECLINED",
294
+ "message": "Your payment was declined",
295
+ "user_message": "Please check your card details or try another payment method",
296
+ "action": {
297
+ "type": "navigate",
298
+ "destination": "payment_methods"
299
+ },
300
+ "retry": {
301
+ "allowed": true,
302
+ "after_seconds": 5
303
+ }
304
+ }
305
+ }
306
+ ```
307
+
308
+ ### 错误分类(Error Categories)
309
+
310
+ | 码段(Code Range) | 分类 | 移动端处理 |
311
+ |--------------------|------|------------|
312
+ | 400-499 | 客户端错误 | 提示用户并要求操作 |
313
+ | 401 | 认证过期 | 静默刷新或重新登录 |
314
+ | 403 | 无权限 | 显示升级/权限页 |
315
+ | 404 | 不存在 | 本地移除缓存 |
316
+ | 409 | 冲突 | 显示冲突处理 UI |
317
+ | 429 | 限流 | 读取 Retry-After 退避 |
318
+ | 500-599 | 服务端错误 | 退避重试 + 稍后再试 |
319
+ | Network | 无网络 | 用缓存 + 入队同步 |
320
+
321
+ ---
322
+
323
+ ## 7. 媒体与二进制处理(Media & Binary Handling)
324
+
325
+ ### 图片优化(Image Optimization)
326
+
327
+ ```
328
+ CLIENT REQUEST:
329
+ GET /images/{id}?w=400&h=300&q=80&format=webp
330
+
331
+ SERVER RESPONSE:
332
+ ├── 动态裁剪或 CDN 变体
333
+ ├── Android 用 WebP(更小)
334
+ ├── iOS 14+ 可用 HEIC(支持时)
335
+ ├── JPEG 兜底
336
+ └── Cache-Control: max-age=31536000
337
+ ```
338
+
339
+ ### 分片上传(Chunked Upload, 大文件)
340
+
341
+ ```
342
+ UPLOAD FLOW:
343
+ 1. POST /uploads/init
344
+ { filename, size, mime_type }
345
+ → { upload_id, chunk_size }
346
+
347
+ 2. PUT /uploads/{upload_id}/chunks/{n}
348
+ → 上传每个分片(1-5 MB)
349
+ → 可断点续传
350
+
351
+ 3. POST /uploads/{upload_id}/complete
352
+ → 服务端拼装分片
353
+ → 返回最终文件 URL
354
+ ```
355
+
356
+ ### 音视频流媒体(Streaming Audio/Video)
357
+
358
+ ```
359
+ 要求:
360
+ ├── iOS 使用 HLS
361
+ ├── Android 用 DASH 或 HLS
362
+ ├── 多码率自适应
363
+ ├── 支持 Range 请求(seek)
364
+ └── 支持离线下载分片
365
+
366
+ 接口:
367
+ GET /media/{id}/manifest.m3u8 → HLS manifest
368
+ GET /media/{id}/segment_{n}.ts → 视频分片
369
+ GET /media/{id}/download → 离线完整文件
370
+ ```
371
+
372
+ ---
373
+
374
+ ## 8. 移动端安全(Security for Mobile)
375
+
376
+ ### 设备证明(Device Attestation)
377
+
378
+ ```
379
+ 验证真机(非模拟器/机器人):
380
+ ├── iOS:DeviceCheck API
381
+ │ └── 服务端向 Apple 验证
382
+ ├── Android:Play Integrity API(替代 SafetyNet)
383
+ │ └── 服务端向 Google 验证
384
+ └── 失败即拒绝(Fail closed)
385
+ ```
386
+
387
+ ### 请求签名(Request Signing)
388
+
389
+ ```
390
+ CLIENT:
391
+ ├── signature = HMAC(timestamp + path + body, secret)
392
+ ├── 发送:X-Signature: {signature}
393
+ ├── 发送:X-Timestamp: {timestamp}
394
+ └── 发送:X-Device-ID: {device_id}
395
+
396
+ SERVER:
397
+ ├── 校验时间戳(5 分钟内)
398
+ ├── 用同样规则生成签名
399
+ ├── 比对签名
400
+ └── 不匹配则拒绝(篡改)
401
+ ```
402
+
403
+ ### 限流(Rate Limiting)
404
+
405
+ ```
406
+ 移动端建议限流维度:
407
+ ├── 每设备(X-Device-ID)
408
+ ├── 每用户(鉴权后)
409
+ ├── 每接口(敏感接口更严)
410
+ └── 推荐滑动窗口
411
+
412
+ 返回 Header:
413
+ X-RateLimit-Limit: 100
414
+ X-RateLimit-Remaining: 95
415
+ X-RateLimit-Reset: 1609459200
416
+ Retry-After: 60(当 429)
417
+ ```
418
+
419
+ ---
420
+
421
+ ## 9. 监控与分析(Monitoring & Analytics)
422
+
423
+ ### 移动端必须携带的 Header
424
+
425
+ ```
426
+ 每个移动请求必须包含:
427
+ ├── X-App-Version: 2.1.0
428
+ ├── X-Platform: ios | android
429
+ ├── X-OS-Version: 17.0
430
+ ├── X-Device-Model: iPhone15,2
431
+ ├── X-Device-ID: uuid(持久)
432
+ ├── X-Request-ID: uuid(单次请求追踪)
433
+ ├── Accept-Language: tr-TR
434
+ └── X-Timezone: Europe/Istanbul
435
+ ```
436
+
437
+ ### 需要记录的内容(What to Log)
438
+
439
+ ```
440
+ 每个请求:
441
+ ├── 上述 Header
442
+ ├── Endpoint / method / status
443
+ ├── 响应时间
444
+ ├── 错误细节(如有)
445
+ └── User ID(已登录)
446
+
447
+ 告警:
448
+ ├── 版本级错误率 > 5%
449
+ ├── P95 延迟 > 2s
450
+ ├── 某版本崩溃突增
451
+ ├── 认证失败异常(可能攻击)
452
+ └── Push 投递失败激增
453
+ ```
454
+
455
+ ---
456
+
457
+ ## 📝 移动端后端清单(MOBILE BACKEND CHECKLIST)
458
+
459
+ ### API 设计前
460
+ - [ ] 已识别移动端特有需求?
461
+ - [ ] 离线行为已规划?
462
+ - [ ] 同步策略已设计?
463
+ - [ ] 带宽约束已考虑?
464
+
465
+ ### 每个接口
466
+ - [ ] 响应尽量小?
467
+ - [ ] 分页是 cursor-based?
468
+ - [ ] 缓存头正确?
469
+ - [ ] 错误格式含行动指引?
470
+
471
+ ### 认证
472
+ - [ ] Token 刷新机制?
473
+ - [ ] 静默续期流程?
474
+ - [ ] 多设备登出?
475
+ - [ ] 安全存储指引?
476
+
477
+ ### 推送通知
478
+ - [ ] FCM + APNs 配置?
479
+ - [ ] Token 生命周期管理?
480
+ - [ ] Silent/Display 分工明确?
481
+ - [ ] Push 不含敏感数据?
482
+
483
+ ### 发布
484
+ - [ ] 版本检查接口已就绪?
485
+ - [ ] Feature flags 配置?
486
+ - [ ] 强制更新机制?
487
+ - [ ] 监控 Header 强制要求?
488
+
489
+ ---
490
+
491
+ > **记住(Remember)**:移动端后端必须能在差网环境、低电量、会话中断的情况下仍可用。客户端不可完全信任,但也不能“挂死”;要提供离线能力与清晰可恢复的错误路径。