aigroup-workflow 2.2.0 → 2.2.2
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.
- package/.claude/commands/fix-build.md +10 -5
- package/.claude/commands/init-project.md +13 -8
- package/.claude/commands/plan.md +15 -8
- package/.claude/commands/review.md +12 -6
- package/.claude/commands/tdd.md +11 -5
- package/.claude/commands/workflow-start.md +20 -11
- package/.claude/settings.json +28 -0
- package/.codex/agents/architect.toml +207 -0
- package/.codex/agents/build-error-resolver.toml +110 -0
- package/.codex/agents/code-reviewer.toml +233 -0
- package/.codex/agents/doc-updater.toml +103 -0
- package/.codex/agents/e2e-runner.toml +103 -0
- package/.codex/agents/get-current-datetime.toml +23 -0
- package/.codex/agents/init-architect.toml +181 -0
- package/.codex/agents/planner.toml +208 -0
- package/.codex/agents/refactor-cleaner.toml +81 -0
- package/.codex/agents/rust-reviewer.toml +90 -0
- package/.codex/agents/security-reviewer.toml +104 -0
- package/.codex/agents/tdd-guide.toml +87 -0
- package/AGENTS.md +2 -2
- package/CLAUDE.md +23 -1
- package/LICENSE +20 -20
- package/README.md +333 -333
- package/agents/a11y-architect.md +141 -141
- package/agents/architect.md +211 -211
- package/agents/build-error-resolver.md +114 -114
- package/agents/chief-of-staff.md +151 -151
- package/agents/code-architect.md +71 -71
- package/agents/code-explorer.md +69 -69
- package/agents/code-reviewer.md +237 -237
- package/agents/code-simplifier.md +47 -47
- package/agents/comment-analyzer.md +45 -45
- package/agents/conversation-analyzer.md +52 -52
- package/agents/cpp-build-resolver.md +90 -90
- package/agents/cpp-reviewer.md +72 -72
- package/agents/csharp-reviewer.md +101 -101
- package/agents/dart-build-resolver.md +201 -201
- package/agents/database-reviewer.md +91 -91
- package/agents/doc-updater.md +107 -107
- package/agents/docs-lookup.md +68 -68
- package/agents/e2e-runner.md +107 -107
- package/agents/flutter-reviewer.md +243 -243
- package/agents/gan-evaluator.md +209 -209
- package/agents/gan-generator.md +131 -131
- package/agents/gan-planner.md +99 -99
- package/agents/get-current-datetime.md +26 -26
- package/agents/go-build-resolver.md +94 -94
- package/agents/go-reviewer.md +76 -76
- package/agents/harness-optimizer.md +35 -35
- package/agents/healthcare-reviewer.md +83 -83
- package/agents/java-build-resolver.md +153 -153
- package/agents/java-reviewer.md +92 -92
- package/agents/kotlin-build-resolver.md +118 -118
- package/agents/kotlin-reviewer.md +159 -159
- package/agents/loop-operator.md +36 -36
- package/agents/opensource-forker.md +198 -198
- package/agents/opensource-packager.md +249 -249
- package/agents/opensource-sanitizer.md +188 -188
- package/agents/performance-optimizer.md +446 -446
- package/agents/planner.md +212 -212
- package/agents/pr-test-analyzer.md +45 -45
- package/agents/python-reviewer.md +98 -98
- package/agents/pytorch-build-resolver.md +120 -120
- package/agents/refactor-cleaner.md +85 -85
- package/agents/rust-build-resolver.md +148 -148
- package/agents/rust-reviewer.md +94 -94
- package/agents/security-reviewer.md +108 -108
- package/agents/seo-specialist.md +59 -59
- package/agents/silent-failure-hunter.md +50 -50
- package/agents/tdd-guide.md +91 -91
- package/agents/type-design-analyzer.md +41 -41
- package/agents/typescript-reviewer.md +112 -112
- package/cli/commands/update.mjs +1 -1
- package/cli/utils/scaffold.mjs +53 -0
- package/docs/rules/agents.md +166 -50
- package/docs/rules/cpp/coding-style.md +44 -44
- package/docs/rules/cpp/hooks.md +39 -39
- package/docs/rules/cpp/patterns.md +51 -51
- package/docs/rules/cpp/security.md +51 -51
- package/docs/rules/cpp/testing.md +44 -44
- package/docs/rules/csharp/coding-style.md +72 -72
- package/docs/rules/csharp/hooks.md +25 -25
- package/docs/rules/csharp/patterns.md +50 -50
- package/docs/rules/csharp/security.md +58 -58
- package/docs/rules/csharp/testing.md +46 -46
- package/docs/rules/dart/coding-style.md +159 -159
- package/docs/rules/dart/hooks.md +66 -66
- package/docs/rules/dart/patterns.md +261 -261
- package/docs/rules/dart/security.md +135 -135
- package/docs/rules/dart/testing.md +215 -215
- package/docs/rules/golang/coding-style.md +32 -32
- package/docs/rules/golang/hooks.md +17 -17
- package/docs/rules/golang/patterns.md +45 -45
- package/docs/rules/golang/security.md +34 -34
- package/docs/rules/golang/testing.md +31 -31
- package/docs/rules/java/coding-style.md +114 -114
- package/docs/rules/java/hooks.md +18 -18
- package/docs/rules/java/patterns.md +146 -146
- package/docs/rules/java/security.md +100 -100
- package/docs/rules/java/testing.md +131 -131
- package/docs/rules/kotlin/coding-style.md +86 -86
- package/docs/rules/kotlin/hooks.md +17 -17
- package/docs/rules/kotlin/patterns.md +146 -146
- package/docs/rules/kotlin/security.md +82 -82
- package/docs/rules/kotlin/testing.md +128 -128
- package/docs/rules/perl/coding-style.md +46 -46
- package/docs/rules/perl/hooks.md +22 -22
- package/docs/rules/perl/patterns.md +76 -76
- package/docs/rules/perl/security.md +69 -69
- package/docs/rules/perl/testing.md +54 -54
- package/docs/rules/php/coding-style.md +40 -40
- package/docs/rules/php/hooks.md +24 -24
- package/docs/rules/php/patterns.md +33 -33
- package/docs/rules/php/security.md +37 -37
- package/docs/rules/php/testing.md +39 -39
- package/docs/rules/python/coding-style.md +42 -42
- package/docs/rules/python/hooks.md +19 -19
- package/docs/rules/python/patterns.md +39 -39
- package/docs/rules/python/security.md +30 -30
- package/docs/rules/python/testing.md +38 -38
- package/docs/rules/rust/coding-style.md +151 -151
- package/docs/rules/rust/hooks.md +16 -16
- package/docs/rules/rust/patterns.md +168 -168
- package/docs/rules/rust/security.md +141 -141
- package/docs/rules/rust/testing.md +154 -154
- package/docs/rules/swift/coding-style.md +47 -47
- package/docs/rules/swift/hooks.md +20 -20
- package/docs/rules/swift/patterns.md +66 -66
- package/docs/rules/swift/security.md +33 -33
- package/docs/rules/swift/testing.md +45 -45
- package/docs/rules/typescript/coding-style.md +199 -199
- package/docs/rules/typescript/hooks.md +22 -22
- package/docs/rules/typescript/patterns.md +52 -52
- package/docs/rules/typescript/security.md +28 -28
- package/docs/rules/typescript/testing.md +18 -18
- package/docs/rules/web/coding-style.md +96 -96
- package/docs/rules/web/design-quality.md +62 -62
- package/docs/rules/web/hooks.md +120 -120
- package/docs/rules/web/patterns.md +79 -79
- package/docs/rules/web/performance.md +64 -64
- package/docs/rules/web/security.md +57 -57
- package/docs/rules/web/testing.md +55 -55
- package/docs/templates/README.md +36 -36
- package/docs/templates/ai-project-final.md +124 -124
- package/docs/templates/ai-project.md +105 -105
- package/docs/templates/api.md +157 -157
- package/docs/templates/bug.md +62 -62
- package/docs/templates/code-review.md +87 -87
- package/docs/templates/generic.md +116 -116
- package/docs/templates/implementation-plan.md +1 -1
- package/docs/templates/meeting.md +68 -68
- package/docs/templates/prd.md +98 -98
- package/docs/templates/ui.md +134 -134
- package/docs/workflow-pipeline.md +11 -10
- package/package.json +40 -39
- package/scripts/hooks/checks/orchestration-artifacts.cjs +28 -23
- package/scripts/hooks/checks/workflow-state.cjs +4 -5
- package/scripts/orchestration/lib/orchestrator.cjs +344 -117
- package/scripts/orchestration/lib/validate.cjs +145 -0
- package/scripts/orchestration/session.cjs +88 -44
- package/skills/SUPERPOWERS-LICENSE +21 -21
- package/skills/ai-ml/fine-tuning-expert/SKILL.md +162 -162
- package/skills/ai-ml/fine-tuning-expert/references/dataset-preparation.md +540 -540
- package/skills/ai-ml/fine-tuning-expert/references/deployment-optimization.md +673 -673
- package/skills/ai-ml/fine-tuning-expert/references/evaluation-metrics.md +597 -597
- package/skills/ai-ml/fine-tuning-expert/references/hyperparameter-tuning.md +565 -565
- package/skills/ai-ml/fine-tuning-expert/references/lora-peft.md +347 -347
- package/skills/ai-ml/ml-pipeline/SKILL.md +159 -159
- package/skills/ai-ml/ml-pipeline/references/experiment-tracking.md +833 -833
- package/skills/ai-ml/ml-pipeline/references/feature-engineering.md +631 -631
- package/skills/ai-ml/ml-pipeline/references/model-validation.md +978 -978
- package/skills/ai-ml/ml-pipeline/references/pipeline-orchestration.md +907 -907
- package/skills/ai-ml/ml-pipeline/references/training-pipelines.md +782 -782
- package/skills/ai-ml/rag-architect/SKILL.md +194 -194
- package/skills/ai-ml/rag-architect/references/chunking-strategies.md +878 -878
- package/skills/ai-ml/rag-architect/references/embedding-models.md +561 -561
- package/skills/ai-ml/rag-architect/references/rag-evaluation.md +833 -833
- package/skills/ai-ml/rag-architect/references/retrieval-optimization.md +795 -795
- package/skills/ai-ml/rag-architect/references/vector-databases.md +589 -589
- package/skills/ai-ml/spark-engineer/SKILL.md +148 -148
- package/skills/ai-ml/spark-engineer/references/partitioning-caching.md +543 -543
- package/skills/ai-ml/spark-engineer/references/performance-tuning.md +544 -544
- package/skills/ai-ml/spark-engineer/references/rdd-operations.md +599 -599
- package/skills/ai-ml/spark-engineer/references/spark-sql-dataframes.md +474 -474
- package/skills/ai-ml/spark-engineer/references/streaming-patterns.md +786 -786
- package/skills/backend/api-designer/SKILL.md +217 -217
- package/skills/backend/api-designer/references/error-handling.md +541 -541
- package/skills/backend/api-designer/references/openapi.md +824 -824
- package/skills/backend/api-designer/references/pagination.md +494 -494
- package/skills/backend/api-designer/references/rest-patterns.md +335 -335
- package/skills/backend/api-designer/references/versioning.md +391 -391
- package/skills/backend/architecture-designer/SKILL.md +117 -117
- package/skills/backend/architecture-designer/references/adr-template.md +116 -116
- package/skills/backend/architecture-designer/references/architecture-patterns.md +111 -111
- package/skills/backend/architecture-designer/references/database-selection.md +102 -102
- package/skills/backend/architecture-designer/references/nfr-checklist.md +112 -112
- package/skills/backend/architecture-designer/references/system-design.md +100 -100
- package/skills/backend/code-documenter/SKILL.md +147 -147
- package/skills/backend/code-documenter/references/api-docs-fastapi-django.md +166 -166
- package/skills/backend/code-documenter/references/api-docs-nestjs-express.md +220 -220
- package/skills/backend/code-documenter/references/coverage-reports.md +125 -125
- package/skills/backend/code-documenter/references/documentation-systems.md +333 -333
- package/skills/backend/code-documenter/references/interactive-api-docs.md +531 -531
- package/skills/backend/code-documenter/references/python-docstrings.md +121 -121
- package/skills/backend/code-documenter/references/typescript-jsdoc.md +145 -145
- package/skills/backend/code-documenter/references/user-guides-tutorials.md +530 -530
- package/skills/backend/debugging-wizard/SKILL.md +105 -105
- package/skills/backend/debugging-wizard/references/common-patterns.md +132 -132
- package/skills/backend/debugging-wizard/references/debugging-tools.md +140 -140
- package/skills/backend/debugging-wizard/references/quick-fixes.md +177 -177
- package/skills/backend/debugging-wizard/references/strategies.md +142 -142
- package/skills/backend/debugging-wizard/references/systematic-debugging.md +367 -367
- package/skills/backend/feature-forge/SKILL.md +98 -98
- package/skills/backend/feature-forge/references/acceptance-criteria.md +104 -104
- package/skills/backend/feature-forge/references/ears-syntax.md +99 -99
- package/skills/backend/feature-forge/references/interview-questions.md +150 -150
- package/skills/backend/feature-forge/references/pre-discovery-subagents.md +54 -54
- package/skills/backend/feature-forge/references/specification-template.md +103 -103
- package/skills/backend/fullstack-guardian/SKILL.md +105 -105
- package/skills/backend/fullstack-guardian/references/api-design-standards.md +307 -307
- package/skills/backend/fullstack-guardian/references/architecture-decisions.md +350 -350
- package/skills/backend/fullstack-guardian/references/backend-patterns.md +237 -237
- package/skills/backend/fullstack-guardian/references/common-patterns.md +134 -134
- package/skills/backend/fullstack-guardian/references/deliverables-checklist.md +354 -354
- package/skills/backend/fullstack-guardian/references/design-template.md +91 -91
- package/skills/backend/fullstack-guardian/references/error-handling.md +135 -135
- package/skills/backend/fullstack-guardian/references/frontend-patterns.md +340 -340
- package/skills/backend/fullstack-guardian/references/integration-patterns.md +333 -333
- package/skills/backend/fullstack-guardian/references/security-checklist.md +106 -106
- package/skills/backend/graphql-architect/SKILL.md +146 -146
- package/skills/backend/graphql-architect/references/federation.md +418 -418
- package/skills/backend/graphql-architect/references/migration-from-rest.md +1141 -1141
- package/skills/backend/graphql-architect/references/resolvers.md +425 -425
- package/skills/backend/graphql-architect/references/schema-design.md +393 -393
- package/skills/backend/graphql-architect/references/security.md +569 -569
- package/skills/backend/graphql-architect/references/subscriptions.md +510 -510
- package/skills/backend/legacy-modernizer/SKILL.md +137 -137
- package/skills/backend/legacy-modernizer/references/legacy-testing.md +381 -381
- package/skills/backend/legacy-modernizer/references/migration-strategies.md +423 -423
- package/skills/backend/legacy-modernizer/references/refactoring-patterns.md +395 -395
- package/skills/backend/legacy-modernizer/references/strangler-fig-pattern.md +281 -281
- package/skills/backend/legacy-modernizer/references/system-assessment.md +487 -487
- package/skills/backend/microservices-architect/SKILL.md +164 -164
- package/skills/backend/microservices-architect/references/communication.md +499 -499
- package/skills/backend/microservices-architect/references/data.md +721 -721
- package/skills/backend/microservices-architect/references/decomposition.md +344 -344
- package/skills/backend/microservices-architect/references/observability.md +805 -805
- package/skills/backend/microservices-architect/references/patterns.md +603 -603
- package/skills/database/database-optimizer/SKILL.md +147 -147
- package/skills/database/database-optimizer/references/index-strategies.md +331 -331
- package/skills/database/database-optimizer/references/monitoring-analysis.md +501 -501
- package/skills/database/database-optimizer/references/mysql-tuning.md +452 -452
- package/skills/database/database-optimizer/references/postgresql-tuning.md +413 -413
- package/skills/database/database-optimizer/references/query-optimization.md +251 -251
- package/skills/database/postgres-pro/SKILL.md +152 -152
- package/skills/database/postgres-pro/references/extensions.md +404 -404
- package/skills/database/postgres-pro/references/jsonb.md +321 -321
- package/skills/database/postgres-pro/references/maintenance.md +481 -481
- package/skills/database/postgres-pro/references/performance.md +265 -265
- package/skills/database/postgres-pro/references/replication.md +446 -446
- package/skills/database/sql-pro/SKILL.md +129 -129
- package/skills/database/sql-pro/references/database-design.md +402 -402
- package/skills/database/sql-pro/references/dialect-differences.md +419 -419
- package/skills/database/sql-pro/references/optimization.md +384 -384
- package/skills/database/sql-pro/references/query-patterns.md +285 -285
- package/skills/database/sql-pro/references/window-functions.md +328 -328
- package/skills/dotnet/csharp-developer/SKILL.md +125 -125
- package/skills/dotnet/csharp-developer/references/aspnet-core.md +394 -394
- package/skills/dotnet/csharp-developer/references/blazor.md +553 -553
- package/skills/dotnet/csharp-developer/references/entity-framework.md +409 -409
- package/skills/dotnet/csharp-developer/references/modern-csharp.md +248 -248
- package/skills/dotnet/csharp-developer/references/performance.md +498 -498
- package/skills/dotnet/dotnet-core-expert/SKILL.md +138 -138
- package/skills/dotnet/dotnet-core-expert/references/authentication.md +546 -546
- package/skills/dotnet/dotnet-core-expert/references/clean-architecture.md +455 -455
- package/skills/dotnet/dotnet-core-expert/references/cloud-native.md +548 -548
- package/skills/dotnet/dotnet-core-expert/references/entity-framework.md +440 -440
- package/skills/dotnet/dotnet-core-expert/references/minimal-apis.md +319 -319
- package/skills/frontend/angular-architect/SKILL.md +152 -152
- package/skills/frontend/angular-architect/references/components.md +297 -297
- package/skills/frontend/angular-architect/references/ngrx.md +401 -401
- package/skills/frontend/angular-architect/references/routing.md +361 -361
- package/skills/frontend/angular-architect/references/rxjs.md +319 -319
- package/skills/frontend/angular-architect/references/testing.md +405 -405
- package/skills/frontend/design-commands/design.md +91 -91
- package/skills/frontend/design-commands/handoff.md +97 -97
- package/skills/frontend/design-commands/prototype.md +120 -120
- package/skills/frontend/design-commands/spec.md +160 -160
- package/skills/frontend/design-commands/style.md +78 -78
- package/skills/frontend/flutter-expert/SKILL.md +138 -138
- package/skills/frontend/flutter-expert/references/bloc-state.md +259 -259
- package/skills/frontend/flutter-expert/references/gorouter-navigation.md +119 -119
- package/skills/frontend/flutter-expert/references/performance.md +99 -99
- package/skills/frontend/flutter-expert/references/project-structure.md +118 -118
- package/skills/frontend/flutter-expert/references/riverpod-state.md +130 -130
- package/skills/frontend/flutter-expert/references/widget-patterns.md +123 -123
- package/skills/frontend/nextjs-developer/SKILL.md +143 -143
- package/skills/frontend/nextjs-developer/references/app-router.md +311 -311
- package/skills/frontend/nextjs-developer/references/data-fetching.md +482 -482
- package/skills/frontend/nextjs-developer/references/deployment.md +545 -545
- package/skills/frontend/nextjs-developer/references/server-actions.md +462 -462
- package/skills/frontend/nextjs-developer/references/server-components.md +384 -384
- package/skills/frontend/react-expert/SKILL.md +149 -149
- package/skills/frontend/react-expert/references/hooks-patterns.md +162 -162
- package/skills/frontend/react-expert/references/migration-class-to-modern.md +1119 -1119
- package/skills/frontend/react-expert/references/performance.md +168 -168
- package/skills/frontend/react-expert/references/react-19-features.md +174 -174
- package/skills/frontend/react-expert/references/server-components.md +143 -143
- package/skills/frontend/react-expert/references/state-management.md +171 -171
- package/skills/frontend/react-expert/references/testing-react.md +174 -174
- package/skills/frontend/react-native-expert/SKILL.md +185 -185
- package/skills/frontend/react-native-expert/references/expo-router.md +187 -187
- package/skills/frontend/react-native-expert/references/list-optimization.md +204 -204
- package/skills/frontend/react-native-expert/references/platform-handling.md +188 -188
- package/skills/frontend/react-native-expert/references/project-structure.md +171 -171
- package/skills/frontend/react-native-expert/references/storage-hooks.md +173 -173
- package/skills/frontend/senior-frontend/SKILL.md +477 -477
- package/skills/frontend/senior-frontend/references/frontend_best_practices.md +806 -806
- package/skills/frontend/senior-frontend/references/nextjs_optimization_guide.md +724 -724
- package/skills/frontend/senior-frontend/references/react_patterns.md +746 -746
- package/skills/frontend/senior-frontend/scripts/bundle_analyzer.py +407 -407
- package/skills/frontend/senior-frontend/scripts/component_generator.py +329 -329
- package/skills/frontend/senior-frontend/scripts/frontend_scaffolder.py +1005 -1005
- package/skills/frontend/ui-ux-pro-max/SKILL.md +386 -386
- package/skills/frontend/ui-ux-pro-max/data/charts.csv +26 -26
- package/skills/frontend/ui-ux-pro-max/data/colors.csv +97 -97
- package/skills/frontend/ui-ux-pro-max/data/icons.csv +101 -101
- package/skills/frontend/ui-ux-pro-max/data/landing.csv +31 -31
- package/skills/frontend/ui-ux-pro-max/data/products.csv +96 -96
- package/skills/frontend/ui-ux-pro-max/data/react-performance.csv +45 -45
- package/skills/frontend/ui-ux-pro-max/data/stacks/astro.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/skills/frontend/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
- package/skills/frontend/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
- package/skills/frontend/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/skills/frontend/ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
- package/skills/frontend/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/skills/frontend/ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/skills/frontend/ui-ux-pro-max/data/styles.csv +68 -68
- package/skills/frontend/ui-ux-pro-max/data/typography.csv +57 -57
- package/skills/frontend/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
- package/skills/frontend/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/skills/frontend/ui-ux-pro-max/data/web-interface.csv +31 -31
- package/skills/frontend/ui-ux-pro-max/scripts/core.py +253 -253
- package/skills/frontend/ui-ux-pro-max/scripts/design_system.py +1067 -1067
- package/skills/frontend/ui-ux-pro-max/scripts/search.py +114 -114
- package/skills/frontend/vue-expert/SKILL.md +98 -98
- package/skills/frontend/vue-expert/references/build-tooling.md +480 -480
- package/skills/frontend/vue-expert/references/components.md +448 -448
- package/skills/frontend/vue-expert/references/composition-api.md +299 -299
- package/skills/frontend/vue-expert/references/mobile-hybrid.md +636 -636
- package/skills/frontend/vue-expert/references/nuxt.md +669 -669
- package/skills/frontend/vue-expert/references/state-management.md +449 -449
- package/skills/frontend/vue-expert/references/typescript.md +584 -584
- package/skills/frontend/vue-expert-js/SKILL.md +167 -167
- package/skills/frontend/vue-expert-js/references/component-architecture.md +219 -219
- package/skills/frontend/vue-expert-js/references/composables-patterns.md +183 -183
- package/skills/frontend/vue-expert-js/references/jsdoc-typing.md +535 -535
- package/skills/frontend/vue-expert-js/references/state-management.md +249 -249
- package/skills/frontend/vue-expert-js/references/testing-patterns.md +237 -237
- package/skills/go-rust-cpp/cpp-pro/SKILL.md +115 -115
- package/skills/go-rust-cpp/cpp-pro/references/build-tooling.md +440 -440
- package/skills/go-rust-cpp/cpp-pro/references/concurrency.md +437 -437
- package/skills/go-rust-cpp/cpp-pro/references/memory-performance.md +397 -397
- package/skills/go-rust-cpp/cpp-pro/references/modern-cpp.md +304 -304
- package/skills/go-rust-cpp/cpp-pro/references/templates.md +357 -357
- package/skills/go-rust-cpp/golang-pro/SKILL.md +122 -122
- package/skills/go-rust-cpp/golang-pro/references/concurrency.md +329 -329
- package/skills/go-rust-cpp/golang-pro/references/generics.md +442 -442
- package/skills/go-rust-cpp/golang-pro/references/interfaces.md +432 -432
- package/skills/go-rust-cpp/golang-pro/references/project-structure.md +477 -477
- package/skills/go-rust-cpp/golang-pro/references/testing.md +451 -451
- package/skills/go-rust-cpp/rust-engineer/SKILL.md +167 -167
- package/skills/go-rust-cpp/rust-engineer/references/async.md +458 -458
- package/skills/go-rust-cpp/rust-engineer/references/error-handling.md +334 -334
- package/skills/go-rust-cpp/rust-engineer/references/ownership.md +278 -278
- package/skills/go-rust-cpp/rust-engineer/references/testing.md +470 -470
- package/skills/go-rust-cpp/rust-engineer/references/traits.md +413 -413
- package/skills/infra/cli-developer/SKILL.md +113 -113
- package/skills/infra/cli-developer/references/design-patterns.md +221 -221
- package/skills/infra/cli-developer/references/go-cli.md +540 -540
- package/skills/infra/cli-developer/references/node-cli.md +383 -383
- package/skills/infra/cli-developer/references/python-cli.md +422 -422
- package/skills/infra/cli-developer/references/ux-patterns.md +448 -448
- package/skills/infra/cloud-architect/SKILL.md +216 -216
- package/skills/infra/cloud-architect/references/aws.md +394 -394
- package/skills/infra/cloud-architect/references/azure.md +562 -562
- package/skills/infra/cloud-architect/references/cost.md +582 -582
- package/skills/infra/cloud-architect/references/gcp.md +633 -633
- package/skills/infra/cloud-architect/references/multi-cloud.md +483 -483
- package/skills/infra/devops-engineer/SKILL.md +144 -144
- package/skills/infra/devops-engineer/references/deployment-strategies.md +241 -241
- package/skills/infra/devops-engineer/references/docker-patterns.md +113 -113
- package/skills/infra/devops-engineer/references/github-actions.md +139 -139
- package/skills/infra/devops-engineer/references/incident-response.md +331 -331
- package/skills/infra/devops-engineer/references/kubernetes.md +154 -154
- package/skills/infra/devops-engineer/references/platform-engineering.md +417 -417
- package/skills/infra/devops-engineer/references/release-automation.md +527 -527
- package/skills/infra/devops-engineer/references/terraform-iac.md +141 -141
- package/skills/infra/kubernetes-specialist/SKILL.md +241 -241
- package/skills/infra/kubernetes-specialist/references/configuration.md +452 -452
- package/skills/infra/kubernetes-specialist/references/cost-optimization.md +458 -458
- package/skills/infra/kubernetes-specialist/references/custom-operators.md +563 -563
- package/skills/infra/kubernetes-specialist/references/gitops.md +530 -530
- package/skills/infra/kubernetes-specialist/references/helm-charts.md +912 -912
- package/skills/infra/kubernetes-specialist/references/multi-cluster.md +507 -507
- package/skills/infra/kubernetes-specialist/references/networking.md +447 -447
- package/skills/infra/kubernetes-specialist/references/service-mesh.md +459 -459
- package/skills/infra/kubernetes-specialist/references/storage.md +535 -535
- package/skills/infra/kubernetes-specialist/references/troubleshooting.md +414 -414
- package/skills/infra/kubernetes-specialist/references/workloads.md +377 -377
- package/skills/infra/mcp-developer/SKILL.md +143 -143
- package/skills/infra/mcp-developer/references/protocol.md +244 -244
- package/skills/infra/mcp-developer/references/python-sdk.md +367 -367
- package/skills/infra/mcp-developer/references/resources.md +554 -554
- package/skills/infra/mcp-developer/references/tools.md +480 -480
- package/skills/infra/mcp-developer/references/typescript-sdk.md +350 -350
- package/skills/infra/monitoring-expert/SKILL.md +176 -176
- package/skills/infra/monitoring-expert/references/alerting-rules.md +141 -141
- package/skills/infra/monitoring-expert/references/application-profiling.md +331 -331
- package/skills/infra/monitoring-expert/references/capacity-planning.md +344 -344
- package/skills/infra/monitoring-expert/references/dashboards.md +126 -126
- package/skills/infra/monitoring-expert/references/opentelemetry.md +123 -123
- package/skills/infra/monitoring-expert/references/performance-testing.md +269 -269
- package/skills/infra/monitoring-expert/references/prometheus-metrics.md +136 -136
- package/skills/infra/monitoring-expert/references/structured-logging.md +142 -142
- package/skills/infra/sre-engineer/SKILL.md +181 -181
- package/skills/infra/sre-engineer/references/automation-toil.md +492 -492
- package/skills/infra/sre-engineer/references/error-budget-policy.md +334 -334
- package/skills/infra/sre-engineer/references/incident-chaos.md +576 -576
- package/skills/infra/sre-engineer/references/monitoring-alerting.md +424 -424
- package/skills/infra/sre-engineer/references/slo-sli-management.md +238 -238
- package/skills/infra/terraform-engineer/SKILL.md +143 -143
- package/skills/infra/terraform-engineer/references/best-practices.md +583 -583
- package/skills/infra/terraform-engineer/references/module-patterns.md +297 -297
- package/skills/infra/terraform-engineer/references/providers.md +452 -452
- package/skills/infra/terraform-engineer/references/state-management.md +371 -371
- package/skills/infra/terraform-engineer/references/testing.md +486 -486
- package/skills/infra/websocket-engineer/SKILL.md +168 -168
- package/skills/infra/websocket-engineer/references/alternatives.md +391 -391
- package/skills/infra/websocket-engineer/references/patterns.md +400 -400
- package/skills/infra/websocket-engineer/references/protocol.md +195 -195
- package/skills/infra/websocket-engineer/references/scaling.md +333 -333
- package/skills/infra/websocket-engineer/references/security.md +474 -474
- package/skills/java/java-architect/SKILL.md +132 -132
- package/skills/java/java-architect/references/jpa-optimization.md +393 -393
- package/skills/java/java-architect/references/reactive-webflux.md +356 -356
- package/skills/java/java-architect/references/spring-boot-setup.md +269 -269
- package/skills/java/java-architect/references/spring-security.md +445 -445
- package/skills/java/java-architect/references/testing-patterns.md +500 -500
- package/skills/java/kotlin-specialist/SKILL.md +147 -147
- package/skills/java/kotlin-specialist/references/android-compose.md +419 -419
- package/skills/java/kotlin-specialist/references/coroutines-flow.md +276 -276
- package/skills/java/kotlin-specialist/references/dsl-idioms.md +421 -421
- package/skills/java/kotlin-specialist/references/ktor-server.md +426 -426
- package/skills/java/kotlin-specialist/references/multiplatform-kmp.md +380 -380
- package/skills/java/spring-boot-engineer/SKILL.md +195 -195
- package/skills/java/spring-boot-engineer/references/cloud.md +498 -498
- package/skills/java/spring-boot-engineer/references/data.md +381 -381
- package/skills/java/spring-boot-engineer/references/security.md +459 -459
- package/skills/java/spring-boot-engineer/references/testing.md +545 -545
- package/skills/java/spring-boot-engineer/references/web.md +295 -295
- package/skills/javascript/javascript-pro/SKILL.md +132 -132
- package/skills/javascript/javascript-pro/references/async-patterns.md +334 -334
- package/skills/javascript/javascript-pro/references/browser-apis.md +398 -398
- package/skills/javascript/javascript-pro/references/modern-syntax.md +272 -272
- package/skills/javascript/javascript-pro/references/modules.md +357 -357
- package/skills/javascript/javascript-pro/references/node-essentials.md +471 -471
- package/skills/javascript/nestjs-expert/SKILL.md +206 -206
- package/skills/javascript/nestjs-expert/references/authentication.md +166 -166
- package/skills/javascript/nestjs-expert/references/controllers-routing.md +111 -111
- package/skills/javascript/nestjs-expert/references/dtos-validation.md +153 -153
- package/skills/javascript/nestjs-expert/references/migration-from-express.md +1237 -1237
- package/skills/javascript/nestjs-expert/references/services-di.md +140 -140
- package/skills/javascript/nestjs-expert/references/testing-patterns.md +186 -186
- package/skills/javascript/typescript-pro/SKILL.md +145 -145
- package/skills/javascript/typescript-pro/references/advanced-types.md +259 -259
- package/skills/javascript/typescript-pro/references/configuration.md +445 -445
- package/skills/javascript/typescript-pro/references/patterns.md +484 -484
- package/skills/javascript/typescript-pro/references/type-guards.md +352 -352
- package/skills/javascript/typescript-pro/references/utility-types.md +329 -329
- package/skills/php/laravel-specialist/SKILL.md +262 -262
- package/skills/php/laravel-specialist/references/eloquent.md +351 -351
- package/skills/php/laravel-specialist/references/livewire.md +512 -512
- package/skills/php/laravel-specialist/references/queues.md +423 -423
- package/skills/php/laravel-specialist/references/routing.md +362 -362
- package/skills/php/laravel-specialist/references/testing.md +522 -522
- package/skills/php/php-pro/SKILL.md +206 -206
- package/skills/php/php-pro/references/async-patterns.md +412 -412
- package/skills/php/php-pro/references/laravel-patterns.md +377 -377
- package/skills/php/php-pro/references/modern-php-features.md +323 -323
- package/skills/php/php-pro/references/symfony-patterns.md +466 -466
- package/skills/php/php-pro/references/testing-quality.md +466 -466
- package/skills/product/competitive-analysis/SKILL.md +257 -257
- package/skills/product/meeting-notes/SKILL.md +266 -266
- package/skills/product/prd-template/SKILL.md +150 -150
- package/skills/product/stakeholder-update/SKILL.md +225 -225
- package/skills/product/user-research-synthesis/SKILL.md +235 -235
- package/skills/python/django-expert/SKILL.md +162 -162
- package/skills/python/django-expert/references/authentication.md +145 -145
- package/skills/python/django-expert/references/drf-serializers.md +148 -148
- package/skills/python/django-expert/references/models-orm.md +151 -151
- package/skills/python/django-expert/references/testing-django.md +204 -204
- package/skills/python/django-expert/references/viewsets-views.md +153 -153
- package/skills/python/fastapi-expert/SKILL.md +185 -185
- package/skills/python/fastapi-expert/references/async-sqlalchemy.md +146 -146
- package/skills/python/fastapi-expert/references/authentication.md +159 -159
- package/skills/python/fastapi-expert/references/endpoints-routing.md +142 -142
- package/skills/python/fastapi-expert/references/migration-from-django.md +996 -996
- package/skills/python/fastapi-expert/references/pydantic-v2.md +135 -135
- package/skills/python/fastapi-expert/references/testing-async.md +159 -159
- package/skills/python/pandas-pro/SKILL.md +178 -178
- package/skills/python/pandas-pro/references/aggregation-groupby.md +545 -545
- package/skills/python/pandas-pro/references/data-cleaning.md +500 -500
- package/skills/python/pandas-pro/references/dataframe-operations.md +420 -420
- package/skills/python/pandas-pro/references/merging-joining.md +596 -596
- package/skills/python/pandas-pro/references/performance-optimization.md +597 -597
- package/skills/python/python-pro/SKILL.md +177 -177
- package/skills/python/python-pro/references/async-patterns.md +356 -356
- package/skills/python/python-pro/references/packaging.md +460 -460
- package/skills/python/python-pro/references/standard-library.md +378 -378
- package/skills/python/python-pro/references/testing.md +404 -404
- package/skills/python/python-pro/references/type-system.md +290 -290
- package/skills/quality/chaos-engineer/SKILL.md +182 -182
- package/skills/quality/chaos-engineer/references/chaos-tools.md +511 -511
- package/skills/quality/chaos-engineer/references/experiment-design.md +229 -229
- package/skills/quality/chaos-engineer/references/game-days.md +434 -434
- package/skills/quality/chaos-engineer/references/infrastructure-chaos.md +348 -348
- package/skills/quality/chaos-engineer/references/kubernetes-chaos.md +432 -432
- package/skills/quality/code-reviewer/SKILL.md +119 -119
- package/skills/quality/code-reviewer/references/common-issues.md +142 -142
- package/skills/quality/code-reviewer/references/feedback-examples.md +144 -144
- package/skills/quality/code-reviewer/references/receiving-feedback.md +238 -238
- package/skills/quality/code-reviewer/references/report-template.md +109 -109
- package/skills/quality/code-reviewer/references/review-checklist.md +88 -88
- package/skills/quality/code-reviewer/references/spec-compliance-review.md +258 -258
- package/skills/quality/playwright-expert/SKILL.md +169 -169
- package/skills/quality/playwright-expert/references/api-mocking.md +140 -140
- package/skills/quality/playwright-expert/references/configuration.md +155 -155
- package/skills/quality/playwright-expert/references/debugging-flaky.md +150 -150
- package/skills/quality/playwright-expert/references/page-object-model.md +152 -152
- package/skills/quality/playwright-expert/references/selectors-locators.md +119 -119
- package/skills/quality/secure-code-guardian/SKILL.md +191 -191
- package/skills/quality/secure-code-guardian/references/authentication.md +136 -136
- package/skills/quality/secure-code-guardian/references/input-validation.md +146 -146
- package/skills/quality/secure-code-guardian/references/owasp-prevention.md +135 -135
- package/skills/quality/secure-code-guardian/references/security-headers.md +133 -133
- package/skills/quality/secure-code-guardian/references/xss-csrf.md +157 -157
- package/skills/quality/security-reviewer/SKILL.md +103 -103
- package/skills/quality/security-reviewer/references/infrastructure-security.md +268 -268
- package/skills/quality/security-reviewer/references/penetration-testing.md +268 -268
- package/skills/quality/security-reviewer/references/report-template.md +170 -170
- package/skills/quality/security-reviewer/references/sast-tools.md +117 -117
- package/skills/quality/security-reviewer/references/secret-scanning.md +125 -125
- package/skills/quality/security-reviewer/references/vulnerability-patterns.md +152 -152
- package/skills/quality/senior-qa/README.md +196 -196
- package/skills/quality/senior-qa/SKILL.md +399 -399
- package/skills/quality/senior-qa/references/qa_best_practices.md +964 -964
- package/skills/quality/senior-qa/references/test_automation_patterns.md +1009 -1009
- package/skills/quality/senior-qa/references/testing_strategies.md +649 -649
- package/skills/quality/senior-qa/scripts/coverage_analyzer.py +836 -836
- package/skills/quality/senior-qa/scripts/e2e_test_scaffolder.py +820 -820
- package/skills/quality/senior-qa/scripts/test_suite_generator.py +605 -605
- package/skills/quality/tdd-guide/HOW_TO_USE.md +313 -313
- package/skills/quality/tdd-guide/README.md +680 -680
- package/skills/quality/tdd-guide/SKILL.md +122 -122
- package/skills/quality/tdd-guide/assets/expected_output.json +77 -77
- package/skills/quality/tdd-guide/assets/sample_input_python.json +39 -39
- package/skills/quality/tdd-guide/assets/sample_input_typescript.json +36 -36
- package/skills/quality/tdd-guide/references/ci-integration.md +195 -195
- package/skills/quality/tdd-guide/references/framework-guide.md +206 -206
- package/skills/quality/tdd-guide/references/tdd-best-practices.md +128 -128
- package/skills/quality/tdd-guide/scripts/coverage_analyzer.py +434 -434
- package/skills/quality/tdd-guide/scripts/fixture_generator.py +440 -440
- package/skills/quality/tdd-guide/scripts/format_detector.py +384 -384
- package/skills/quality/tdd-guide/scripts/framework_adapter.py +428 -428
- package/skills/quality/tdd-guide/scripts/metrics_calculator.py +456 -456
- package/skills/quality/tdd-guide/scripts/output_formatter.py +354 -354
- package/skills/quality/tdd-guide/scripts/tdd_workflow.py +474 -474
- package/skills/quality/tdd-guide/scripts/test_generator.py +438 -438
- package/skills/quality/test-master/SKILL.md +94 -94
- package/skills/quality/test-master/references/automation-frameworks.md +294 -294
- package/skills/quality/test-master/references/e2e-testing.md +128 -128
- package/skills/quality/test-master/references/integration-testing.md +120 -120
- package/skills/quality/test-master/references/performance-testing.md +118 -118
- package/skills/quality/test-master/references/qa-methodology.md +247 -247
- package/skills/quality/test-master/references/security-testing.md +127 -127
- package/skills/quality/test-master/references/tdd-iron-laws.md +174 -174
- package/skills/quality/test-master/references/test-reports.md +104 -104
- package/skills/quality/test-master/references/testing-anti-patterns.md +231 -231
- package/skills/quality/test-master/references/unit-testing.md +113 -113
- package/skills/ruby/rails-expert/SKILL.md +154 -154
- package/skills/ruby/rails-expert/references/active-record.md +244 -244
- package/skills/ruby/rails-expert/references/api-development.md +401 -401
- package/skills/ruby/rails-expert/references/background-jobs.md +272 -272
- package/skills/ruby/rails-expert/references/hotwire-turbo.md +228 -228
- package/skills/ruby/rails-expert/references/rspec-testing.md +367 -367
- package/skills/swift/swift-expert/SKILL.md +163 -163
- package/skills/swift/swift-expert/references/async-concurrency.md +360 -360
- package/skills/swift/swift-expert/references/memory-performance.md +377 -377
- package/skills/swift/swift-expert/references/protocol-oriented.md +354 -354
- package/skills/swift/swift-expert/references/swiftui-patterns.md +291 -291
- package/skills/swift/swift-expert/references/testing-patterns.md +399 -399
- package/skills/workflow/brainstorming/SKILL.md +164 -164
- package/skills/workflow/brainstorming/scripts/frame-template.html +214 -214
- package/skills/workflow/brainstorming/scripts/helper.js +88 -88
- package/skills/workflow/brainstorming/scripts/server.cjs +354 -354
- package/skills/workflow/brainstorming/scripts/start-server.sh +148 -148
- package/skills/workflow/brainstorming/scripts/stop-server.sh +56 -56
- package/skills/workflow/brainstorming/spec-document-reviewer-prompt.md +49 -49
- package/skills/workflow/brainstorming/visual-companion.md +287 -287
- package/skills/workflow/documentation/SKILL.md +45 -45
- package/skills/workflow/entropy-management/SKILL.md +115 -115
- package/skills/workflow/executing-plans/SKILL.md +70 -70
- package/skills/workflow/finishing-a-development-branch/SKILL.md +200 -200
- package/skills/workflow/receiving-code-review/SKILL.md +213 -213
- package/skills/workflow/requesting-code-review/SKILL.md +105 -105
- package/skills/workflow/requesting-code-review/code-reviewer.md +146 -146
- package/skills/workflow/requirement-engineering/SKILL.md +111 -111
- package/skills/workflow/systematic-debugging/CREATION-LOG.md +119 -119
- package/skills/workflow/systematic-debugging/SKILL.md +296 -296
- package/skills/workflow/systematic-debugging/condition-based-waiting-example.ts +158 -158
- package/skills/workflow/systematic-debugging/condition-based-waiting.md +115 -115
- package/skills/workflow/systematic-debugging/defense-in-depth.md +122 -122
- package/skills/workflow/systematic-debugging/find-polluter.sh +63 -63
- package/skills/workflow/systematic-debugging/root-cause-tracing.md +169 -169
- package/skills/workflow/systematic-debugging/test-academic.md +14 -14
- package/skills/workflow/systematic-debugging/test-pressure-1.md +58 -58
- package/skills/workflow/systematic-debugging/test-pressure-2.md +68 -68
- package/skills/workflow/systematic-debugging/test-pressure-3.md +69 -69
- package/skills/workflow/using-git-worktrees/SKILL.md +218 -218
- package/skills/workflow/verification-before-completion/SKILL.md +139 -139
- package/skills/workflow/writing-plans/SKILL.md +151 -151
- package/skills/workflow/writing-plans/plan-document-reviewer-prompt.md +49 -49
- package/skills/workflow/writing-skills/SKILL.md +655 -655
- package/skills/workflow/writing-skills/anthropic-best-practices.md +1150 -1150
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -189
- package/skills/workflow/writing-skills/persuasion-principles.md +187 -187
- package/skills/workflow/writing-skills/render-graphs.js +168 -168
- package/skills/workflow/writing-skills/testing-skills-with-subagents.md +384 -384
|
@@ -1,391 +1,391 @@
|
|
|
1
|
-
# API Versioning Strategies
|
|
2
|
-
|
|
3
|
-
## Why Version APIs?
|
|
4
|
-
|
|
5
|
-
API versioning allows you to evolve your API while maintaining backward compatibility for existing clients. Breaking changes require a new version.
|
|
6
|
-
|
|
7
|
-
### Breaking Changes
|
|
8
|
-
|
|
9
|
-
Changes that require a new version:
|
|
10
|
-
- Removing or renaming fields
|
|
11
|
-
- Changing field types (string to integer)
|
|
12
|
-
- Adding required fields to requests
|
|
13
|
-
- Changing response structure
|
|
14
|
-
- Removing endpoints
|
|
15
|
-
- Changing HTTP status codes for same scenario
|
|
16
|
-
- Changing authentication mechanisms
|
|
17
|
-
|
|
18
|
-
### Non-Breaking Changes
|
|
19
|
-
|
|
20
|
-
Safe changes that don't require a new version:
|
|
21
|
-
- Adding new endpoints
|
|
22
|
-
- Adding optional request fields
|
|
23
|
-
- Adding new fields to responses (clients should ignore unknown fields)
|
|
24
|
-
- Fixing bugs
|
|
25
|
-
- Performance improvements
|
|
26
|
-
- Adding new HTTP methods to existing resources
|
|
27
|
-
|
|
28
|
-
## Versioning Strategies
|
|
29
|
-
|
|
30
|
-
### 1. URI Versioning
|
|
31
|
-
|
|
32
|
-
Most common and visible approach. Version is part of the URL path.
|
|
33
|
-
|
|
34
|
-
```http
|
|
35
|
-
GET /v1/users/123
|
|
36
|
-
GET /v2/users/123
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
**Advantages:**
|
|
40
|
-
- Clear and visible in URLs
|
|
41
|
-
- Easy to understand and implement
|
|
42
|
-
- Simple routing and caching
|
|
43
|
-
- Can run multiple versions simultaneously
|
|
44
|
-
|
|
45
|
-
**Disadvantages:**
|
|
46
|
-
- Violates REST principle (same resource, different URIs)
|
|
47
|
-
- Requires updating client code to change version
|
|
48
|
-
- Can lead to URI proliferation
|
|
49
|
-
|
|
50
|
-
**Implementation:**
|
|
51
|
-
```
|
|
52
|
-
/v1/users
|
|
53
|
-
/v1/products
|
|
54
|
-
/v2/users # New version with breaking changes
|
|
55
|
-
/v2/products
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### 2. Header Versioning
|
|
59
|
-
|
|
60
|
-
Version specified in HTTP headers (Accept header or custom header).
|
|
61
|
-
|
|
62
|
-
**Accept Header:**
|
|
63
|
-
```http
|
|
64
|
-
GET /users/123
|
|
65
|
-
Accept: application/vnd.myapi.v1+json
|
|
66
|
-
|
|
67
|
-
GET /users/123
|
|
68
|
-
Accept: application/vnd.myapi.v2+json
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
**Custom Header:**
|
|
72
|
-
```http
|
|
73
|
-
GET /users/123
|
|
74
|
-
API-Version: 1
|
|
75
|
-
|
|
76
|
-
GET /users/123
|
|
77
|
-
API-Version: 2
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
**Advantages:**
|
|
81
|
-
- URIs remain stable
|
|
82
|
-
- More RESTful (same resource, same URI)
|
|
83
|
-
- Separates versioning from resource identification
|
|
84
|
-
|
|
85
|
-
**Disadvantages:**
|
|
86
|
-
- Less visible (harder to debug)
|
|
87
|
-
- More complex routing
|
|
88
|
-
- Difficult to test in browser
|
|
89
|
-
- Cache complexity
|
|
90
|
-
|
|
91
|
-
### 3. Query Parameter Versioning
|
|
92
|
-
|
|
93
|
-
Version specified as query parameter.
|
|
94
|
-
|
|
95
|
-
```http
|
|
96
|
-
GET /users/123?version=1
|
|
97
|
-
GET /users/123?version=2
|
|
98
|
-
|
|
99
|
-
# or
|
|
100
|
-
GET /users/123?api-version=1
|
|
101
|
-
GET /users/123?api-version=2
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
**Advantages:**
|
|
105
|
-
- Simple to implement
|
|
106
|
-
- Easy to test
|
|
107
|
-
- Visible in URLs
|
|
108
|
-
|
|
109
|
-
**Disadvantages:**
|
|
110
|
-
- Pollutes query string
|
|
111
|
-
- Not semantic (version not a filter)
|
|
112
|
-
- Can interfere with other query params
|
|
113
|
-
|
|
114
|
-
### 4. Content Negotiation
|
|
115
|
-
|
|
116
|
-
Client specifies desired version through content negotiation.
|
|
117
|
-
|
|
118
|
-
```http
|
|
119
|
-
GET /users/123
|
|
120
|
-
Accept: application/vnd.myapi+json; version=1
|
|
121
|
-
|
|
122
|
-
GET /users/123
|
|
123
|
-
Accept: application/vnd.myapi+json; version=2
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
**Advantages:**
|
|
127
|
-
- Very RESTful
|
|
128
|
-
- Flexible content type negotiation
|
|
129
|
-
- Stable URIs
|
|
130
|
-
|
|
131
|
-
**Disadvantages:**
|
|
132
|
-
- Complex implementation
|
|
133
|
-
- Less intuitive for developers
|
|
134
|
-
- Harder to test
|
|
135
|
-
|
|
136
|
-
## Recommended Approach
|
|
137
|
-
|
|
138
|
-
**URI versioning is recommended for most APIs** because:
|
|
139
|
-
- It's the most explicit and discoverable
|
|
140
|
-
- Easy to understand and debug
|
|
141
|
-
- Simple to implement and maintain
|
|
142
|
-
- Clear separation between versions
|
|
143
|
-
|
|
144
|
-
```
|
|
145
|
-
/v1/users
|
|
146
|
-
/v2/users
|
|
147
|
-
/v3/users
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## Version Format
|
|
151
|
-
|
|
152
|
-
### Major Versions Only
|
|
153
|
-
|
|
154
|
-
Use simple major versions (v1, v2, v3) for public APIs:
|
|
155
|
-
```
|
|
156
|
-
/v1/users
|
|
157
|
-
/v2/users
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
**Advantages:**
|
|
161
|
-
- Simple and clear
|
|
162
|
-
- Easy to communicate
|
|
163
|
-
- Forces thoughtful breaking changes
|
|
164
|
-
|
|
165
|
-
### Date-Based Versions
|
|
166
|
-
|
|
167
|
-
Some APIs use dates for versions:
|
|
168
|
-
```
|
|
169
|
-
/2024-01-01/users
|
|
170
|
-
/2024-06-15/users
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
**Used by:** Stripe, GitHub API
|
|
174
|
-
|
|
175
|
-
**Advantages:**
|
|
176
|
-
- Clear when version was released
|
|
177
|
-
- Easy to understand timeline
|
|
178
|
-
- No confusion about major/minor
|
|
179
|
-
|
|
180
|
-
**Disadvantages:**
|
|
181
|
-
- Less intuitive for clients
|
|
182
|
-
- Harder to understand what changed
|
|
183
|
-
|
|
184
|
-
## Version Lifecycle
|
|
185
|
-
|
|
186
|
-
### 1. Introduction Phase
|
|
187
|
-
|
|
188
|
-
New version is released alongside existing version:
|
|
189
|
-
```
|
|
190
|
-
/v1/users # Still supported
|
|
191
|
-
/v2/users # New version available
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
Announce new version:
|
|
195
|
-
- Blog post explaining changes
|
|
196
|
-
- Migration guide
|
|
197
|
-
- Breaking changes list
|
|
198
|
-
- Timeline for v1 deprecation
|
|
199
|
-
|
|
200
|
-
### 2. Deprecation Phase
|
|
201
|
-
|
|
202
|
-
Mark old version as deprecated but keep it running:
|
|
203
|
-
|
|
204
|
-
```http
|
|
205
|
-
GET /v1/users/123
|
|
206
|
-
|
|
207
|
-
Response:
|
|
208
|
-
Deprecation: true
|
|
209
|
-
Sunset: Wed, 15 Jan 2025 00:00:00 GMT
|
|
210
|
-
Link: </v2/users/123>; rel="successor-version"
|
|
211
|
-
|
|
212
|
-
{
|
|
213
|
-
"id": 123,
|
|
214
|
-
"name": "John Doe"
|
|
215
|
-
}
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
**Deprecation Headers:**
|
|
219
|
-
- `Deprecation: true` - Indicates version is deprecated
|
|
220
|
-
- `Sunset: <date>` - When version will be removed (RFC 8594)
|
|
221
|
-
- `Link: <url>; rel="successor-version"` - Points to new version
|
|
222
|
-
|
|
223
|
-
### 3. Sunset Phase
|
|
224
|
-
|
|
225
|
-
Old version is shut down on announced date.
|
|
226
|
-
|
|
227
|
-
Return 410 Gone for deprecated endpoints:
|
|
228
|
-
```http
|
|
229
|
-
GET /v1/users/123
|
|
230
|
-
|
|
231
|
-
Response: 410 Gone
|
|
232
|
-
{
|
|
233
|
-
"error": {
|
|
234
|
-
"code": "VERSION_SUNSET",
|
|
235
|
-
"message": "API v1 was sunset on 2025-01-15. Please use v2.",
|
|
236
|
-
"documentation_url": "https://api.example.com/docs/migration-v1-to-v2"
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
## Deprecation Policy
|
|
242
|
-
|
|
243
|
-
### Recommended Timeline
|
|
244
|
-
|
|
245
|
-
1. **Announce deprecation** - At least 6 months before sunset
|
|
246
|
-
2. **Support period** - Run both versions for 6-12 months
|
|
247
|
-
3. **Sunset date** - Clear date communicated in advance
|
|
248
|
-
4. **Grace period** - 30 days of 410 Gone responses before complete shutdown
|
|
249
|
-
|
|
250
|
-
### Communication Channels
|
|
251
|
-
|
|
252
|
-
- API response headers
|
|
253
|
-
- Email to registered developers
|
|
254
|
-
- Blog posts and changelog
|
|
255
|
-
- Dashboard notifications
|
|
256
|
-
- Documentation updates
|
|
257
|
-
- Status page announcements
|
|
258
|
-
|
|
259
|
-
## Migration Strategy
|
|
260
|
-
|
|
261
|
-
### Provide Migration Guide
|
|
262
|
-
|
|
263
|
-
```markdown
|
|
264
|
-
# Migrating from v1 to v2
|
|
265
|
-
|
|
266
|
-
## Breaking Changes
|
|
267
|
-
|
|
268
|
-
### User Resource Changes
|
|
269
|
-
|
|
270
|
-
**v1:**
|
|
271
|
-
```json
|
|
272
|
-
{
|
|
273
|
-
"id": 123,
|
|
274
|
-
"name": "John Doe",
|
|
275
|
-
"email": "john@example.com"
|
|
276
|
-
}
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
**v2:**
|
|
280
|
-
```json
|
|
281
|
-
{
|
|
282
|
-
"id": 123,
|
|
283
|
-
"first_name": "John",
|
|
284
|
-
"last_name": "Doe",
|
|
285
|
-
"email": "john@example.com"
|
|
286
|
-
}
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
**Migration:**
|
|
290
|
-
- Split `name` field into `first_name` and `last_name`
|
|
291
|
-
- Update client code to use new fields
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
### Offer Tools
|
|
295
|
-
|
|
296
|
-
- Migration scripts
|
|
297
|
-
- SDK updates
|
|
298
|
-
- API diff viewer
|
|
299
|
-
- Compatibility layer (temporary)
|
|
300
|
-
|
|
301
|
-
## Version Discovery
|
|
302
|
-
|
|
303
|
-
### Root Endpoint
|
|
304
|
-
|
|
305
|
-
```http
|
|
306
|
-
GET /
|
|
307
|
-
|
|
308
|
-
Response:
|
|
309
|
-
{
|
|
310
|
-
"versions": {
|
|
311
|
-
"v1": {
|
|
312
|
-
"status": "deprecated",
|
|
313
|
-
"sunset_date": "2025-01-15",
|
|
314
|
-
"documentation_url": "https://api.example.com/docs/v1"
|
|
315
|
-
},
|
|
316
|
-
"v2": {
|
|
317
|
-
"status": "current",
|
|
318
|
-
"documentation_url": "https://api.example.com/docs/v2"
|
|
319
|
-
},
|
|
320
|
-
"v3": {
|
|
321
|
-
"status": "beta",
|
|
322
|
-
"documentation_url": "https://api.example.com/docs/v3"
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
### Version Info Endpoint
|
|
329
|
-
|
|
330
|
-
```http
|
|
331
|
-
GET /v2/version
|
|
332
|
-
|
|
333
|
-
Response:
|
|
334
|
-
{
|
|
335
|
-
"version": "v2",
|
|
336
|
-
"released": "2024-01-15",
|
|
337
|
-
"status": "stable",
|
|
338
|
-
"sunset_date": null
|
|
339
|
-
}
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
## OpenAPI Versioning
|
|
343
|
-
|
|
344
|
-
### Separate Specs per Version
|
|
345
|
-
|
|
346
|
-
```
|
|
347
|
-
openapi-v1.yaml
|
|
348
|
-
openapi-v2.yaml
|
|
349
|
-
openapi-v3.yaml
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
Each spec is complete and independent.
|
|
353
|
-
|
|
354
|
-
### Single Spec with Servers
|
|
355
|
-
|
|
356
|
-
```yaml
|
|
357
|
-
openapi: 3.1.0
|
|
358
|
-
info:
|
|
359
|
-
title: My API
|
|
360
|
-
version: 2.0.0
|
|
361
|
-
servers:
|
|
362
|
-
- url: https://api.example.com/v1
|
|
363
|
-
description: Version 1 (deprecated)
|
|
364
|
-
- url: https://api.example.com/v2
|
|
365
|
-
description: Version 2 (current)
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
## Best Practices
|
|
369
|
-
|
|
370
|
-
1. **Version from day one** - Start with /v1, not /api
|
|
371
|
-
2. **Major versions only** - Use v1, v2, v3 (not v1.1, v1.2)
|
|
372
|
-
3. **Long deprecation periods** - Give clients time to migrate (6-12 months)
|
|
373
|
-
4. **Clear communication** - Use headers, docs, emails
|
|
374
|
-
5. **Maintain old versions** - Support at least 2 versions simultaneously
|
|
375
|
-
6. **Document changes** - Provide detailed migration guides
|
|
376
|
-
7. **Use semantic versioning** - For internal/SDK versioning
|
|
377
|
-
8. **Never break without warning** - Always announce breaking changes
|
|
378
|
-
9. **Provide tools** - Migration scripts, updated SDKs
|
|
379
|
-
10. **Monitor usage** - Track which versions are being used
|
|
380
|
-
|
|
381
|
-
## Anti-Patterns
|
|
382
|
-
|
|
383
|
-
Avoid these mistakes:
|
|
384
|
-
|
|
385
|
-
- **Breaking changes without version bump** - Breaks existing clients
|
|
386
|
-
- **Too many versions** - Maintenance nightmare (max 2-3 active versions)
|
|
387
|
-
- **Short deprecation periods** - Frustrates developers
|
|
388
|
-
- **No migration path** - Makes upgrades painful
|
|
389
|
-
- **Surprise sunsets** - Breaks production apps without warning
|
|
390
|
-
- **Inconsistent versioning** - Different strategies for different endpoints
|
|
391
|
-
- **Versioning individual endpoints** - Use consistent version across API
|
|
1
|
+
# API Versioning Strategies
|
|
2
|
+
|
|
3
|
+
## Why Version APIs?
|
|
4
|
+
|
|
5
|
+
API versioning allows you to evolve your API while maintaining backward compatibility for existing clients. Breaking changes require a new version.
|
|
6
|
+
|
|
7
|
+
### Breaking Changes
|
|
8
|
+
|
|
9
|
+
Changes that require a new version:
|
|
10
|
+
- Removing or renaming fields
|
|
11
|
+
- Changing field types (string to integer)
|
|
12
|
+
- Adding required fields to requests
|
|
13
|
+
- Changing response structure
|
|
14
|
+
- Removing endpoints
|
|
15
|
+
- Changing HTTP status codes for same scenario
|
|
16
|
+
- Changing authentication mechanisms
|
|
17
|
+
|
|
18
|
+
### Non-Breaking Changes
|
|
19
|
+
|
|
20
|
+
Safe changes that don't require a new version:
|
|
21
|
+
- Adding new endpoints
|
|
22
|
+
- Adding optional request fields
|
|
23
|
+
- Adding new fields to responses (clients should ignore unknown fields)
|
|
24
|
+
- Fixing bugs
|
|
25
|
+
- Performance improvements
|
|
26
|
+
- Adding new HTTP methods to existing resources
|
|
27
|
+
|
|
28
|
+
## Versioning Strategies
|
|
29
|
+
|
|
30
|
+
### 1. URI Versioning
|
|
31
|
+
|
|
32
|
+
Most common and visible approach. Version is part of the URL path.
|
|
33
|
+
|
|
34
|
+
```http
|
|
35
|
+
GET /v1/users/123
|
|
36
|
+
GET /v2/users/123
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Advantages:**
|
|
40
|
+
- Clear and visible in URLs
|
|
41
|
+
- Easy to understand and implement
|
|
42
|
+
- Simple routing and caching
|
|
43
|
+
- Can run multiple versions simultaneously
|
|
44
|
+
|
|
45
|
+
**Disadvantages:**
|
|
46
|
+
- Violates REST principle (same resource, different URIs)
|
|
47
|
+
- Requires updating client code to change version
|
|
48
|
+
- Can lead to URI proliferation
|
|
49
|
+
|
|
50
|
+
**Implementation:**
|
|
51
|
+
```
|
|
52
|
+
/v1/users
|
|
53
|
+
/v1/products
|
|
54
|
+
/v2/users # New version with breaking changes
|
|
55
|
+
/v2/products
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 2. Header Versioning
|
|
59
|
+
|
|
60
|
+
Version specified in HTTP headers (Accept header or custom header).
|
|
61
|
+
|
|
62
|
+
**Accept Header:**
|
|
63
|
+
```http
|
|
64
|
+
GET /users/123
|
|
65
|
+
Accept: application/vnd.myapi.v1+json
|
|
66
|
+
|
|
67
|
+
GET /users/123
|
|
68
|
+
Accept: application/vnd.myapi.v2+json
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Custom Header:**
|
|
72
|
+
```http
|
|
73
|
+
GET /users/123
|
|
74
|
+
API-Version: 1
|
|
75
|
+
|
|
76
|
+
GET /users/123
|
|
77
|
+
API-Version: 2
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Advantages:**
|
|
81
|
+
- URIs remain stable
|
|
82
|
+
- More RESTful (same resource, same URI)
|
|
83
|
+
- Separates versioning from resource identification
|
|
84
|
+
|
|
85
|
+
**Disadvantages:**
|
|
86
|
+
- Less visible (harder to debug)
|
|
87
|
+
- More complex routing
|
|
88
|
+
- Difficult to test in browser
|
|
89
|
+
- Cache complexity
|
|
90
|
+
|
|
91
|
+
### 3. Query Parameter Versioning
|
|
92
|
+
|
|
93
|
+
Version specified as query parameter.
|
|
94
|
+
|
|
95
|
+
```http
|
|
96
|
+
GET /users/123?version=1
|
|
97
|
+
GET /users/123?version=2
|
|
98
|
+
|
|
99
|
+
# or
|
|
100
|
+
GET /users/123?api-version=1
|
|
101
|
+
GET /users/123?api-version=2
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Advantages:**
|
|
105
|
+
- Simple to implement
|
|
106
|
+
- Easy to test
|
|
107
|
+
- Visible in URLs
|
|
108
|
+
|
|
109
|
+
**Disadvantages:**
|
|
110
|
+
- Pollutes query string
|
|
111
|
+
- Not semantic (version not a filter)
|
|
112
|
+
- Can interfere with other query params
|
|
113
|
+
|
|
114
|
+
### 4. Content Negotiation
|
|
115
|
+
|
|
116
|
+
Client specifies desired version through content negotiation.
|
|
117
|
+
|
|
118
|
+
```http
|
|
119
|
+
GET /users/123
|
|
120
|
+
Accept: application/vnd.myapi+json; version=1
|
|
121
|
+
|
|
122
|
+
GET /users/123
|
|
123
|
+
Accept: application/vnd.myapi+json; version=2
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Advantages:**
|
|
127
|
+
- Very RESTful
|
|
128
|
+
- Flexible content type negotiation
|
|
129
|
+
- Stable URIs
|
|
130
|
+
|
|
131
|
+
**Disadvantages:**
|
|
132
|
+
- Complex implementation
|
|
133
|
+
- Less intuitive for developers
|
|
134
|
+
- Harder to test
|
|
135
|
+
|
|
136
|
+
## Recommended Approach
|
|
137
|
+
|
|
138
|
+
**URI versioning is recommended for most APIs** because:
|
|
139
|
+
- It's the most explicit and discoverable
|
|
140
|
+
- Easy to understand and debug
|
|
141
|
+
- Simple to implement and maintain
|
|
142
|
+
- Clear separation between versions
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
/v1/users
|
|
146
|
+
/v2/users
|
|
147
|
+
/v3/users
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Version Format
|
|
151
|
+
|
|
152
|
+
### Major Versions Only
|
|
153
|
+
|
|
154
|
+
Use simple major versions (v1, v2, v3) for public APIs:
|
|
155
|
+
```
|
|
156
|
+
/v1/users
|
|
157
|
+
/v2/users
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Advantages:**
|
|
161
|
+
- Simple and clear
|
|
162
|
+
- Easy to communicate
|
|
163
|
+
- Forces thoughtful breaking changes
|
|
164
|
+
|
|
165
|
+
### Date-Based Versions
|
|
166
|
+
|
|
167
|
+
Some APIs use dates for versions:
|
|
168
|
+
```
|
|
169
|
+
/2024-01-01/users
|
|
170
|
+
/2024-06-15/users
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Used by:** Stripe, GitHub API
|
|
174
|
+
|
|
175
|
+
**Advantages:**
|
|
176
|
+
- Clear when version was released
|
|
177
|
+
- Easy to understand timeline
|
|
178
|
+
- No confusion about major/minor
|
|
179
|
+
|
|
180
|
+
**Disadvantages:**
|
|
181
|
+
- Less intuitive for clients
|
|
182
|
+
- Harder to understand what changed
|
|
183
|
+
|
|
184
|
+
## Version Lifecycle
|
|
185
|
+
|
|
186
|
+
### 1. Introduction Phase
|
|
187
|
+
|
|
188
|
+
New version is released alongside existing version:
|
|
189
|
+
```
|
|
190
|
+
/v1/users # Still supported
|
|
191
|
+
/v2/users # New version available
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Announce new version:
|
|
195
|
+
- Blog post explaining changes
|
|
196
|
+
- Migration guide
|
|
197
|
+
- Breaking changes list
|
|
198
|
+
- Timeline for v1 deprecation
|
|
199
|
+
|
|
200
|
+
### 2. Deprecation Phase
|
|
201
|
+
|
|
202
|
+
Mark old version as deprecated but keep it running:
|
|
203
|
+
|
|
204
|
+
```http
|
|
205
|
+
GET /v1/users/123
|
|
206
|
+
|
|
207
|
+
Response:
|
|
208
|
+
Deprecation: true
|
|
209
|
+
Sunset: Wed, 15 Jan 2025 00:00:00 GMT
|
|
210
|
+
Link: </v2/users/123>; rel="successor-version"
|
|
211
|
+
|
|
212
|
+
{
|
|
213
|
+
"id": 123,
|
|
214
|
+
"name": "John Doe"
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**Deprecation Headers:**
|
|
219
|
+
- `Deprecation: true` - Indicates version is deprecated
|
|
220
|
+
- `Sunset: <date>` - When version will be removed (RFC 8594)
|
|
221
|
+
- `Link: <url>; rel="successor-version"` - Points to new version
|
|
222
|
+
|
|
223
|
+
### 3. Sunset Phase
|
|
224
|
+
|
|
225
|
+
Old version is shut down on announced date.
|
|
226
|
+
|
|
227
|
+
Return 410 Gone for deprecated endpoints:
|
|
228
|
+
```http
|
|
229
|
+
GET /v1/users/123
|
|
230
|
+
|
|
231
|
+
Response: 410 Gone
|
|
232
|
+
{
|
|
233
|
+
"error": {
|
|
234
|
+
"code": "VERSION_SUNSET",
|
|
235
|
+
"message": "API v1 was sunset on 2025-01-15. Please use v2.",
|
|
236
|
+
"documentation_url": "https://api.example.com/docs/migration-v1-to-v2"
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Deprecation Policy
|
|
242
|
+
|
|
243
|
+
### Recommended Timeline
|
|
244
|
+
|
|
245
|
+
1. **Announce deprecation** - At least 6 months before sunset
|
|
246
|
+
2. **Support period** - Run both versions for 6-12 months
|
|
247
|
+
3. **Sunset date** - Clear date communicated in advance
|
|
248
|
+
4. **Grace period** - 30 days of 410 Gone responses before complete shutdown
|
|
249
|
+
|
|
250
|
+
### Communication Channels
|
|
251
|
+
|
|
252
|
+
- API response headers
|
|
253
|
+
- Email to registered developers
|
|
254
|
+
- Blog posts and changelog
|
|
255
|
+
- Dashboard notifications
|
|
256
|
+
- Documentation updates
|
|
257
|
+
- Status page announcements
|
|
258
|
+
|
|
259
|
+
## Migration Strategy
|
|
260
|
+
|
|
261
|
+
### Provide Migration Guide
|
|
262
|
+
|
|
263
|
+
```markdown
|
|
264
|
+
# Migrating from v1 to v2
|
|
265
|
+
|
|
266
|
+
## Breaking Changes
|
|
267
|
+
|
|
268
|
+
### User Resource Changes
|
|
269
|
+
|
|
270
|
+
**v1:**
|
|
271
|
+
```json
|
|
272
|
+
{
|
|
273
|
+
"id": 123,
|
|
274
|
+
"name": "John Doe",
|
|
275
|
+
"email": "john@example.com"
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
**v2:**
|
|
280
|
+
```json
|
|
281
|
+
{
|
|
282
|
+
"id": 123,
|
|
283
|
+
"first_name": "John",
|
|
284
|
+
"last_name": "Doe",
|
|
285
|
+
"email": "john@example.com"
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
**Migration:**
|
|
290
|
+
- Split `name` field into `first_name` and `last_name`
|
|
291
|
+
- Update client code to use new fields
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Offer Tools
|
|
295
|
+
|
|
296
|
+
- Migration scripts
|
|
297
|
+
- SDK updates
|
|
298
|
+
- API diff viewer
|
|
299
|
+
- Compatibility layer (temporary)
|
|
300
|
+
|
|
301
|
+
## Version Discovery
|
|
302
|
+
|
|
303
|
+
### Root Endpoint
|
|
304
|
+
|
|
305
|
+
```http
|
|
306
|
+
GET /
|
|
307
|
+
|
|
308
|
+
Response:
|
|
309
|
+
{
|
|
310
|
+
"versions": {
|
|
311
|
+
"v1": {
|
|
312
|
+
"status": "deprecated",
|
|
313
|
+
"sunset_date": "2025-01-15",
|
|
314
|
+
"documentation_url": "https://api.example.com/docs/v1"
|
|
315
|
+
},
|
|
316
|
+
"v2": {
|
|
317
|
+
"status": "current",
|
|
318
|
+
"documentation_url": "https://api.example.com/docs/v2"
|
|
319
|
+
},
|
|
320
|
+
"v3": {
|
|
321
|
+
"status": "beta",
|
|
322
|
+
"documentation_url": "https://api.example.com/docs/v3"
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### Version Info Endpoint
|
|
329
|
+
|
|
330
|
+
```http
|
|
331
|
+
GET /v2/version
|
|
332
|
+
|
|
333
|
+
Response:
|
|
334
|
+
{
|
|
335
|
+
"version": "v2",
|
|
336
|
+
"released": "2024-01-15",
|
|
337
|
+
"status": "stable",
|
|
338
|
+
"sunset_date": null
|
|
339
|
+
}
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
## OpenAPI Versioning
|
|
343
|
+
|
|
344
|
+
### Separate Specs per Version
|
|
345
|
+
|
|
346
|
+
```
|
|
347
|
+
openapi-v1.yaml
|
|
348
|
+
openapi-v2.yaml
|
|
349
|
+
openapi-v3.yaml
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
Each spec is complete and independent.
|
|
353
|
+
|
|
354
|
+
### Single Spec with Servers
|
|
355
|
+
|
|
356
|
+
```yaml
|
|
357
|
+
openapi: 3.1.0
|
|
358
|
+
info:
|
|
359
|
+
title: My API
|
|
360
|
+
version: 2.0.0
|
|
361
|
+
servers:
|
|
362
|
+
- url: https://api.example.com/v1
|
|
363
|
+
description: Version 1 (deprecated)
|
|
364
|
+
- url: https://api.example.com/v2
|
|
365
|
+
description: Version 2 (current)
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
## Best Practices
|
|
369
|
+
|
|
370
|
+
1. **Version from day one** - Start with /v1, not /api
|
|
371
|
+
2. **Major versions only** - Use v1, v2, v3 (not v1.1, v1.2)
|
|
372
|
+
3. **Long deprecation periods** - Give clients time to migrate (6-12 months)
|
|
373
|
+
4. **Clear communication** - Use headers, docs, emails
|
|
374
|
+
5. **Maintain old versions** - Support at least 2 versions simultaneously
|
|
375
|
+
6. **Document changes** - Provide detailed migration guides
|
|
376
|
+
7. **Use semantic versioning** - For internal/SDK versioning
|
|
377
|
+
8. **Never break without warning** - Always announce breaking changes
|
|
378
|
+
9. **Provide tools** - Migration scripts, updated SDKs
|
|
379
|
+
10. **Monitor usage** - Track which versions are being used
|
|
380
|
+
|
|
381
|
+
## Anti-Patterns
|
|
382
|
+
|
|
383
|
+
Avoid these mistakes:
|
|
384
|
+
|
|
385
|
+
- **Breaking changes without version bump** - Breaks existing clients
|
|
386
|
+
- **Too many versions** - Maintenance nightmare (max 2-3 active versions)
|
|
387
|
+
- **Short deprecation periods** - Frustrates developers
|
|
388
|
+
- **No migration path** - Makes upgrades painful
|
|
389
|
+
- **Surprise sunsets** - Breaks production apps without warning
|
|
390
|
+
- **Inconsistent versioning** - Different strategies for different endpoints
|
|
391
|
+
- **Versioning individual endpoints** - Use consistent version across API
|