@umacloud/knowledge 1.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 (418) hide show
  1. package/00-governance/governance-capabilities.md +557 -0
  2. package/00-governance/knowledge-map.md +39 -0
  3. package/00-governance/maintenance-policy.md +76 -0
  4. package/00-governance/review-checklist.md +81 -0
  5. package/README.md +13 -0
  6. package/ai/01-standards/agent-development-complete.md +691 -0
  7. package/ai/01-standards/llm-application-complete.md +488 -0
  8. package/ai/01-standards/mlops-complete.md +798 -0
  9. package/ai/01-standards/prompt-engineering-complete.md +646 -0
  10. package/ai/01-standards/rag-architecture-complete.md +649 -0
  11. package/ai/02-playbooks/llm-evaluation-playbook.md +847 -0
  12. package/ai/03-checklists/ai-project-checklist.md +215 -0
  13. package/ai/04-antipatterns/ai-antipatterns.md +661 -0
  14. package/ai/05-cases/case-rag-production.md +147 -0
  15. package/ai/06-glossary/ai-glossary.md +162 -0
  16. package/ai/agent-evaluation-benchmark.md +53 -0
  17. package/ai/ai-agent-memory-context-management.md +41 -0
  18. package/ai/ai-cost-capacity-optimization-playbook.md +42 -0
  19. package/ai/ai-data-security-and-compliance-playbook.md +37 -0
  20. package/ai/ai-domain-index-and-checklist.md +40 -0
  21. package/ai/ai-governance-maturity-model.md +50 -0
  22. package/ai/ai-model-selection-and-routing-strategy.md +47 -0
  23. package/ai/ai-observability-and-oncall-runbook.md +52 -0
  24. package/ai/ai-rag-engineering-playbook.md +42 -0
  25. package/ai/ai-red-team-and-safety-evaluation.md +42 -0
  26. package/ai/ai-release-readiness-and-rollback-gate.md +42 -0
  27. package/ai/llm-agent-engineering-deep-dive.md +57 -0
  28. package/ai/prompt-and-tool-guardrails.md +52 -0
  29. package/api/01-standards/enterprise-api-standards.md +198 -0
  30. package/api/01-standards/rest-api-design-guide.md +63 -0
  31. package/api/02-playbooks/api-pagination-playbook.md +93 -0
  32. package/api/02-playbooks/graphql-production-playbook.md +176 -0
  33. package/api/03-checklists/api-review-checklist.md +55 -0
  34. package/api/04-antipatterns/api-antipatterns.md +112 -0
  35. package/architecture/01-standards/api-gateway-patterns.md +496 -0
  36. package/architecture/01-standards/cloud-native-patterns.md +644 -0
  37. package/architecture/01-standards/distributed-systems-patterns.md +591 -0
  38. package/architecture/01-standards/event-driven-architecture.md +595 -0
  39. package/architecture/01-standards/microservices-patterns-complete.md +968 -0
  40. package/architecture/01-standards/microservices-patterns.md +495 -0
  41. package/architecture/01-standards/system-design-interview.md +664 -0
  42. package/architecture/02-playbooks/microservices-patterns-playbook.md +137 -0
  43. package/architecture/02-playbooks/migration-playbook.md +780 -0
  44. package/architecture/02-playbooks/system-design-playbook.md +779 -0
  45. package/architecture/03-checklists/architecture-decision-checklist.md +297 -0
  46. package/architecture/04-antipatterns/architecture-antipatterns.md +417 -0
  47. package/architecture/05-cases/case-netflix-microservices.md +413 -0
  48. package/architecture/06-glossary/architecture-glossary.md +164 -0
  49. package/architecture/adr-template-and-examples.md +38 -0
  50. package/architecture/api-gateway-deep-dive.md +1291 -0
  51. package/architecture/configuration-management.md +1162 -0
  52. package/architecture/distributed-transactions.md +1220 -0
  53. package/architecture/microservices-complete.md +735 -0
  54. package/architecture/resilience-and-disaster-patterns.md +37 -0
  55. package/architecture/service-governance.md +1198 -0
  56. package/architecture/system-architecture-deep-dive.md +37 -0
  57. package/backend/01-standards/analytics-and-growth.md +65 -0
  58. package/backend/01-standards/api-and-error-conventions.md +120 -0
  59. package/backend/01-standards/application-layering-and-packaging.md +160 -0
  60. package/backend/01-standards/auth-implementation.md +104 -0
  61. package/backend/01-standards/backend-framework-idioms.md +74 -0
  62. package/backend/01-standards/background-jobs-and-async.md +66 -0
  63. package/backend/01-standards/caching-strategies-complete.md +390 -0
  64. package/backend/01-standards/config-and-observability.md +77 -0
  65. package/backend/01-standards/data-modeling-and-persistence.md +94 -0
  66. package/backend/01-standards/django-complete.md +1765 -0
  67. package/backend/01-standards/email-and-notifications.md +64 -0
  68. package/backend/01-standards/fastapi-complete.md +925 -0
  69. package/backend/01-standards/file-upload-and-storage.md +66 -0
  70. package/backend/01-standards/graphql-api-complete.md +416 -0
  71. package/backend/01-standards/llm-application-standard.md +78 -0
  72. package/backend/01-standards/message-queue-patterns.md +379 -0
  73. package/backend/01-standards/microservices-and-distributed.md +78 -0
  74. package/backend/01-standards/nestjs-complete.md +2167 -0
  75. package/backend/01-standards/payment-integration.md +80 -0
  76. package/backend/01-standards/rate-limiting-complete.md +451 -0
  77. package/backend/01-standards/realtime-and-websocket.md +65 -0
  78. package/backend/01-standards/search-and-filtering.md +64 -0
  79. package/backend/01-standards/spring-boot-complete.md +445 -0
  80. package/backend/02-playbooks/api-design-playbook.md +718 -0
  81. package/backend/02-playbooks/email-send-playbook.md +130 -0
  82. package/backend/02-playbooks/file-upload-s3-playbook.md +153 -0
  83. package/backend/02-playbooks/typescript-enterprise-playbook.md +133 -0
  84. package/backend/02-playbooks/websocket-realtime-playbook.md +154 -0
  85. package/backend/03-checklists/api-launch-checklist.md +189 -0
  86. package/backend/04-antipatterns/backend-antipatterns.md +1051 -0
  87. package/blockchain/01-standards/blockchain-basics.md +557 -0
  88. package/blockchain/01-standards/smart-contract-development.md +1315 -0
  89. package/cicd/01-standards/deployment-and-delivery-standard.md +96 -0
  90. package/cicd/01-standards/github-actions-complete.md +473 -0
  91. package/cicd/01-standards/release-and-store-submission.md +75 -0
  92. package/cicd/02-playbooks/cicd-pipeline-playbook.md +144 -0
  93. package/cicd/02-playbooks/release-management-playbook.md +605 -0
  94. package/cicd/03-checklists/pipeline-security-checklist.md +168 -0
  95. package/cicd/04-antipatterns/cicd-antipatterns.md +589 -0
  96. package/cicd/05-cases/case-deployment-automation.md +221 -0
  97. package/cicd/05-cases/case-gitops-transformation.md +212 -0
  98. package/cicd/06-glossary/cicd-glossary.md +114 -0
  99. package/cicd/cicd-blueprint-deep-dive.md +38 -0
  100. package/cicd/release-readiness-gate.md +37 -0
  101. package/cloud-native/01-standards/container-security.md +741 -0
  102. package/cloud-native/01-standards/kubernetes-complete.md +812 -0
  103. package/cloud-native/02-playbooks/api-gateway-playbook.md +155 -0
  104. package/cloud-native/02-playbooks/gitops-with-argocd.md +760 -0
  105. package/cloud-native/02-playbooks/k8s-troubleshooting-playbook.md +1942 -0
  106. package/cloud-native/02-playbooks/message-queue-playbook.md +129 -0
  107. package/cloud-native/02-playbooks/multicloud-governance.md +726 -0
  108. package/cloud-native/02-playbooks/serverless-patterns.md +788 -0
  109. package/cloud-native/02-playbooks/service-mesh-playbook.md +612 -0
  110. package/cloud-native/02-playbooks/terraform-iac-playbook.md +143 -0
  111. package/cloud-native/03-checklists/container-security-checklist.md +431 -0
  112. package/cloud-native/03-checklists/k8s-production-readiness-checklist.md +460 -0
  113. package/cloud-native/04-antipatterns/container-antipatterns.md +660 -0
  114. package/cloud-native/04-antipatterns/k8s-antipatterns.md +743 -0
  115. package/cloud-native/05-cases/case-k8s-migration.md +478 -0
  116. package/cloud-native/05-cases/case-k8s-scaling.md +642 -0
  117. package/cloud-native/05-cases/case-k8s-security-incident.md +397 -0
  118. package/cloud-native/06-glossary/cloud-native-glossary.md +337 -0
  119. package/cross-platform/01-standards/cross-platform-frameworks.md +83 -0
  120. package/cross-platform/01-standards/platform-selection-and-architecture.md +77 -0
  121. package/data/01-standards/elasticsearch-complete.md +2098 -0
  122. package/data/01-standards/postgresql-complete.md +1613 -0
  123. package/data/01-standards/redis-complete.md +1527 -0
  124. package/data/02-playbooks/database-optimization-playbook.md +403 -0
  125. package/data/02-playbooks/elasticsearch-production-playbook.md +132 -0
  126. package/data/03-checklists/database-launch-checklist.md +187 -0
  127. package/data/04-antipatterns/database-antipatterns.md +873 -0
  128. package/data/05-cases/case-database-migration.md +310 -0
  129. package/data/06-glossary/database-glossary.md +440 -0
  130. package/data/data-governance-and-modeling-deep-dive.md +39 -0
  131. package/data-engineering/01-standards/airflow-complete.md +523 -0
  132. package/data-engineering/01-standards/kafka-complete.md +1521 -0
  133. package/data-engineering/02-playbooks/spark-etl-playbook.md +496 -0
  134. package/data-engineering/03-checklists/pipeline-launch-checklist.md +194 -0
  135. package/data-engineering/04-antipatterns/data-pipeline-antipatterns.md +684 -0
  136. package/data-engineering/05-cases/case-real-time-pipeline.md +355 -0
  137. package/data-engineering/06-glossary/data-engineering-glossary.md +429 -0
  138. package/database/01-standards/database-schema-standards.md +147 -0
  139. package/database/02-playbooks/postgresql-optimization-quick.md +52 -0
  140. package/database/02-playbooks/postgresql-performance-optimization.md +58 -0
  141. package/database/02-playbooks/postgresql-production-playbook.md +146 -0
  142. package/database/02-playbooks/redis-caching-playbook.md +117 -0
  143. package/database/03-checklists/database-review-checklist.md +50 -0
  144. package/database/04-antipatterns/database-antipatterns.md +112 -0
  145. package/design/01-standards/ui-design-system-complete.md +423 -0
  146. package/design/02-playbooks/design-handoff-playbook.md +254 -0
  147. package/design/02-playbooks/design-review-playbook.md +388 -0
  148. package/design/03-checklists/design-review-checklist.md +246 -0
  149. package/design/04-antipatterns/design-antipatterns.md +378 -0
  150. package/design/05-cases/case-design-system-adoption.md +328 -0
  151. package/design/06-glossary/design-glossary.md +329 -0
  152. package/design/ui-full-lifecycle-cross-platform-playbook.md +571 -0
  153. package/design/ux-system-deep-dive.md +38 -0
  154. package/design-systems/00-craft-rules.md +71 -0
  155. package/design-systems/aesthetic-families.md +43 -0
  156. package/design-systems/anti-ai-slop.md +162 -0
  157. package/design-systems/bold-geometric.md +120 -0
  158. package/design-systems/brutalist-bold.md +103 -0
  159. package/design-systems/editorial-clean.md +109 -0
  160. package/design-systems/glass-aurora.md +108 -0
  161. package/design-systems/modern-minimal.md +145 -0
  162. package/design-systems/premium-luxury.md +106 -0
  163. package/design-systems/product-type-design-map.md +48 -0
  164. package/design-systems/soft-warm.md +123 -0
  165. package/design-systems/tech-utility.md +113 -0
  166. package/desktop/01-standards/desktop-app-standard.md +72 -0
  167. package/desktop/01-standards/desktop-design.md +71 -0
  168. package/development/00-governance/document-template.md +41 -0
  169. package/development/01-standards/api-versioning-strategies.md +432 -0
  170. package/development/01-standards/authentication-patterns-complete.md +479 -0
  171. package/development/01-standards/css-architecture-complete.md +550 -0
  172. package/development/01-standards/database-migration-strategies.md +484 -0
  173. package/development/01-standards/elasticsearch-complete.md +347 -0
  174. package/development/01-standards/git-complete.md +371 -0
  175. package/development/01-standards/golang-complete.md +1565 -0
  176. package/development/01-standards/graphql-complete.md +298 -0
  177. package/development/01-standards/javascript-bundlers-complete.md +469 -0
  178. package/development/01-standards/javascript-typescript-complete.md +528 -0
  179. package/development/01-standards/jest-complete.md +275 -0
  180. package/development/01-standards/linux-complete.md +234 -0
  181. package/development/01-standards/logging-observability-complete.md +526 -0
  182. package/development/01-standards/microservices-communication.md +502 -0
  183. package/development/01-standards/mongodb-complete.md +406 -0
  184. package/development/01-standards/oauth2-complete.md +285 -0
  185. package/development/01-standards/performance-optimization-complete.md +289 -0
  186. package/development/01-standards/playwright-complete.md +247 -0
  187. package/development/01-standards/postgresql-complete.md +456 -0
  188. package/development/01-standards/pytest-complete.md +340 -0
  189. package/development/01-standards/python-async-programming.md +902 -0
  190. package/development/01-standards/python-complete.md +956 -0
  191. package/development/01-standards/python-decorators-complete.md +799 -0
  192. package/development/01-standards/python-design-patterns.md +2854 -0
  193. package/development/01-standards/python-packaging-distribution.md +420 -0
  194. package/development/01-standards/python-testing-strategies.md +607 -0
  195. package/development/01-standards/python-web-frameworks-comparison.md +471 -0
  196. package/development/01-standards/redis-complete.md +317 -0
  197. package/development/01-standards/rest-api-complete.md +316 -0
  198. package/development/01-standards/rust-complete.md +578 -0
  199. package/development/01-standards/typescript-advanced-types.md +1513 -0
  200. package/development/01-standards/web-security-complete.md +292 -0
  201. package/development/02-playbooks/api-design-playbook.md +810 -0
  202. package/development/02-playbooks/database-migration-playbook.md +580 -0
  203. package/development/02-playbooks/debugging-playbook.md +692 -0
  204. package/development/02-playbooks/feature-delivery-playbook.md +430 -0
  205. package/development/02-playbooks/incident-hotfix-playbook.md +387 -0
  206. package/development/02-playbooks/performance-optimization-playbook.md +531 -0
  207. package/development/02-playbooks/performance-tuning-playbook.md +652 -0
  208. package/development/02-playbooks/refactor-playbook.md +403 -0
  209. package/development/02-playbooks/release-playbook.md +469 -0
  210. package/development/03-checklists/architecture-review-checklist.md +168 -0
  211. package/development/03-checklists/data-migration-checklist.md +157 -0
  212. package/development/03-checklists/oncall-handover-checklist.md +173 -0
  213. package/development/03-checklists/pr-checklist.md +158 -0
  214. package/development/03-checklists/production-readiness-checklist.md +190 -0
  215. package/development/03-checklists/release-readiness-checklist.md +154 -0
  216. package/development/03-checklists/security-review-checklist.md +182 -0
  217. package/development/04-antipatterns/api-antipatterns.md +657 -0
  218. package/development/04-antipatterns/architecture-antipatterns.md +686 -0
  219. package/development/04-antipatterns/backend-antipatterns.md +648 -0
  220. package/development/04-antipatterns/cicd-antipatterns.md +540 -0
  221. package/development/04-antipatterns/code-smell-antipatterns.md +571 -0
  222. package/development/04-antipatterns/data-antipatterns.md +658 -0
  223. package/development/04-antipatterns/database-antipatterns.md +578 -0
  224. package/development/04-antipatterns/frontend-antipatterns.md +635 -0
  225. package/development/04-antipatterns/reliability-antipatterns.md +700 -0
  226. package/development/04-antipatterns/security-antipatterns.md +747 -0
  227. package/development/05-cases/case-api-version-migration.md +428 -0
  228. package/development/05-cases/case-authorization-hardening.md +383 -0
  229. package/development/05-cases/case-bluegreen-rollback.md +466 -0
  230. package/development/05-cases/case-cache-snowball-protection.md +485 -0
  231. package/development/05-cases/case-ci-cd-pipeline.md +544 -0
  232. package/development/05-cases/case-database-scaling.md +500 -0
  233. package/development/05-cases/case-db-hotspot-optimization.md +487 -0
  234. package/development/05-cases/case-incident-mttr-reduction.md +563 -0
  235. package/development/05-cases/case-microservice-migration.md +375 -0
  236. package/development/05-cases/case-performance-optimization.md +406 -0
  237. package/development/05-cases/case-security-incident-response.md +345 -0
  238. package/development/06-glossary/full-stack-glossary.md +166 -0
  239. package/development/09-maturity/quarterly-audit-template.md +35 -0
  240. package/development/11-ui-excellence/ui-aesthetic-system.md +41 -0
  241. package/development/11-ui-excellence/ui-engineering-excellence.md +435 -0
  242. package/development/12-scenarios/development-scenarios-guide.md +565 -0
  243. package/development/13-implementation-assets/implementation-toolkit.md +282 -0
  244. package/development/13-implementation-assets/knowledge-gates-execution.md +43 -0
  245. package/development/14-full-lifecycle/software-lifecycle-gates.md +511 -0
  246. package/development/15-lifecycle-templates/project-templates-collection.md +791 -0
  247. package/development/api-contract-and-versioning-guide.md +36 -0
  248. package/development/api-governance-complete.md +43 -0
  249. package/development/backend-engineering-complete.md +43 -0
  250. package/development/code-review-quality-complete.md +43 -0
  251. package/development/concurrency-reliability-complete.md +43 -0
  252. package/development/database-engineering-complete.md +43 -0
  253. package/development/engineering-effectiveness-complete.md +43 -0
  254. package/development/engineering-standards-deep-dive.md +38 -0
  255. package/development/frontend-engineering-complete.md +43 -0
  256. package/development/performance-capacity-complete.md +43 -0
  257. package/development/refactor-migration-complete.md +42 -0
  258. package/development/refactoring-and-techdebt-playbook.md +37 -0
  259. package/development/security-in-development-complete.md +43 -0
  260. package/devops/01-standards/cicd-pipeline-complete.md +262 -0
  261. package/devops/01-standards/docker-complete.md +1490 -0
  262. package/devops/01-standards/github-actions-complete.md +337 -0
  263. package/devops/01-standards/kubernetes-complete.md +638 -0
  264. package/devops/01-standards/terraform-complete.md +2117 -0
  265. package/devops/02-playbooks/docker-compose-playbook.md +233 -0
  266. package/devops/02-playbooks/docker-k8s-production-playbook.md +186 -0
  267. package/devops/02-playbooks/docker-production-playbook.md +952 -0
  268. package/edge-iot/01-standards/edge-iot-complete.md +473 -0
  269. package/experts/architect/api-design.md +178 -0
  270. package/experts/architect/methodology.md +124 -0
  271. package/experts/architect/security.md +75 -0
  272. package/experts/backend-lead/methodology.md +216 -0
  273. package/experts/devops/methodology.md +160 -0
  274. package/experts/frontend-lead/methodology.md +178 -0
  275. package/experts/product-manager/industry/ecommerce.md +43 -0
  276. package/experts/product-manager/industry/saas.md +40 -0
  277. package/experts/product-manager/methodology.md +97 -0
  278. package/experts/qa-lead/methodology.md +123 -0
  279. package/experts/qa-lead/test-strategy.md +128 -0
  280. package/experts/uiux-designer/methodology.md +125 -0
  281. package/frontend/01-standards/accessibility-complete.md +532 -0
  282. package/frontend/01-standards/accessibility-standard.md +74 -0
  283. package/frontend/01-standards/admin-dashboard-and-crud.md +72 -0
  284. package/frontend/01-standards/design-tokens-complete.md +444 -0
  285. package/frontend/01-standards/forms-and-validation.md +77 -0
  286. package/frontend/01-standards/frontend-architecture-and-layering.md +119 -0
  287. package/frontend/01-standards/i18n-and-localization.md +65 -0
  288. package/frontend/01-standards/nextjs-complete.md +451 -0
  289. package/frontend/01-standards/react-complete.md +713 -0
  290. package/frontend/01-standards/react-hooks-complete-guide.md +1100 -0
  291. package/frontend/01-standards/react-hooks-complete.md +1171 -0
  292. package/frontend/01-standards/seo-and-web-vitals.md +77 -0
  293. package/frontend/01-standards/state-management-complete.md +444 -0
  294. package/frontend/01-standards/vue-complete.md +499 -0
  295. package/frontend/01-standards/vue3-complete.md +2002 -0
  296. package/frontend/01-standards/web-framework-best-practices.md +64 -0
  297. package/frontend/01-standards/web-performance-complete.md +495 -0
  298. package/frontend/02-playbooks/accessibility-a11y-playbook.md +161 -0
  299. package/frontend/02-playbooks/frontend-performance-playbook.md +707 -0
  300. package/frontend/02-playbooks/i18n-internationalization-playbook.md +120 -0
  301. package/frontend/02-playbooks/performance-optimization-playbook.md +163 -0
  302. package/frontend/02-playbooks/react-nextjs-production-playbook.md +167 -0
  303. package/frontend/02-playbooks/react-state-management-playbook.md +173 -0
  304. package/frontend/03-checklists/component-quality-checklist.md +166 -0
  305. package/frontend/03-checklists/frontend-launch-checklist.md +299 -0
  306. package/frontend/04-antipatterns/frontend-antipatterns.md +886 -0
  307. package/frontend/05-cases/case-performance-optimization.md +274 -0
  308. package/harmony/01-standards/harmonyos-arkts-standard.md +75 -0
  309. package/harmony/01-standards/harmonyos-design.md +65 -0
  310. package/high-quality-engineering-playbook.md +54 -0
  311. package/incident/01-standards/incident-response-complete.md +303 -0
  312. package/incident/02-playbooks/chaos-engineering-playbook.md +883 -0
  313. package/incident/02-playbooks/postmortem-playbook.md +398 -0
  314. package/incident/03-checklists/incident-readiness-checklist.md +181 -0
  315. package/incident/04-antipatterns/incident-antipatterns.md +490 -0
  316. package/incident/05-cases/case-cascade-failure.md +176 -0
  317. package/incident/06-glossary/incident-glossary.md +114 -0
  318. package/incident/postmortem-and-response-deep-dive.md +39 -0
  319. package/industries/ecommerce/ecommerce-complete.md +631 -0
  320. package/industries/education/education-complete.md +555 -0
  321. package/industries/fintech/fintech-complete.md +501 -0
  322. package/industries/gaming/gaming-complete.md +587 -0
  323. package/industries/healthcare/healthcare-complete.md +452 -0
  324. package/low-code/01-standards/low-code-complete.md +944 -0
  325. package/miniprogram/01-standards/ai-common-mistakes.md +61 -0
  326. package/miniprogram/01-standards/miniprogram-custom-navbar-capsule.md +77 -0
  327. package/miniprogram/01-standards/miniprogram-design.md +61 -0
  328. package/miniprogram/01-standards/miniprogram-standard.md +81 -0
  329. package/mobile/01-standards/android-material-design.md +70 -0
  330. package/mobile/01-standards/flutter-complete.md +384 -0
  331. package/mobile/01-standards/ios-design-hig.md +78 -0
  332. package/mobile/01-standards/mobile-app-standard.md +85 -0
  333. package/mobile/01-standards/react-native-complete.md +352 -0
  334. package/mobile/02-playbooks/mobile-cross-platform-playbook.md +175 -0
  335. package/mobile/02-playbooks/mobile-performance.md +473 -0
  336. package/mobile/03-checklists/mobile-release-checklist.md +234 -0
  337. package/mobile/04-antipatterns/mobile-antipatterns.md +798 -0
  338. package/mobile/05-cases/case-app-performance.md +500 -0
  339. package/mobile/05-cases/case-app-startup-optimization.md +218 -0
  340. package/mobile/06-glossary/mobile-glossary.md +484 -0
  341. package/observability/01-standards/observability-standards.md +103 -0
  342. package/observability/02-playbooks/prometheus-grafana-playbook.md +135 -0
  343. package/observability/02-playbooks/structured-logging-playbook.md +73 -0
  344. package/observability/03-checklists/observability-checklist.md +54 -0
  345. package/observability/04-antipatterns/observability-antipatterns.md +106 -0
  346. package/operations/01-standards/prometheus-monitoring-complete.md +1578 -0
  347. package/operations/02-playbooks/capacity-planning-playbook.md +620 -0
  348. package/operations/03-checklists/production-launch-checklist.md +365 -0
  349. package/operations/04-antipatterns/operations-antipatterns.md +664 -0
  350. package/operations/05-cases/case-sre-practices.md +581 -0
  351. package/operations/06-glossary/operations-glossary.md +120 -0
  352. package/operations/aiops-anomaly-detection.md +758 -0
  353. package/operations/capacity-planning.md +1061 -0
  354. package/operations/chaos-engineering.md +659 -0
  355. package/operations/incident-command-system.md +38 -0
  356. package/operations/observability-complete.md +442 -0
  357. package/operations/slo-sli-playbook.md +517 -0
  358. package/operations/sre-operations-deep-dive.md +39 -0
  359. package/package.json +8 -0
  360. package/performance/01-standards/performance-and-scalability.md +80 -0
  361. package/performance/01-standards/performance-standards.md +156 -0
  362. package/performance/02-playbooks/query-optimization-playbook.md +103 -0
  363. package/performance/03-checklists/performance-checklist.md +56 -0
  364. package/performance/04-antipatterns/performance-antipatterns.md +146 -0
  365. package/product/01-standards/product-management-complete.md +285 -0
  366. package/product/02-playbooks/feature-launch-playbook.md +207 -0
  367. package/product/02-playbooks/user-research-playbook.md +532 -0
  368. package/product/03-checklists/feature-launch-checklist.md +275 -0
  369. package/product/04-antipatterns/product-antipatterns.md +355 -0
  370. package/product/05-cases/case-mvp-to-scale.md +384 -0
  371. package/product/06-glossary/product-glossary.md +462 -0
  372. package/product/feature-prioritization-framework.md +40 -0
  373. package/product/kpi-and-metric-tree.md +37 -0
  374. package/product/product-discovery-and-prd-deep-dive.md +41 -0
  375. package/quantum/01-standards/quantum-complete.md +1186 -0
  376. package/security/01-standards/api-security-complete.md +511 -0
  377. package/security/01-standards/container-runtime-security.md +574 -0
  378. package/security/01-standards/data-protection-gdpr.md +543 -0
  379. package/security/01-standards/owasp-top10-complete.md +1890 -0
  380. package/security/01-standards/secure-coding-baseline.md +90 -0
  381. package/security/01-standards/supply-chain-security.md +441 -0
  382. package/security/01-standards/web-security-checklist.md +108 -0
  383. package/security/01-standards/zero-trust-architecture.md +521 -0
  384. package/security/02-playbooks/auth-sso-playbook.md +166 -0
  385. package/security/02-playbooks/incident-response-security-playbook.md +588 -0
  386. package/security/02-playbooks/owasp-api-security-playbook.md +129 -0
  387. package/security/02-playbooks/payment-integration-playbook.md +119 -0
  388. package/security/02-playbooks/penetration-testing-playbook.md +517 -0
  389. package/security/03-checklists/security-audit-checklist.md +356 -0
  390. package/security/04-antipatterns/security-coding-antipatterns.md +580 -0
  391. package/security/05-cases/case-log4shell-incident.md +537 -0
  392. package/security/05-cases/case-major-breaches.md +468 -0
  393. package/security/06-glossary/security-glossary.md +212 -0
  394. package/security/compliance-automation.md +993 -0
  395. package/security/container-security.md +680 -0
  396. package/security/devsecops-complete.md +426 -0
  397. package/security/sast-dast-sca.md +775 -0
  398. package/security/secrets-management.md +594 -0
  399. package/security/security-architecture-deep-dive.md +37 -0
  400. package/security/threat-modeling-stride-playbook.md +40 -0
  401. package/seed-templates/auth-system.md +59 -0
  402. package/seed-templates/blog-content.md +94 -0
  403. package/seed-templates/dashboard.md +89 -0
  404. package/seed-templates/docs-site.md +73 -0
  405. package/seed-templates/e-commerce.md +50 -0
  406. package/seed-templates/saas-landing.md +92 -0
  407. package/seed-templates/settings-page.md +51 -0
  408. package/testing/01-standards/test-strategy-and-layering.md +83 -0
  409. package/testing/01-standards/testing-strategy-complete.md +422 -0
  410. package/testing/01-standards/unit-testing-best-practices.md +118 -0
  411. package/testing/02-playbooks/e2e-testing-playbook.md +988 -0
  412. package/testing/02-playbooks/testing-strategy-playbook.md +126 -0
  413. package/testing/03-checklists/test-strategy-checklist.md +208 -0
  414. package/testing/04-antipatterns/testing-antipatterns.md +718 -0
  415. package/testing/05-cases/case-testing-transformation.md +300 -0
  416. package/testing/06-glossary/testing-glossary.md +110 -0
  417. package/testing/risk-based-test-matrix.md +36 -0
  418. package/testing/testing-strategy-deep-dive.md +37 -0
@@ -0,0 +1,718 @@
1
+ ---
2
+ id: api-design-playbook
3
+ title: REST API 设计 Playbook
4
+ domain: backend
5
+ category: 02-playbooks
6
+ difficulty: intermediate
7
+ tags: [api, backend, design, http, playbook, 分页, 方法语义, 版本控制]
8
+ quality_score: 70
9
+ last_updated: 2026-06-15
10
+ ---
11
+ # REST API 设计 Playbook
12
+
13
+ > 适用场景:面向客户端/第三方的 HTTP API 设计与实现。
14
+ > 约束:遵循 RESTful 语义、HTTP 标准、安全最佳实践。
15
+
16
+ ---
17
+
18
+ ## 1. URL 设计
19
+
20
+ ### 1.1 资源命名规范
21
+
22
+ ```
23
+ # 使用复数名词表示集合
24
+ GET /api/v1/users
25
+ GET /api/v1/users/123
26
+ POST /api/v1/users
27
+ PUT /api/v1/users/123
28
+ DELETE /api/v1/users/123
29
+
30
+ # 使用 kebab-case
31
+ GET /api/v1/user-profiles # 正确
32
+ GET /api/v1/userProfiles # 错误:camelCase
33
+ GET /api/v1/user_profiles # 不推荐:snake_case
34
+
35
+ # 资源关系通过层级表达
36
+ GET /api/v1/users/123/orders # 用户的订单列表
37
+ GET /api/v1/users/123/orders/456 # 特定订单
38
+ GET /api/v1/users/123/orders/456/items # 订单项
39
+
40
+ # 层级不超过 3 层;更深关系使用查询参数
41
+ GET /api/v1/order-items?orderId=456&userId=123 # 替代深层嵌套
42
+ ```
43
+
44
+ ### 1.2 非 CRUD 操作
45
+
46
+ ```
47
+ # 使用动词子资源(仅限不适合 CRUD 的操作)
48
+ POST /api/v1/users/123/activate
49
+ POST /api/v1/users/123/deactivate
50
+ POST /api/v1/orders/456/cancel
51
+ POST /api/v1/reports/export
52
+
53
+ # 批量操作
54
+ POST /api/v1/users/batch-delete
55
+ Body: { "ids": ["123", "456", "789"] }
56
+
57
+ # 搜索(当查询参数过于复杂时)
58
+ POST /api/v1/users/search
59
+ Body: { "filters": [...], "sort": [...] }
60
+ ```
61
+
62
+ ### 1.3 查询参数
63
+
64
+ ```
65
+ # 过滤
66
+ GET /api/v1/users?status=active&role=admin
67
+
68
+ # 排序
69
+ GET /api/v1/users?sort=created_at:desc,name:asc
70
+
71
+ # 字段选择(降低传输体积)
72
+ GET /api/v1/users?fields=id,name,email
73
+
74
+ # 关联展开
75
+ GET /api/v1/orders?expand=customer,items
76
+
77
+ # 分页
78
+ GET /api/v1/users?page=2&per_page=20
79
+ GET /api/v1/users?cursor=eyJpZCI6MTAwfQ&limit=20
80
+ ```
81
+
82
+ ---
83
+
84
+ ## 2. HTTP 方法语义
85
+
86
+ | 方法 | 语义 | 幂等 | 安全 | 请求体 | 典型用途 |
87
+ |------|------|------|------|--------|----------|
88
+ | GET | 读取资源 | 是 | 是 | 无 | 查询、列表 |
89
+ | POST | 创建资源 / 触发操作 | 否 | 否 | 有 | 创建、搜索、RPC |
90
+ | PUT | 完整替换资源 | 是 | 否 | 有 | 全量更新 |
91
+ | PATCH | 部分更新资源 | 否* | 否 | 有 | 局部更新 |
92
+ | DELETE | 删除资源 | 是 | 否 | 可选 | 删除 |
93
+ | HEAD | 获取元信息(无 body) | 是 | 是 | 无 | 存在性检查 |
94
+ | OPTIONS | 获取支持的方法 | 是 | 是 | 无 | CORS 预检 |
95
+
96
+ > *PATCH 可设计为幂等,但 RFC 不要求。
97
+
98
+ ### PUT vs PATCH
99
+
100
+ ```python
101
+ # PUT: 完整替换(缺失字段设为默认值)
102
+ # PUT /api/v1/users/123
103
+ {
104
+ "name": "Alice",
105
+ "email": "alice@example.com",
106
+ "role": "admin"
107
+ # bio 字段缺失 → 会被设为 null 或默认值
108
+ }
109
+
110
+ # PATCH: 部分更新(只修改传入的字段)
111
+ # PATCH /api/v1/users/123
112
+ {
113
+ "role": "admin"
114
+ # 只更新 role,其他字段不变
115
+ }
116
+ ```
117
+
118
+ ---
119
+
120
+ ## 3. 状态码使用
121
+
122
+ ### 3.1 成功响应
123
+
124
+ | 状态码 | 含义 | 使用场景 |
125
+ |--------|------|----------|
126
+ | 200 OK | 请求成功 | GET、PUT、PATCH、DELETE 成功 |
127
+ | 201 Created | 资源已创建 | POST 创建成功,Location 头指向新资源 |
128
+ | 202 Accepted | 已接受,异步处理中 | 异步任务(导出、批量操作) |
129
+ | 204 No Content | 成功但无响应体 | DELETE 成功、PUT 无需返回 |
130
+
131
+ ### 3.2 客户端错误
132
+
133
+ | 状态码 | 含义 | 使用场景 |
134
+ |--------|------|----------|
135
+ | 400 Bad Request | 请求格式错误 | 参数校验失败、JSON 格式错误 |
136
+ | 401 Unauthorized | 未认证 | Token 缺失或过期 |
137
+ | 403 Forbidden | 无权限 | 认证通过但权限不足 |
138
+ | 404 Not Found | 资源不存在 | ID 不存在、路由不匹配 |
139
+ | 409 Conflict | 资源冲突 | 唯一约束冲突、并发修改冲突 |
140
+ | 422 Unprocessable Entity | 语义错误 | 格式正确但业务规则不满足 |
141
+ | 429 Too Many Requests | 限流 | 超过速率限制 |
142
+
143
+ ### 3.3 服务端错误
144
+
145
+ | 状态码 | 含义 | 使用场景 |
146
+ |--------|------|----------|
147
+ | 500 Internal Server Error | 服务内部错误 | 未预期异常 |
148
+ | 502 Bad Gateway | 上游服务错误 | 代理/网关收到无效响应 |
149
+ | 503 Service Unavailable | 服务不可用 | 维护中、过载 |
150
+ | 504 Gateway Timeout | 上游超时 | 代理等待上游超时 |
151
+
152
+ ---
153
+
154
+ ## 4. 错误响应格式
155
+
156
+ ### 4.1 标准错误格式
157
+
158
+ ```json
159
+ {
160
+ "error": {
161
+ "code": "VALIDATION_ERROR",
162
+ "message": "请求参数校验失败",
163
+ "details": [
164
+ {
165
+ "field": "email",
166
+ "message": "邮箱格式不正确",
167
+ "value": "not-an-email"
168
+ },
169
+ {
170
+ "field": "age",
171
+ "message": "必须大于 0",
172
+ "value": -1
173
+ }
174
+ ],
175
+ "request_id": "req_abc123def456",
176
+ "doc_url": "https://api.example.com/docs/errors#VALIDATION_ERROR"
177
+ }
178
+ }
179
+ ```
180
+
181
+ ### 4.2 Python 实现
182
+
183
+ ```python
184
+ from fastapi import FastAPI, HTTPException, Request
185
+ from fastapi.responses import JSONResponse
186
+ from pydantic import BaseModel
187
+ import uuid
188
+
189
+ class ErrorDetail(BaseModel):
190
+ field: str | None = None
191
+ message: str
192
+ value: str | None = None
193
+
194
+ class ErrorResponse(BaseModel):
195
+ code: str
196
+ message: str
197
+ details: list[ErrorDetail] = []
198
+ request_id: str
199
+
200
+ app = FastAPI()
201
+
202
+ @app.middleware("http")
203
+ async def add_request_id(request: Request, call_next):
204
+ request_id = request.headers.get("X-Request-ID", str(uuid.uuid4()))
205
+ request.state.request_id = request_id
206
+ response = await call_next(request)
207
+ response.headers["X-Request-ID"] = request_id
208
+ return response
209
+
210
+ @app.exception_handler(HTTPException)
211
+ async def http_exception_handler(request: Request, exc: HTTPException):
212
+ return JSONResponse(
213
+ status_code=exc.status_code,
214
+ content={
215
+ "error": {
216
+ "code": exc.detail.get("code", "UNKNOWN"),
217
+ "message": exc.detail.get("message", str(exc.detail)),
218
+ "details": exc.detail.get("details", []),
219
+ "request_id": getattr(request.state, "request_id", "unknown"),
220
+ }
221
+ },
222
+ )
223
+ ```
224
+
225
+ ### 4.3 Node.js 实现
226
+
227
+ ```ts
228
+ // middleware/errorHandler.ts
229
+ import { Request, Response, NextFunction } from 'express';
230
+
231
+ interface AppError extends Error {
232
+ statusCode: number;
233
+ code: string;
234
+ details?: Array<{ field?: string; message: string; value?: string }>;
235
+ }
236
+
237
+ export function errorHandler(err: AppError, req: Request, res: Response, _next: NextFunction) {
238
+ const statusCode = err.statusCode || 500;
239
+ const requestId = req.headers['x-request-id'] || crypto.randomUUID();
240
+
241
+ // 不向客户端暴露内部错误详情
242
+ const message = statusCode >= 500 ? '服务内部错误' : err.message;
243
+
244
+ res.status(statusCode).json({
245
+ error: {
246
+ code: err.code || 'INTERNAL_ERROR',
247
+ message,
248
+ details: statusCode < 500 ? (err.details || []) : [],
249
+ request_id: requestId,
250
+ },
251
+ });
252
+ }
253
+ ```
254
+
255
+ ---
256
+
257
+ ## 5. 分页
258
+
259
+ ### 5.1 Offset 分页
260
+
261
+ ```python
262
+ # Python (FastAPI)
263
+ from fastapi import Query
264
+
265
+ @app.get("/api/v1/users")
266
+ async def list_users(
267
+ page: int = Query(1, ge=1),
268
+ per_page: int = Query(20, ge=1, le=100),
269
+ ):
270
+ offset = (page - 1) * per_page
271
+ users = await db.users.find().skip(offset).limit(per_page).to_list()
272
+ total = await db.users.count_documents({})
273
+
274
+ return {
275
+ "data": users,
276
+ "pagination": {
277
+ "page": page,
278
+ "per_page": per_page,
279
+ "total": total,
280
+ "total_pages": math.ceil(total / per_page),
281
+ },
282
+ }
283
+ ```
284
+
285
+ ```ts
286
+ // Node.js (Express + Prisma)
287
+ app.get('/api/v1/users', async (req, res) => {
288
+ const page = Math.max(1, parseInt(req.query.page as string) || 1);
289
+ const perPage = Math.min(100, Math.max(1, parseInt(req.query.per_page as string) || 20));
290
+ const skip = (page - 1) * perPage;
291
+
292
+ const [users, total] = await Promise.all([
293
+ prisma.user.findMany({ skip, take: perPage, orderBy: { createdAt: 'desc' } }),
294
+ prisma.user.count(),
295
+ ]);
296
+
297
+ res.json({
298
+ data: users,
299
+ pagination: { page, per_page: perPage, total, total_pages: Math.ceil(total / perPage) },
300
+ });
301
+ });
302
+ ```
303
+
304
+ ### 5.2 Cursor 分页(推荐大数据集)
305
+
306
+ ```python
307
+ # Python - Cursor 分页
308
+ import base64, json
309
+
310
+ def encode_cursor(data: dict) -> str:
311
+ return base64.urlsafe_b64encode(json.dumps(data).encode()).decode()
312
+
313
+ def decode_cursor(cursor: str) -> dict:
314
+ return json.loads(base64.urlsafe_b64decode(cursor.encode()).decode())
315
+
316
+ @app.get("/api/v1/orders")
317
+ async def list_orders(
318
+ cursor: str | None = None,
319
+ limit: int = Query(20, ge=1, le=100),
320
+ ):
321
+ query = {}
322
+ if cursor:
323
+ decoded = decode_cursor(cursor)
324
+ query = {"_id": {"$gt": decoded["id"]}}
325
+
326
+ orders = await db.orders.find(query).sort("_id", 1).limit(limit + 1).to_list()
327
+
328
+ has_next = len(orders) > limit
329
+ if has_next:
330
+ orders = orders[:limit]
331
+
332
+ next_cursor = encode_cursor({"id": str(orders[-1]["_id"])}) if has_next else None
333
+
334
+ return {
335
+ "data": orders,
336
+ "pagination": {
337
+ "next_cursor": next_cursor,
338
+ "has_next": has_next,
339
+ "limit": limit,
340
+ },
341
+ }
342
+ ```
343
+
344
+ **Offset vs Cursor 对比**:
345
+
346
+ | 特性 | Offset | Cursor |
347
+ |------|--------|--------|
348
+ | 跳转到任意页 | 支持 | 不支持 |
349
+ | 数据一致性 | 新增/删除时可能跳过或重复 | 稳定 |
350
+ | 大数据集性能 | O(n) skip | O(1) 索引查找 |
351
+ | 适用场景 | 后台管理、总数较小 | 时间线、Feed、大数据集 |
352
+
353
+ ---
354
+
355
+ ## 6. 过滤与排序
356
+
357
+ ```python
358
+ # 通用过滤排序参数解析
359
+ from fastapi import Query
360
+ from typing import Literal
361
+
362
+ @app.get("/api/v1/products")
363
+ async def list_products(
364
+ # 过滤
365
+ category: str | None = None,
366
+ min_price: float | None = Query(None, ge=0),
367
+ max_price: float | None = Query(None, ge=0),
368
+ status: Literal["active", "draft", "archived"] | None = None,
369
+ search: str | None = None,
370
+ # 排序
371
+ sort: str = Query("created_at:desc"),
372
+ # 分页
373
+ page: int = Query(1, ge=1),
374
+ per_page: int = Query(20, ge=1, le=100),
375
+ ):
376
+ filters = {}
377
+ if category:
378
+ filters["category"] = category
379
+ if min_price is not None:
380
+ filters["price__gte"] = min_price
381
+ if max_price is not None:
382
+ filters["price__lte"] = max_price
383
+ if status:
384
+ filters["status"] = status
385
+ if search:
386
+ filters["name__icontains"] = search
387
+
388
+ # 排序解析
389
+ ALLOWED_SORT_FIELDS = {"created_at", "price", "name", "popularity"}
390
+ sort_field, _, sort_dir = sort.partition(":")
391
+ if sort_field not in ALLOWED_SORT_FIELDS:
392
+ sort_field = "created_at"
393
+ order = f"-{sort_field}" if sort_dir == "desc" else sort_field
394
+
395
+ return await paginate(Product.objects.filter(**filters).order_by(order), page, per_page)
396
+ ```
397
+
398
+ ---
399
+
400
+ ## 7. 版本控制
401
+
402
+ ### 7.1 URL 路径版本(推荐)
403
+
404
+ ```
405
+ GET /api/v1/users
406
+ GET /api/v2/users
407
+ ```
408
+
409
+ ```python
410
+ # FastAPI 路由分组
411
+ from fastapi import APIRouter
412
+
413
+ v1_router = APIRouter(prefix="/api/v1")
414
+ v2_router = APIRouter(prefix="/api/v2")
415
+
416
+ @v1_router.get("/users")
417
+ async def list_users_v1():
418
+ return {"data": users, "format": "v1"}
419
+
420
+ @v2_router.get("/users")
421
+ async def list_users_v2():
422
+ # v2 增加了 metadata 字段
423
+ return {"data": users, "meta": {"total": len(users)}}
424
+
425
+ app.include_router(v1_router)
426
+ app.include_router(v2_router)
427
+ ```
428
+
429
+ ### 7.2 版本迁移策略
430
+
431
+ ```
432
+ 1. 新版本发布时,旧版本保持运行至少 6 个月
433
+ 2. 响应头标注版本废弃信息:
434
+ Deprecation: true
435
+ Sunset: Sat, 01 Mar 2026 00:00:00 GMT
436
+ Link: <https://api.example.com/docs/migration-v1-to-v2>; rel="deprecation"
437
+ 3. 旧版本返回 Warning 头:
438
+ Warning: 299 - "API v1 将于 2026-03-01 停止服务,请迁移到 v2"
439
+ ```
440
+
441
+ ---
442
+
443
+ ## 8. 认证
444
+
445
+ ### 8.1 JWT 认证
446
+
447
+ ```python
448
+ # Python (FastAPI)
449
+ from fastapi import Depends, HTTPException, status
450
+ from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
451
+ import jwt
452
+
453
+ security = HTTPBearer()
454
+
455
+ async def get_current_user(
456
+ credentials: HTTPAuthorizationCredentials = Depends(security),
457
+ ) -> User:
458
+ try:
459
+ payload = jwt.decode(
460
+ credentials.credentials,
461
+ settings.JWT_SECRET,
462
+ algorithms=["HS256"],
463
+ )
464
+ user_id = payload.get("sub")
465
+ if not user_id:
466
+ raise HTTPException(status_code=401, detail="无效 Token")
467
+ except jwt.ExpiredSignatureError:
468
+ raise HTTPException(status_code=401, detail="Token 已过期")
469
+ except jwt.InvalidTokenError:
470
+ raise HTTPException(status_code=401, detail="无效 Token")
471
+
472
+ user = await get_user_by_id(user_id)
473
+ if not user:
474
+ raise HTTPException(status_code=401, detail="用户不存在")
475
+ return user
476
+
477
+ @app.get("/api/v1/me")
478
+ async def get_me(user: User = Depends(get_current_user)):
479
+ return {"data": user}
480
+ ```
481
+
482
+ ### 8.2 API Key 认证
483
+
484
+ ```ts
485
+ // Node.js (Express)
486
+ import { Request, Response, NextFunction } from 'express';
487
+
488
+ async function apiKeyAuth(req: Request, res: Response, next: NextFunction) {
489
+ const apiKey = req.headers['x-api-key'] as string;
490
+
491
+ if (!apiKey) {
492
+ return res.status(401).json({
493
+ error: { code: 'MISSING_API_KEY', message: 'X-API-Key 头缺失' },
494
+ });
495
+ }
496
+
497
+ // 使用 timing-safe 比较,防止时序攻击
498
+ const client = await db.apiKeys.findOne({
499
+ where: { keyHash: hashApiKey(apiKey), isActive: true },
500
+ });
501
+
502
+ if (!client) {
503
+ return res.status(401).json({
504
+ error: { code: 'INVALID_API_KEY', message: 'API Key 无效' },
505
+ });
506
+ }
507
+
508
+ // 更新最后使用时间
509
+ await db.apiKeys.update({
510
+ where: { id: client.id },
511
+ data: { lastUsedAt: new Date() },
512
+ });
513
+
514
+ req.client = client;
515
+ next();
516
+ }
517
+ ```
518
+
519
+ ---
520
+
521
+ ## 9. 限流
522
+
523
+ ```python
524
+ # Python - 令牌桶限流(基于 Redis)
525
+ import time, redis
526
+
527
+ redis_client = redis.Redis()
528
+
529
+ def is_rate_limited(key: str, limit: int, window: int) -> tuple[bool, dict]:
530
+ """
531
+ 令牌桶限流
532
+ key: 限流键(如 user_id 或 IP)
533
+ limit: 窗口内最大请求数
534
+ window: 窗口大小(秒)
535
+ """
536
+ now = time.time()
537
+ pipe = redis_client.pipeline()
538
+ pipe.zremrangebyscore(key, 0, now - window) # 移除过期记录
539
+ pipe.zadd(key, {str(now): now}) # 添加当前请求
540
+ pipe.zcard(key) # 当前窗口请求数
541
+ pipe.expire(key, window) # 设置过期
542
+ _, _, count, _ = pipe.execute()
543
+
544
+ remaining = max(0, limit - count)
545
+ headers = {
546
+ "X-RateLimit-Limit": str(limit),
547
+ "X-RateLimit-Remaining": str(remaining),
548
+ "X-RateLimit-Reset": str(int(now + window)),
549
+ }
550
+
551
+ return count > limit, headers
552
+ ```
553
+
554
+ ```ts
555
+ // Node.js - express-rate-limit
556
+ import rateLimit from 'express-rate-limit';
557
+ import RedisStore from 'rate-limit-redis';
558
+
559
+ const apiLimiter = rateLimit({
560
+ store: new RedisStore({ sendCommand: (...args) => redisClient.sendCommand(args) }),
561
+ windowMs: 60 * 1000, // 1 分钟窗口
562
+ max: 100, // 每窗口 100 次
563
+ standardHeaders: true, // 返回 RateLimit-* 头
564
+ legacyHeaders: false,
565
+ message: {
566
+ error: {
567
+ code: 'RATE_LIMITED',
568
+ message: '请求频率超限,请稍后重试',
569
+ },
570
+ },
571
+ });
572
+
573
+ app.use('/api/', apiLimiter);
574
+ ```
575
+
576
+ ---
577
+
578
+ ## 10. HATEOAS
579
+
580
+ ```json
581
+ // GET /api/v1/orders/456
582
+ {
583
+ "data": {
584
+ "id": "456",
585
+ "status": "pending",
586
+ "total": 299.00,
587
+ "created_at": "2025-01-15T10:30:00Z"
588
+ },
589
+ "links": {
590
+ "self": { "href": "/api/v1/orders/456", "method": "GET" },
591
+ "cancel": { "href": "/api/v1/orders/456/cancel", "method": "POST" },
592
+ "pay": { "href": "/api/v1/orders/456/pay", "method": "POST" },
593
+ "items": { "href": "/api/v1/orders/456/items", "method": "GET" },
594
+ "customer": { "href": "/api/v1/users/123", "method": "GET" }
595
+ }
596
+ }
597
+
598
+ // 状态变为 shipped 后,cancel 和 pay 链接消失
599
+ // GET /api/v1/orders/456
600
+ {
601
+ "data": {
602
+ "id": "456",
603
+ "status": "shipped",
604
+ "total": 299.00
605
+ },
606
+ "links": {
607
+ "self": { "href": "/api/v1/orders/456", "method": "GET" },
608
+ "track": { "href": "/api/v1/orders/456/tracking", "method": "GET" },
609
+ "items": { "href": "/api/v1/orders/456/items", "method": "GET" }
610
+ }
611
+ }
612
+ ```
613
+
614
+ ---
615
+
616
+ ## 11. OpenAPI 文档
617
+
618
+ ### 11.1 FastAPI 自动生成
619
+
620
+ ```python
621
+ from fastapi import FastAPI
622
+
623
+ app = FastAPI(
624
+ title="My API",
625
+ description="商城 API 服务",
626
+ version="1.0.0",
627
+ docs_url="/api/docs", # Swagger UI
628
+ redoc_url="/api/redoc", # ReDoc
629
+ openapi_url="/api/openapi.json",
630
+ )
631
+
632
+ @app.get(
633
+ "/api/v1/products/{product_id}",
634
+ response_model=ProductResponse,
635
+ summary="获取商品详情",
636
+ description="根据商品 ID 获取完整的商品信息,包括价格、库存、分类等。",
637
+ responses={
638
+ 404: {"model": ErrorResponse, "description": "商品不存在"},
639
+ 500: {"model": ErrorResponse, "description": "服务内部错误"},
640
+ },
641
+ tags=["商品"],
642
+ )
643
+ async def get_product(product_id: str):
644
+ ...
645
+ ```
646
+
647
+ ### 11.2 Express + swagger-jsdoc
648
+
649
+ ```ts
650
+ import swaggerJsdoc from 'swagger-jsdoc';
651
+ import swaggerUi from 'swagger-ui-express';
652
+
653
+ const spec = swaggerJsdoc({
654
+ definition: {
655
+ openapi: '3.0.0',
656
+ info: { title: 'My API', version: '1.0.0' },
657
+ servers: [{ url: '/api/v1' }],
658
+ },
659
+ apis: ['./src/routes/*.ts'],
660
+ });
661
+
662
+ app.use('/api/docs', swaggerUi.serve, swaggerUi.setup(spec));
663
+
664
+ /**
665
+ * @openapi
666
+ * /products/{id}:
667
+ * get:
668
+ * summary: 获取商品详情
669
+ * tags: [商品]
670
+ * parameters:
671
+ * - in: path
672
+ * name: id
673
+ * required: true
674
+ * schema: { type: string }
675
+ * responses:
676
+ * 200:
677
+ * description: 成功
678
+ * content:
679
+ * application/json:
680
+ * schema: { $ref: '#/components/schemas/Product' }
681
+ * 404:
682
+ * description: 商品不存在
683
+ */
684
+ router.get('/products/:id', getProduct);
685
+ ```
686
+
687
+ ### 11.3 CI 校验 OpenAPI
688
+
689
+ ```bash
690
+ # 校验 OpenAPI 规范
691
+ npx @redocly/cli lint openapi.yaml
692
+
693
+ # 生成客户端 SDK
694
+ npx openapi-generator-cli generate \
695
+ -i openapi.yaml \
696
+ -g typescript-axios \
697
+ -o ./sdk/
698
+
699
+ # 对比版本差异(检测破坏性变更)
700
+ npx oasdiff breaking old-openapi.yaml new-openapi.yaml
701
+ ```
702
+
703
+ ---
704
+
705
+ ## Agent Checklist
706
+
707
+ - [ ] URL 使用复数名词、kebab-case、层级不超过 3 层
708
+ - [ ] HTTP 方法与语义匹配(GET 不修改、PUT 幂等、DELETE 幂等)
709
+ - [ ] 所有错误响应使用统一格式(code + message + details + request_id)
710
+ - [ ] 状态码使用准确(区分 400/401/403/404/409/422/429)
711
+ - [ ] 分页已实现并有 per_page 上限(Offset 或 Cursor)
712
+ - [ ] 排序字段有白名单校验
713
+ - [ ] API 版本控制已实施(URL 路径方式)
714
+ - [ ] 认证方案已实现(JWT 或 API Key)
715
+ - [ ] 限流已配置并返回 RateLimit 响应头
716
+ - [ ] OpenAPI 文档自动生成并在 CI 中校验
717
+ - [ ] 无破坏性变更引入(oasdiff 检查)
718
+ - [ ] 所有输入参数有校验(类型、范围、格式)