@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,925 @@
1
+ ---
2
+ id: fastapi-complete
3
+ title: FastAPI 完整指南
4
+ domain: backend
5
+ category: 01-standards
6
+ difficulty: intermediate
7
+ tags: [backend, complete, fastapi, 中间件, 依赖注入系统, 后台任务, 安全与认证, 快速开始]
8
+ quality_score: 70
9
+ last_updated: 2026-06-15
10
+ ---
11
+ # FastAPI 完整指南
12
+
13
+ ## 概述
14
+
15
+ FastAPI 是一个现代、高性能的 Python Web 框架,用于构建 API。基于 Starlette 和 Pydantic,利用 Python 3.8+ 的类型提示自动生成 OpenAPI 文档和 JSON Schema。FastAPI 的性能与 NodeJS 和 Go 相当,是最快的 Python 框架之一。
16
+
17
+ ### 核心特性
18
+
19
+ - **高性能**: 与 NodeJS 和 Go 并驾齐驱(感谢 Starlette 和 Pydantic)
20
+ - **快速开发**: 开发速度提升 200%-300%(根据开发者反馈)
21
+ - **减少 Bug**: 减少约 40% 的人为错误(基于类型系统)
22
+ - **直观**: 完善的编辑器支持,自动补全随处可见
23
+ - **简单**: 易于使用和学习,文档完善
24
+ - **健壮**: 生产就绪,自动生成交互式文档
25
+ - **基于标准**: OpenAPI (Swagger), JSON Schema, OAuth2
26
+
27
+ ### 为什么选择 FastAPI?
28
+
29
+ ✅ **自动文档**: 自动生成 Swagger UI 和 ReDoc
30
+ ✅ **类型安全**: 基于 Python 类型提示,编辑器友好
31
+ ✅ **异步优先**: 原生支持 async/await
32
+ ✅ **依赖注入**: 强大且简洁的依赖注入系统
33
+ ✅ **数据验证**: 自动请求验证和序列化
34
+ ✅ **测试友好**: 基于 pytest,测试简单
35
+
36
+ ---
37
+
38
+ ## 快速开始
39
+
40
+ ### 安装
41
+
42
+ ```bash
43
+ pip install fastapi uvicorn[standard]
44
+ ```
45
+
46
+ ### Hello World
47
+
48
+ ```python
49
+ from fastapi import FastAPI
50
+
51
+ app = FastAPI()
52
+
53
+ @app.get("/")
54
+ async def root():
55
+ return {"message": "Hello World"}
56
+
57
+ @app.get("/items/{item_id}")
58
+ async def read_item(item_id: int):
59
+ return {"item_id": item_id}
60
+ ```
61
+
62
+ ### 运行服务器
63
+
64
+ ```bash
65
+ # 开发模式
66
+ uvicorn main:app --reload
67
+
68
+ # 生产模式
69
+ uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
70
+ ```
71
+
72
+ ### 访问自动文档
73
+
74
+ - Swagger UI: `http://localhost:8000/docs`
75
+ - ReDoc: `http://localhost:8000/redoc`
76
+ - OpenAPI JSON: `http://localhost:8000/openapi.json`
77
+
78
+ ---
79
+
80
+ ## 核心概念
81
+
82
+ ### 1. 路径操作 (Path Operations)
83
+
84
+ FastAPI 使用装饰器定义路由:
85
+
86
+ ```python
87
+ from fastapi import FastAPI
88
+
89
+ app = FastAPI()
90
+
91
+ # GET 请求
92
+ @app.get("/")
93
+ async def read_root():
94
+ return {"Hello": "World"}
95
+
96
+ # POST 请求
97
+ @app.post("/items/")
98
+ async def create_item(item: dict):
99
+ return {"item": item}
100
+
101
+ # PUT 请求
102
+ @app.put("/items/{item_id}")
103
+ async def update_item(item_id: int, item: dict):
104
+ return {"item_id": item_id, "item": item}
105
+
106
+ # DELETE 请求
107
+ @app.delete("/items/{item_id}")
108
+ async def delete_item(item_id: int):
109
+ return {"deleted": item_id}
110
+
111
+ # 其他: @app.options(), @app.head(), @app.patch(), @app.trace()
112
+ ```
113
+
114
+ ### 2. 路径参数 (Path Parameters)
115
+
116
+ ```python
117
+ from fastapi import FastAPI
118
+
119
+ app = FastAPI()
120
+
121
+ @app.get("/items/{item_id}")
122
+ async def read_item(item_id: int):
123
+ """路径参数自动转换为 int 类型"""
124
+ return {"item_id": item_id}
125
+
126
+ @app.get("/users/{user_id}/items/{item_id}")
127
+ async def read_user_item(user_id: int, item_id: str):
128
+ """多个路径参数"""
129
+ return {"user_id": user_id, "item_id": item_id}
130
+
131
+ # 枚举路径参数
132
+ from enum import Enum
133
+
134
+ class ModelName(str, Enum):
135
+ alexnet = "alexnet"
136
+ resnet = "resnet"
137
+ lenet = "lenet"
138
+
139
+ @app.get("/models/{model_name}")
140
+ async def get_model(model_name: ModelName):
141
+ if model_name == ModelName.alexnet:
142
+ return {"model": model_name, "message": "Deep Learning FTW!"}
143
+ return {"model": model_name}
144
+ ```
145
+
146
+ ### 3. 查询参数 (Query Parameters)
147
+
148
+ ```python
149
+ from fastapi import FastAPI
150
+
151
+ app = FastAPI()
152
+
153
+ fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]
154
+
155
+ @app.get("/items/")
156
+ async def read_item(skip: int = 0, limit: int = 10):
157
+ """查询参数带默认值"""
158
+ return fake_items_db[skip : skip + limit]
159
+
160
+ # 必需查询参数
161
+ @app.get("/items/{item_id}")
162
+ async def read_item(item_id: str, needy: str):
163
+ """needy 是必需的查询参数"""
164
+ return {"item_id": item_id, "needy": needy}
165
+
166
+ # 可选查询参数
167
+ from typing import Optional
168
+
169
+ @app.get("/users/{user_id}/items/{item_id}")
170
+ async def read_user_item(
171
+ user_id: int,
172
+ item_id: str,
173
+ q: Optional[str] = None,
174
+ short: bool = False
175
+ ):
176
+ item = {"item_id": item_id, "owner_id": user_id}
177
+ if q:
178
+ item.update({"q": q})
179
+ if not short:
180
+ item.update({"description": "This is an amazing item"})
181
+ return item
182
+ ```
183
+
184
+ ### 4. 请求体 (Request Body)
185
+
186
+ 使用 Pydantic 模型定义请求体:
187
+
188
+ ```python
189
+ from fastapi import FastAPI
190
+ from pydantic import BaseModel
191
+ from typing import Optional
192
+
193
+ app = FastAPI()
194
+
195
+ class Item(BaseModel):
196
+ name: str
197
+ description: Optional[str] = None
198
+ price: float
199
+ tax: Optional[float] = None
200
+
201
+ @app.post("/items/")
202
+ async def create_item(item: Item):
203
+ return item
204
+
205
+ @app.put("/items/{item_id}")
206
+ async def update_item(item_id: int, item: Item, q: Optional[str] = None):
207
+ result = {"item_id": item_id, "item": item}
208
+ if q:
209
+ result.update({"q": q})
210
+ return result
211
+ ```
212
+
213
+ ### 5. Pydantic 模型详解
214
+
215
+ ```python
216
+ from pydantic import BaseModel, Field, validator
217
+ from typing import Optional, List
218
+ from datetime import datetime
219
+
220
+ class User(BaseModel):
221
+ id: int
222
+ name: str = Field(..., min_length=1, max_length=50, description="用户名")
223
+ email: str = Field(..., regex=r"^[\w\.-]+@[\w\.-]+\.\w+$")
224
+ age: Optional[int] = Field(None, ge=0, le=120, description="年龄")
225
+ tags: List[str] = Field(default_factory=list)
226
+ created_at: datetime = Field(default_factory=datetime.now)
227
+
228
+ @validator('name')
229
+ def name_must_not_contain_space(cls, v):
230
+ if ' ' in v:
231
+ raise ValueError('must not contain a space')
232
+ return v.title()
233
+
234
+ class Item(BaseModel):
235
+ name: str
236
+ description: Optional[str] = None
237
+ price: float = Field(..., gt=0, description="价格必须大于 0")
238
+ tax: Optional[float] = None
239
+
240
+ class Config:
241
+ schema_extra = {
242
+ "example": {
243
+ "name": "Foo",
244
+ "description": "A very nice Item",
245
+ "price": 35.4,
246
+ "tax": 3.2,
247
+ }
248
+ }
249
+
250
+ @app.post("/users/")
251
+ async def create_user(user: User):
252
+ return user
253
+ ```
254
+
255
+ ---
256
+
257
+ ## 依赖注入系统
258
+
259
+ FastAPI 的依赖注入系统是一个强大而简洁的特性。
260
+
261
+ ### 基本用法
262
+
263
+ ```python
264
+ from fastapi import FastAPI, Depends
265
+
266
+ app = FastAPI()
267
+
268
+ async def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 100):
269
+ return {"q": q, "skip": skip, "limit": limit}
270
+
271
+ @app.get("/items/")
272
+ async def read_items(commons: dict = Depends(common_parameters)):
273
+ return commons
274
+
275
+ @app.get("/users/")
276
+ async def read_users(commons: dict = Depends(common_parameters)):
277
+ return commons
278
+ ```
279
+
280
+ ### 类作为依赖
281
+
282
+ ```python
283
+ from fastapi import FastAPI, Depends
284
+
285
+ app = FastAPI()
286
+
287
+ class CommonParams:
288
+ def __init__(self, q: Optional[str] = None, skip: int = 0, limit: int = 100):
289
+ self.q = q
290
+ self.skip = skip
291
+ self.limit = limit
292
+
293
+ @app.get("/items/")
294
+ async def read_items(commons: CommonParams = Depends()):
295
+ return {"q": commons.q, "skip": commons.skip, "limit": commons.limit}
296
+ ```
297
+
298
+ ### 可调用依赖
299
+
300
+ ```python
301
+ from fastapi import FastAPI, Depends, HTTPException
302
+
303
+ app = FastAPI()
304
+
305
+ class FixedContentQueryChecker:
306
+ def __init__(self, fixed_content: str):
307
+ self.fixed_content = fixed_content
308
+
309
+ def __call__(self, q: str = ""):
310
+ if q:
311
+ return self.fixed_content in q
312
+ return False
313
+
314
+ checker = FixedContentQueryChecker("bar")
315
+
316
+ @app.get("/items/")
317
+ async def read_items(is_fixed: bool = Depends(checker)):
318
+ if is_fixed:
319
+ return {"result": "Query contains 'bar'"}
320
+ return {"result": "Query does not contain 'bar'"}
321
+ ```
322
+
323
+ ### 依赖树
324
+
325
+ ```python
326
+ from fastapi import FastAPI, Depends
327
+
328
+ app = FastAPI()
329
+
330
+ def query_extractor(q: Optional[str] = None):
331
+ return q
332
+
333
+ def query_or_cookie_extractor(
334
+ q: str = Depends(query_extractor),
335
+ last_query: Optional[str] = None
336
+ ):
337
+ if not q:
338
+ return last_query
339
+ return q
340
+
341
+ @app.get("/items/")
342
+ async def read_query(query_extractor: str = Depends(query_or_cookie_extractor)):
343
+ return {"query": query_extractor}
344
+ ```
345
+
346
+ ### 全局依赖
347
+
348
+ ```python
349
+ from fastapi import FastAPI, Depends, Header, HTTPException
350
+
351
+ async def verify_token(x_token: str = Header(...)):
352
+ if x_token != "fake-super-secret-token":
353
+ raise HTTPException(status_code=400, detail="X-Token header invalid")
354
+
355
+ async def verify_key(x_key: str = Header(...)):
356
+ if x_key != "fake-super-secret-key":
357
+ raise HTTPException(status_code=400, detail="X-Key header invalid")
358
+ return x_key
359
+
360
+ app = FastAPI(dependencies=[Depends(verify_token), Depends(verify_key)])
361
+
362
+ @app.get("/items/")
363
+ async def read_items():
364
+ return [{"item": "Foo"}, {"item": "Bar"}]
365
+ ```
366
+
367
+ ---
368
+
369
+ ## 安全与认证
370
+
371
+ ### OAuth2 with JWT
372
+
373
+ ```python
374
+ from fastapi import FastAPI, Depends, HTTPException, status
375
+ from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
376
+ from pydantic import BaseModel
377
+ from typing import Optional
378
+ from datetime import datetime, timedelta
379
+ from jose import JWTError, jwt
380
+ from passlib.context import CryptContext
381
+
382
+ app = FastAPI()
383
+
384
+ # 配置
385
+ SECRET_KEY = "your-secret-key-here"
386
+ ALGORITHM = "HS256"
387
+ ACCESS_TOKEN_EXPIRE_MINUTES = 30
388
+
389
+ pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
390
+ oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
391
+
392
+ # 模型
393
+ class Token(BaseModel):
394
+ access_token: str
395
+ token_type: str
396
+
397
+ class TokenData(BaseModel):
398
+ username: Optional[str] = None
399
+
400
+ class User(BaseModel):
401
+ username: str
402
+ email: Optional[str] = None
403
+ full_name: Optional[str] = None
404
+ disabled: Optional[bool] = None
405
+
406
+ class UserInDB(User):
407
+ hashed_password: str
408
+
409
+ # 模拟数据库
410
+ fake_users_db = {
411
+ "johndoe": {
412
+ "username": "johndoe",
413
+ "full_name": "John Doe",
414
+ "email": "johndoe@example.com",
415
+ "hashed_password": "$2b$12$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36WQoeG6Lruj3vjPGga31lW",
416
+ "disabled": False,
417
+ }
418
+ }
419
+
420
+ # 密码工具
421
+ def verify_password(plain_password, hashed_password):
422
+ return pwd_context.verify(plain_password, hashed_password)
423
+
424
+ def get_password_hash(password):
425
+ return pwd_context.hash(password)
426
+
427
+ def get_user(db, username: str):
428
+ if username in db:
429
+ user_dict = db[username]
430
+ return UserInDB(**user_dict)
431
+
432
+ def authenticate_user(fake_db, username: str, password: str):
433
+ user = get_user(fake_db, username)
434
+ if not user:
435
+ return False
436
+ if not verify_password(password, user.hashed_password):
437
+ return False
438
+ return user
439
+
440
+ def create_access_token(data: dict, expires_delta: Optional[timedelta] = None):
441
+ to_encode = data.copy()
442
+ if expires_delta:
443
+ expire = datetime.utcnow() + expires_delta
444
+ else:
445
+ expire = datetime.utcnow() + timedelta(minutes=15)
446
+ to_encode.update({"exp": expire})
447
+ encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
448
+ return encoded_jwt
449
+
450
+ async def get_current_user(token: str = Depends(oauth2_scheme)):
451
+ credentials_exception = HTTPException(
452
+ status_code=status.HTTP_401_UNAUTHORIZED,
453
+ detail="Could not validate credentials",
454
+ headers={"WWW-Authenticate": "Bearer"},
455
+ )
456
+ try:
457
+ payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
458
+ username: str = payload.get("sub")
459
+ if username is None:
460
+ raise credentials_exception
461
+ token_data = TokenData(username=username)
462
+ except JWTError:
463
+ raise credentials_exception
464
+ user = get_user(fake_users_db, username=token_data.username)
465
+ if user is None:
466
+ raise credentials_exception
467
+ return user
468
+
469
+ async def get_current_active_user(current_user: UserInDB = Depends(get_current_user)):
470
+ if current_user.disabled:
471
+ raise HTTPException(status_code=400, detail="Inactive user")
472
+ return current_user
473
+
474
+ # 路由
475
+ @app.post("/token", response_model=Token)
476
+ async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends()):
477
+ user = authenticate_user(fake_users_db, form_data.username, form_data.password)
478
+ if not user:
479
+ raise HTTPException(
480
+ status_code=status.HTTP_401_UNAUTHORIZED,
481
+ detail="Incorrect username or password",
482
+ headers={"WWW-Authenticate": "Bearer"},
483
+ )
484
+ access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
485
+ access_token = create_access_token(
486
+ data={"sub": user.username}, expires_delta=access_token_expires
487
+ )
488
+ return {"access_token": access_token, "token_type": "bearer"}
489
+
490
+ @app.get("/users/me/", response_model=User)
491
+ async def read_users_me(current_user: User = Depends(get_current_active_user)):
492
+ return current_user
493
+
494
+ @app.get("/users/me/items/")
495
+ async def read_own_items(current_user: User = Depends(get_current_active_user)):
496
+ return [{"item_id": "Foo", "owner": current_user.username}]
497
+ ```
498
+
499
+ ### API Key 认证
500
+
501
+ ```python
502
+ from fastapi import FastAPI, Depends, HTTPException, status
503
+ from fastapi.security import APIKeyHeader
504
+
505
+ app = FastAPI()
506
+
507
+ API_KEY = "your-api-key-here"
508
+ api_key_header = APIKeyHeader(name="X-API-Key")
509
+
510
+ async def get_api_key(api_key: str = Depends(api_key_header)):
511
+ if api_key != API_KEY:
512
+ raise HTTPException(
513
+ status_code=status.HTTP_401_UNAUTHORIZED,
514
+ detail="Invalid API Key"
515
+ )
516
+ return api_key
517
+
518
+ @app.get("/protected/")
519
+ async def protected_route(api_key: str = Depends(get_api_key)):
520
+ return {"message": "Access granted"}
521
+ ```
522
+
523
+ ---
524
+
525
+ ## 数据库集成
526
+
527
+ ### SQLAlchemy 异步
528
+
529
+ ```python
530
+ from fastapi import FastAPI, Depends, HTTPException
531
+ from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
532
+ from sqlalchemy.orm import sessionmaker, declarative_base
533
+ from sqlalchemy import Column, Integer, String, select
534
+ from typing import List, Optional
535
+ from pydantic import BaseModel
536
+
537
+ # 数据库配置
538
+ SQLALCHEMY_DATABASE_URL = "sqlite+aiosqlite:///./test.db"
539
+ # SQLALCHEMY_DATABASE_URL = "postgresql+asyncpg://user:password@localhost/dbname"
540
+
541
+ engine = create_async_engine(SQLALCHEMY_DATABASE_URL, echo=True)
542
+ AsyncSessionLocal = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
543
+ Base = declarative_base()
544
+
545
+ # 模型
546
+ class User(Base):
547
+ __tablename__ = "users"
548
+ id = Column(Integer, primary_key=True, index=True)
549
+ name = Column(String)
550
+ email = Column(String, unique=True, index=True)
551
+
552
+ # Pydantic 模型
553
+ class UserCreate(BaseModel):
554
+ name: str
555
+ email: str
556
+
557
+ class UserResponse(BaseModel):
558
+ id: int
559
+ name: str
560
+ email: str
561
+
562
+ class Config:
563
+ orm_mode = True
564
+
565
+ # 依赖
566
+ async def get_db():
567
+ async with AsyncSessionLocal() as session:
568
+ try:
569
+ yield session
570
+ finally:
571
+ await session.close()
572
+
573
+ # 应用
574
+ app = FastAPI()
575
+
576
+ # 创建表
577
+ @app.on_event("startup")
578
+ async def startup():
579
+ async with engine.begin() as conn:
580
+ await conn.run_sync(Base.metadata.create_all)
581
+
582
+ # 路由
583
+ @app.post("/users/", response_model=UserResponse)
584
+ async def create_user(user: UserCreate, db: AsyncSession = Depends(get_db)):
585
+ db_user = User(**user.dict())
586
+ db.add(db_user)
587
+ await db.commit()
588
+ await db.refresh(db_user)
589
+ return db_user
590
+
591
+ @app.get("/users/", response_model=List[UserResponse])
592
+ async def read_users(skip: int = 0, limit: int = 100, db: AsyncSession = Depends(get_db)):
593
+ result = await db.execute(select(User).offset(skip).limit(limit))
594
+ users = result.scalars().all()
595
+ return users
596
+
597
+ @app.get("/users/{user_id}", response_model=UserResponse)
598
+ async def read_user(user_id: int, db: AsyncSession = Depends(get_db)):
599
+ result = await db.execute(select(User).where(User.id == user_id))
600
+ user = result.scalar_one_or_none()
601
+ if user is None:
602
+ raise HTTPException(status_code=404, detail="User not found")
603
+ return user
604
+ ```
605
+
606
+ ---
607
+
608
+ ## 中间件
609
+
610
+ ### 自定义中间件
611
+
612
+ ```python
613
+ from fastapi import FastAPI, Request, Response
614
+ import time
615
+
616
+ app = FastAPI()
617
+
618
+ @app.middleware("http")
619
+ async def add_process_time_header(request: Request, call_next):
620
+ start_time = time.time()
621
+ response = await call_next(request)
622
+ process_time = time.time() - start_time
623
+ response.headers["X-Process-Time"] = str(process_time)
624
+ return response
625
+
626
+ # CORS 中间件
627
+ from fastapi.middleware.cors import CORSMiddleware
628
+
629
+ app.add_middleware(
630
+ CORSMiddleware,
631
+ allow_origins=["*"],
632
+ allow_credentials=True,
633
+ allow_methods=["*"],
634
+ allow_headers=["*"],
635
+ )
636
+
637
+ # GZip 中间件
638
+ from fastapi.middleware.gzip import GZipMiddleware
639
+ app.add_middleware(GZipMiddleware, minimum_size=1000)
640
+ ```
641
+
642
+ ---
643
+
644
+ ## 后台任务
645
+
646
+ ```python
647
+ from fastapi import FastAPI, BackgroundTasks
648
+ from typing import Optional
649
+
650
+ app = FastAPI()
651
+
652
+ def write_log(message: str):
653
+ with open("log.txt", mode="a") as log:
654
+ log.write(message + "\n")
655
+
656
+ @app.post("/send-notification/{email}")
657
+ async def send_notification(email: str, background_tasks: BackgroundTasks, q: Optional[str] = None):
658
+ message = f"notification to {email}\n"
659
+ if q:
660
+ message += f"query param: {q}\n"
661
+
662
+ background_tasks.add_task(write_log, message)
663
+
664
+ return {"message": "Notification sent in the background"}
665
+ ```
666
+
667
+ ---
668
+
669
+ ## WebSocket
670
+
671
+ ```python
672
+ from fastapi import FastAPI, WebSocket, WebSocketDisconnect
673
+ from typing import List
674
+
675
+ app = FastAPI()
676
+
677
+ class ConnectionManager:
678
+ def __init__(self):
679
+ self.active_connections: List[WebSocket] = []
680
+
681
+ async def connect(self, websocket: WebSocket):
682
+ await websocket.accept()
683
+ self.active_connections.append(websocket)
684
+
685
+ def disconnect(self, websocket: WebSocket):
686
+ self.active_connections.remove(websocket)
687
+
688
+ async def send_personal_message(self, message: str, websocket: WebSocket):
689
+ await websocket.send_text(message)
690
+
691
+ async def broadcast(self, message: str):
692
+ for connection in self.active_connections:
693
+ await connection.send_text(message)
694
+
695
+ manager = ConnectionManager()
696
+
697
+ @app.get("/")
698
+ async def get():
699
+ return {"message": "WebSocket server is running"}
700
+
701
+ @app.websocket("/ws/{client_id}")
702
+ async def websocket_endpoint(websocket: WebSocket, client_id: int):
703
+ await manager.connect(websocket)
704
+ try:
705
+ while True:
706
+ data = await websocket.receive_text()
707
+ await manager.send_personal_message(f"You wrote: {data}", websocket)
708
+ await manager.broadcast(f"Client #{client_id} says: {data}")
709
+ except WebSocketDisconnect:
710
+ manager.disconnect(websocket)
711
+ await manager.broadcast(f"Client #{client_id} left the chat")
712
+ ```
713
+
714
+ ---
715
+
716
+ ## 测试
717
+
718
+ ```python
719
+ from fastapi.testclient import TestClient
720
+ from main import app
721
+
722
+ client = TestClient(app)
723
+
724
+ def test_read_main():
725
+ response = client.get("/")
726
+ assert response.status_code == 200
727
+ assert response.json() == {"message": "Hello World"}
728
+
729
+ def test_create_item():
730
+ response = client.post(
731
+ "/items/",
732
+ json={"name": "Item 1", "price": 10.5}
733
+ )
734
+ assert response.status_code == 200
735
+ assert response.json()["name"] == "Item 1"
736
+
737
+ def test_read_item():
738
+ response = client.get("/items/1")
739
+ assert response.status_code == 200
740
+ assert "item_id" in response.json()
741
+
742
+ # 异步测试
743
+ import pytest
744
+ from httpx import AsyncClient
745
+
746
+ @pytest.mark.asyncio
747
+ async def test_async_read_main():
748
+ async with AsyncClient(app=app, base_url="http://test") as ac:
749
+ response = await ac.get("/")
750
+ assert response.status_code == 200
751
+ ```
752
+
753
+ ---
754
+
755
+ ## 部署
756
+
757
+ ### Docker 部署
758
+
759
+ ```dockerfile
760
+ FROM python:3.11-slim
761
+
762
+ WORKDIR /app
763
+
764
+ COPY requirements.txt .
765
+ RUN pip install --no-cache-dir -r requirements.txt
766
+
767
+ COPY . .
768
+
769
+ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
770
+ ```
771
+
772
+ ### Gunicorn + Uvicorn
773
+
774
+ ```bash
775
+ pip install gunicorn uvicorn[standard]
776
+
777
+ # 启动命令
778
+ gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000
779
+ ```
780
+
781
+ ### Kubernetes 部署
782
+
783
+ ```yaml
784
+ apiVersion: apps/v1
785
+ kind: Deployment
786
+ metadata:
787
+ name: fastapi-app
788
+ spec:
789
+ replicas: 3
790
+ selector:
791
+ matchLabels:
792
+ app: fastapi
793
+ template:
794
+ metadata:
795
+ labels:
796
+ app: fastapi
797
+ spec:
798
+ containers:
799
+ - name: fastapi
800
+ image: your-image:latest
801
+ ports:
802
+ - containerPort: 8000
803
+ resources:
804
+ requests:
805
+ memory: "256Mi"
806
+ cpu: "250m"
807
+ limits:
808
+ memory: "512Mi"
809
+ cpu: "500m"
810
+ ---
811
+ apiVersion: v1
812
+ kind: Service
813
+ metadata:
814
+ name: fastapi-service
815
+ spec:
816
+ selector:
817
+ app: fastapi
818
+ ports:
819
+ - port: 80
820
+ targetPort: 8000
821
+ type: LoadBalancer
822
+ ```
823
+
824
+ ---
825
+
826
+ ## 性能优化
827
+
828
+ ### 1. 使用异步数据库驱动
829
+
830
+ ```python
831
+ # ❌ 不好: 同步驱动
832
+ import psycopg2
833
+
834
+ # ✅ 好: 异步驱动
835
+ import asyncpg
836
+ from sqlalchemy.ext.asyncio import create_async_engine
837
+ ```
838
+
839
+ ### 2. 连接池配置
840
+
841
+ ```python
842
+ from sqlalchemy.ext.asyncio import create_async_engine
843
+
844
+ engine = create_async_engine(
845
+ "postgresql+asyncpg://user:pass@localhost/db",
846
+ pool_size=20,
847
+ max_overflow=40,
848
+ pool_pre_ping=True,
849
+ pool_recycle=3600
850
+ )
851
+ ```
852
+
853
+ ### 3. 启用 GZip
854
+
855
+ ```python
856
+ from fastapi.middleware.gzip import GZipMiddleware
857
+
858
+ app.add_middleware(GZipMiddleware, minimum_size=1000)
859
+ ```
860
+
861
+ ### 4. 使用 Redis 缓存
862
+
863
+ ```python
864
+ from fastapi import FastAPI
865
+ from fastapi_cache import FastAPICache
866
+ from fastapi_cache.backends.redis import RedisBackend
867
+ from fastapi_cache.decorator import cache
868
+ from redis import asyncio as aioredis
869
+
870
+ app = FastAPI()
871
+
872
+ @app.on_event("startup")
873
+ async def startup():
874
+ redis = aioredis.from_url("redis://localhost", encoding="utf8", decode_responses=True)
875
+ FastAPICache.init(RedisBackend(redis), prefix="fastapi-cache")
876
+
877
+ @app.get("/expensive-query")
878
+ @cache(expire=60)
879
+ async def expensive_query():
880
+ # 执行昂贵查询
881
+ return {"data": "..."}
882
+ ```
883
+
884
+ ### 5. 批量操作
885
+
886
+ ```python
887
+ # ❌ 不好: N+1 查询
888
+ for item in items:
889
+ db_item = await db.get(Item, item.id)
890
+ # ...
891
+
892
+ # ✅ 好: 批量查询
893
+ item_ids = [item.id for item in items]
894
+ result = await db.execute(select(Item).where(Item.id.in_(item_ids)))
895
+ items = result.scalars().all()
896
+ ```
897
+
898
+ ---
899
+
900
+ ## 最佳实践
901
+
902
+ 1. **✅ 使用类型提示**: FastAPI 的核心优势
903
+ 2. **✅ 分离关注点**: 路由、模型、业务逻辑分离
904
+ 3. **✅ 使用依赖注入**: 提高可测试性和可维护性
905
+ 4. **✅ 使用 Pydantic 验证**: 充分利用数据验证
906
+ 5. **✅ 编写测试**: 使用 pytest 和 TestClient
907
+ 6. **✅ 使用环境变量**: 配置管理
908
+ 7. **✅ 日志记录**: 使用 Python logging
909
+ 8. **✅ 错误处理**: 自定义异常处理器
910
+ 9. **✅ API 版本控制**: /v1, /v2 前缀
911
+ 10. **✅ 文档完善**: 利用自动文档并添加示例
912
+
913
+ ---
914
+
915
+ ## 参考资料
916
+
917
+ - [FastAPI 官方文档](https://fastapi.tiangolo.com/)
918
+ - [FastAPI GitHub](https://github.com/tiangolo/fastapi)
919
+ - [Full Stack FastAPI PostgreSQL Template](https://github.com/tiangolo/full-stack-fastapi-postgresql)
920
+
921
+ ---
922
+
923
+ **文档版本**: v1.0
924
+ **最后更新**: 2026-03-28
925
+ **质量评分**: 90/100