zuplo 6.67.32 → 6.68.0
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/README.md +9 -0
- package/docs/_index.md +44 -0
- package/docs/ai-gateway/apps.mdx +28 -0
- package/docs/ai-gateway/custom-providers.mdx +54 -0
- package/docs/ai-gateway/getting-started.mdx +224 -0
- package/docs/ai-gateway/guardrails.mdx +65 -0
- package/docs/ai-gateway/integrations/ai-sdk.mdx +109 -0
- package/docs/ai-gateway/integrations/claude-code.mdx +49 -0
- package/docs/ai-gateway/integrations/codex.mdx +78 -0
- package/docs/ai-gateway/integrations/goose.mdx +104 -0
- package/docs/ai-gateway/integrations/langchain.mdx +66 -0
- package/docs/ai-gateway/integrations/openai.mdx +99 -0
- package/docs/ai-gateway/introduction.mdx +85 -0
- package/docs/ai-gateway/managing-apps.mdx +46 -0
- package/docs/ai-gateway/managing-providers.mdx +66 -0
- package/docs/ai-gateway/managing-teams.mdx +63 -0
- package/docs/ai-gateway/policies/akamai-ai-firewall.mdx +125 -0
- package/docs/ai-gateway/policies/comet-opik-tracing.mdx +139 -0
- package/docs/ai-gateway/policies/galileo-tracing.mdx +147 -0
- package/docs/ai-gateway/providers.mdx +32 -0
- package/docs/ai-gateway/teams.mdx +38 -0
- package/docs/ai-gateway/universal-api.mdx +43 -0
- package/docs/ai-gateway/usage-limits.mdx +89 -0
- package/docs/api-management/introduction.md +127 -0
- package/docs/articles/accounts/audit-logs.mdx +227 -0
- package/docs/articles/accounts/billing.mdx +25 -0
- package/docs/articles/accounts/default-api-key.mdx +30 -0
- package/docs/articles/accounts/delete-account.mdx +36 -0
- package/docs/articles/accounts/enterprise-sso.mdx +116 -0
- package/docs/articles/accounts/managing-account-members.mdx +45 -0
- package/docs/articles/accounts/managing-project-members.mdx +37 -0
- package/docs/articles/accounts/members-and-roles.mdx +21 -0
- package/docs/articles/accounts/roles-and-permissions.mdx +115 -0
- package/docs/articles/accounts/zuplo-api-keys.mdx +94 -0
- package/docs/articles/add-api-to-backstage.mdx +216 -0
- package/docs/articles/advanced-path-matching.mdx +139 -0
- package/docs/articles/api-key-administration.mdx +47 -0
- package/docs/articles/api-key-api.mdx +220 -0
- package/docs/articles/api-key-authentication.mdx +195 -0
- package/docs/articles/api-key-buckets.mdx +61 -0
- package/docs/articles/api-key-end-users.mdx +52 -0
- package/docs/articles/api-key-leak-detection.mdx +75 -0
- package/docs/articles/api-key-management.mdx +100 -0
- package/docs/articles/api-key-react-component.mdx +90 -0
- package/docs/articles/api-key-service-limits.mdx +14 -0
- package/docs/articles/archiving-requests-to-storage.mdx +119 -0
- package/docs/articles/branch-based-deployments.mdx +184 -0
- package/docs/articles/bypass-policy-for-testing.mdx +117 -0
- package/docs/articles/check-ip-address.mdx +17 -0
- package/docs/articles/ci-cd-azure/basic-deployment.mdx +49 -0
- package/docs/articles/ci-cd-azure/deploy-and-test.mdx +47 -0
- package/docs/articles/ci-cd-azure/local-testing.mdx +59 -0
- package/docs/articles/ci-cd-azure/multi-stage-deployment.mdx +88 -0
- package/docs/articles/ci-cd-azure/pr-preview-environments.mdx +50 -0
- package/docs/articles/ci-cd-azure/tag-based-releases.mdx +37 -0
- package/docs/articles/ci-cd-bitbucket/basic-deployment.mdx +27 -0
- package/docs/articles/ci-cd-bitbucket/deploy-and-test.mdx +41 -0
- package/docs/articles/ci-cd-bitbucket/local-testing.mdx +34 -0
- package/docs/articles/ci-cd-bitbucket/multi-stage-deployment.mdx +52 -0
- package/docs/articles/ci-cd-bitbucket/pr-preview-environments.mdx +46 -0
- package/docs/articles/ci-cd-bitbucket/tag-based-releases.mdx +27 -0
- package/docs/articles/ci-cd-circleci/basic-deployment.mdx +34 -0
- package/docs/articles/ci-cd-circleci/deploy-and-test.mdx +44 -0
- package/docs/articles/ci-cd-circleci/local-testing.mdx +50 -0
- package/docs/articles/ci-cd-circleci/multi-stage-deployment.mdx +82 -0
- package/docs/articles/ci-cd-circleci/pr-preview-environments.mdx +47 -0
- package/docs/articles/ci-cd-circleci/tag-based-releases.mdx +38 -0
- package/docs/articles/ci-cd-github/basic-deployment.mdx +48 -0
- package/docs/articles/ci-cd-github/cleanup-on-branch-delete.mdx +123 -0
- package/docs/articles/ci-cd-github/deploy-and-test.mdx +82 -0
- package/docs/articles/ci-cd-github/local-testing.mdx +102 -0
- package/docs/articles/ci-cd-github/multi-stage-deployment.mdx +136 -0
- package/docs/articles/ci-cd-github/pr-preview-environments.mdx +106 -0
- package/docs/articles/ci-cd-github/tag-based-releases.mdx +99 -0
- package/docs/articles/ci-cd-gitlab/basic-deployment.mdx +28 -0
- package/docs/articles/ci-cd-gitlab/deploy-and-test.mdx +44 -0
- package/docs/articles/ci-cd-gitlab/local-testing.mdx +39 -0
- package/docs/articles/ci-cd-gitlab/mr-preview-environments.mdx +52 -0
- package/docs/articles/ci-cd-gitlab/multi-stage-deployment.mdx +64 -0
- package/docs/articles/ci-cd-gitlab/tag-based-releases.mdx +28 -0
- package/docs/articles/composite-policy-reference.mdx +284 -0
- package/docs/articles/configuring-auth0-for-mcp-auth.mdx +186 -0
- package/docs/articles/configuring-okta-for-mcp-auth.mdx +208 -0
- package/docs/articles/convert-urls-to-openapi.mdx +62 -0
- package/docs/articles/cors.mdx +447 -0
- package/docs/articles/custom-audit-log-policy.mdx +95 -0
- package/docs/articles/custom-ci-cd-azure.mdx +81 -0
- package/docs/articles/custom-ci-cd-bitbucket.mdx +80 -0
- package/docs/articles/custom-ci-cd-circleci.mdx +78 -0
- package/docs/articles/custom-ci-cd-github.mdx +99 -0
- package/docs/articles/custom-ci-cd-gitlab.mdx +79 -0
- package/docs/articles/custom-ci-cd.mdx +82 -0
- package/docs/articles/custom-code-patterns.md +418 -0
- package/docs/articles/custom-domains.mdx +258 -0
- package/docs/articles/custom-logging-example.mdx +139 -0
- package/docs/articles/ddos-protection.mdx +138 -0
- package/docs/articles/development-options.mdx +49 -0
- package/docs/articles/environment-variables.mdx +134 -0
- package/docs/articles/environments.mdx +143 -0
- package/docs/articles/fastly-zuplo-host-setup.mdx +41 -0
- package/docs/articles/github-deployment-testing.mdx +101 -0
- package/docs/articles/gke-with-upstream-auth-policy.mdx +192 -0
- package/docs/articles/graphql-security.mdx +180 -0
- package/docs/articles/handling-form-data.mdx +61 -0
- package/docs/articles/health-checks.mdx +109 -0
- package/docs/articles/hosting-options.mdx +70 -0
- package/docs/articles/lazy-load-configuration-into-cache.mdx +92 -0
- package/docs/articles/limits.mdx +98 -0
- package/docs/articles/local-development-debugging.mdx +44 -0
- package/docs/articles/local-development-env-variables.mdx +23 -0
- package/docs/articles/local-development-installing-packages.mdx +23 -0
- package/docs/articles/local-development-routes-designer.mdx +27 -0
- package/docs/articles/local-development-services.mdx +40 -0
- package/docs/articles/local-development-troubleshooting.mdx +56 -0
- package/docs/articles/local-development.mdx +81 -0
- package/docs/articles/log-plugin-aws-cloudwatch.mdx +83 -0
- package/docs/articles/log-plugin-datadog.mdx +84 -0
- package/docs/articles/log-plugin-dynatrace.mdx +75 -0
- package/docs/articles/log-plugin-gcp.mdx +75 -0
- package/docs/articles/log-plugin-loki.mdx +136 -0
- package/docs/articles/log-plugin-new-relic.mdx +84 -0
- package/docs/articles/log-plugin-splunk.mdx +104 -0
- package/docs/articles/log-plugin-sumo.mdx +73 -0
- package/docs/articles/log-plugin-vmware-log-insight.mdx +154 -0
- package/docs/articles/log-request-response-data.mdx +398 -0
- package/docs/articles/logging.mdx +115 -0
- package/docs/articles/manual-mcp-oauth-testing.mdx +193 -0
- package/docs/articles/mcp-quickstart.mdx +135 -0
- package/docs/articles/metrics-plugins.mdx +371 -0
- package/docs/articles/migrate-from-apigee.md +408 -0
- package/docs/articles/migrate-from-aws-api-gateway.md +248 -0
- package/docs/articles/migrate-from-azure-apim.md +292 -0
- package/docs/articles/migrate-from-kong.md +300 -0
- package/docs/articles/migration-overview.md +81 -0
- package/docs/articles/monetization/api-access.mdx +69 -0
- package/docs/articles/monetization/billing-models.md +520 -0
- package/docs/articles/monetization/developer-portal.md +167 -0
- package/docs/articles/monetization/features.mdx +98 -0
- package/docs/articles/monetization/index.mdx +113 -0
- package/docs/articles/monetization/meters.mdx +135 -0
- package/docs/articles/monetization/monetization-policy.md +314 -0
- package/docs/articles/monetization/plan-examples.mdx +366 -0
- package/docs/articles/monetization/plans.mdx +266 -0
- package/docs/articles/monetization/pricing-models.mdx +225 -0
- package/docs/articles/monetization/private-plans.md +154 -0
- package/docs/articles/monetization/quickstart.md +355 -0
- package/docs/articles/monetization/rate-cards.mdx +171 -0
- package/docs/articles/monetization/stripe-integration.md +195 -0
- package/docs/articles/monetization/subscription-lifecycle.md +298 -0
- package/docs/articles/monetization/tax-collection.md +166 -0
- package/docs/articles/monetization/troubleshooting.md +272 -0
- package/docs/articles/monetization-custom.mdx +71 -0
- package/docs/articles/monetization-integrations.mdx +104 -0
- package/docs/articles/monitoring-your-gateway.mdx +53 -0
- package/docs/articles/monorepo-deployment.mdx +350 -0
- package/docs/articles/multiple-auth-policies.mdx +81 -0
- package/docs/articles/non-standard-ports.mdx +30 -0
- package/docs/articles/oauth-authentication.mdx +54 -0
- package/docs/articles/openapi-server-urls.mdx +60 -0
- package/docs/articles/openapi.mdx +130 -0
- package/docs/articles/opentelemetry.mdx +250 -0
- package/docs/articles/per-user-rate-limits-using-db.mdx +112 -0
- package/docs/articles/performance-testing.mdx +304 -0
- package/docs/articles/plugin-akamai-api-security.mdx +76 -0
- package/docs/articles/plugin-azure-blob.mdx +73 -0
- package/docs/articles/plugin-azure-event-hubs.mdx +64 -0
- package/docs/articles/plugin-hydrolix-traffic-peak.mdx +147 -0
- package/docs/articles/policies.mdx +33 -0
- package/docs/articles/rename-or-move-project.mdx +39 -0
- package/docs/articles/rick-and-morty-api-developer-portal-example.mdx +23 -0
- package/docs/articles/routing.mdx +193 -0
- package/docs/articles/s3-signed-url-uploads.mdx +521 -0
- package/docs/articles/secure-tunnel.mdx +84 -0
- package/docs/articles/securing-backend-mtls.mdx +268 -0
- package/docs/articles/securing-your-backend.mdx +148 -0
- package/docs/articles/security.mdx +105 -0
- package/docs/articles/sharing-code-across-projects.mdx +412 -0
- package/docs/articles/source-control-setup-azure.mdx +13 -0
- package/docs/articles/source-control-setup-bitbucket.mdx +43 -0
- package/docs/articles/source-control-setup-github.mdx +172 -0
- package/docs/articles/source-control-setup-gitlab.mdx +12 -0
- package/docs/articles/source-control.mdx +80 -0
- package/docs/articles/step-1-setup-basic-gateway-local.mdx +136 -0
- package/docs/articles/step-1-setup-basic-gateway.mdx +118 -0
- package/docs/articles/step-2-add-rate-limiting-local.mdx +126 -0
- package/docs/articles/step-2-add-rate-limiting.mdx +82 -0
- package/docs/articles/step-3-add-api-key-auth-local.mdx +199 -0
- package/docs/articles/step-3-add-api-key-auth.mdx +166 -0
- package/docs/articles/step-4-deploying-to-the-edge.mdx +220 -0
- package/docs/articles/step-5-dynamic-rate-limiting.mdx +167 -0
- package/docs/articles/support.mdx +144 -0
- package/docs/articles/terraform.mdx +114 -0
- package/docs/articles/testing-graphql.mdx +34 -0
- package/docs/articles/testing.mdx +522 -0
- package/docs/articles/troubleshooting-slow-responses.mdx +301 -0
- package/docs/articles/troubleshooting.md +302 -0
- package/docs/articles/tsconfig.mdx +105 -0
- package/docs/articles/tunnel-setup.mdx +195 -0
- package/docs/articles/tunnel-troubleshooting.mdx +50 -0
- package/docs/articles/update-zup-in-github-action.mdx +110 -0
- package/docs/articles/use-openapi-extension-data.mdx +79 -0
- package/docs/articles/users/multifactor-authentication.mdx +64 -0
- package/docs/articles/users/profile.mdx +13 -0
- package/docs/articles/versioning-on-zuplo.mdx +89 -0
- package/docs/articles/waf-ddos-akamai.md +133 -0
- package/docs/articles/waf-ddos-aws-waf-shield.mdx +85 -0
- package/docs/articles/waf-ddos-fastly.mdx +251 -0
- package/docs/articles/waf-ddos.mdx +140 -0
- package/docs/articles/zuplo-waf.mdx +156 -0
- package/docs/ask.mdx +3 -0
- package/docs/cli/authentication.mdx +56 -0
- package/docs/cli/connectivity.mdx +38 -0
- package/docs/cli/create-zuplo-api.mdx +80 -0
- package/docs/cli/delete.mdx +79 -0
- package/docs/cli/deploy.mdx +156 -0
- package/docs/cli/deploy.partial.mdx +46 -0
- package/docs/cli/dev.mdx +115 -0
- package/docs/cli/docs.mdx +66 -0
- package/docs/cli/editor.mdx +50 -0
- package/docs/cli/global-options.mdx +19 -0
- package/docs/cli/init.mdx +74 -0
- package/docs/cli/link.mdx +74 -0
- package/docs/cli/list.mdx +55 -0
- package/docs/cli/mtls-certificate-create.mdx +94 -0
- package/docs/cli/mtls-certificate-delete.mdx +55 -0
- package/docs/cli/mtls-certificate-describe.mdx +55 -0
- package/docs/cli/mtls-certificate-disable.mdx +55 -0
- package/docs/cli/mtls-certificate-list.mdx +47 -0
- package/docs/cli/mtls-certificate-update.mdx +72 -0
- package/docs/cli/openapi-convert.mdx +111 -0
- package/docs/cli/openapi-merge.mdx +138 -0
- package/docs/cli/openapi-merge.partial.mdx +29 -0
- package/docs/cli/openapi-overlay.mdx +123 -0
- package/docs/cli/overview.mdx +78 -0
- package/docs/cli/project-create.mdx +43 -0
- package/docs/cli/source-migrate.mdx +18 -0
- package/docs/cli/source-upgrade.mdx +41 -0
- package/docs/cli/test.mdx +70 -0
- package/docs/cli/test.partial.mdx +7 -0
- package/docs/cli/tunnel-create.mdx +53 -0
- package/docs/cli/tunnel-create.partial.mdx +9 -0
- package/docs/cli/tunnel-delete.mdx +35 -0
- package/docs/cli/tunnel-delete.partial.mdx +9 -0
- package/docs/cli/tunnel-describe.mdx +45 -0
- package/docs/cli/tunnel-describe.partial.mdx +5 -0
- package/docs/cli/tunnel-list.mdx +35 -0
- package/docs/cli/tunnel-list.partial.mdx +9 -0
- package/docs/cli/tunnel-rate-token.partial.mdx +9 -0
- package/docs/cli/tunnel-rotate-token.mdx +39 -0
- package/docs/cli/tunnel-services-describe.mdx +45 -0
- package/docs/cli/tunnel-services-describe.partial.mdx +9 -0
- package/docs/cli/tunnel-services-update.mdx +48 -0
- package/docs/cli/variable-create.mdx +91 -0
- package/docs/cli/variable-create.partial.mdx +5 -0
- package/docs/cli/variable-update.mdx +75 -0
- package/docs/cli/variable-update.partial.mdx +5 -0
- package/docs/concepts/api-keys.md +146 -0
- package/docs/concepts/authentication.mdx +109 -0
- package/docs/concepts/how-zuplo-works.mdx +120 -0
- package/docs/concepts/project-structure.mdx +174 -0
- package/docs/concepts/rate-limiting.md +246 -0
- package/docs/concepts/request-lifecycle.mdx +56 -0
- package/docs/concepts/source-control-and-deployment.mdx +229 -0
- package/docs/conferences/conference-prize-terms.mdx +80 -0
- package/docs/dedicated/akamai/ai-powered-applications.mdx +223 -0
- package/docs/dedicated/akamai/architecture.mdx +280 -0
- package/docs/dedicated/akamai/caching.mdx +212 -0
- package/docs/dedicated/akamai/cdn.mdx +156 -0
- package/docs/dedicated/architecture.mdx +208 -0
- package/docs/dedicated/custom-domains.mdx +31 -0
- package/docs/dedicated/federated-gateways.mdx +80 -0
- package/docs/dedicated/networking.mdx +69 -0
- package/docs/dedicated/overview.mdx +80 -0
- package/docs/dedicated/source-control.mdx +63 -0
- package/docs/dev-portal/dev-portal-create-consumer-on-auth.mdx +134 -0
- package/docs/dev-portal/introduction.mdx +65 -0
- package/docs/dev-portal/local-development.mdx +72 -0
- package/docs/dev-portal/migration.mdx +526 -0
- package/docs/dev-portal/node-modules.mdx +45 -0
- package/docs/dev-portal/updating.mdx +28 -0
- package/docs/dev-portal/zudoku/components/alert.mdx +130 -0
- package/docs/dev-portal/zudoku/components/badge.mdx +70 -0
- package/docs/dev-portal/zudoku/components/button.mdx +132 -0
- package/docs/dev-portal/zudoku/components/callout.mdx +112 -0
- package/docs/dev-portal/zudoku/components/card.mdx +104 -0
- package/docs/dev-portal/zudoku/components/checkbox.mdx +72 -0
- package/docs/dev-portal/zudoku/components/client-only.mdx +79 -0
- package/docs/dev-portal/zudoku/components/code-tabs.mdx +179 -0
- package/docs/dev-portal/zudoku/components/dialog.mdx +167 -0
- package/docs/dev-portal/zudoku/components/head.mdx +199 -0
- package/docs/dev-portal/zudoku/components/icons.mdx +27 -0
- package/docs/dev-portal/zudoku/components/input.mdx +96 -0
- package/docs/dev-portal/zudoku/components/label.mdx +86 -0
- package/docs/dev-portal/zudoku/components/link.mdx +242 -0
- package/docs/dev-portal/zudoku/components/markdown.mdx +151 -0
- package/docs/dev-portal/zudoku/components/mermaid.mdx +81 -0
- package/docs/dev-portal/zudoku/components/playground.mdx +87 -0
- package/docs/dev-portal/zudoku/components/secret.mdx +78 -0
- package/docs/dev-portal/zudoku/components/select.mdx +176 -0
- package/docs/dev-portal/zudoku/components/shadcn.mdx +73 -0
- package/docs/dev-portal/zudoku/components/slider.mdx +108 -0
- package/docs/dev-portal/zudoku/components/slot.mdx +119 -0
- package/docs/dev-portal/zudoku/components/stepper.mdx +138 -0
- package/docs/dev-portal/zudoku/components/switch.mdx +96 -0
- package/docs/dev-portal/zudoku/components/syntax-highlight.mdx +602 -0
- package/docs/dev-portal/zudoku/components/textarea.mdx +78 -0
- package/docs/dev-portal/zudoku/components/tooltip.mdx +195 -0
- package/docs/dev-portal/zudoku/components/typography.mdx +61 -0
- package/docs/dev-portal/zudoku/configuration/ai-assistants.md +64 -0
- package/docs/dev-portal/zudoku/configuration/api-catalog.md +108 -0
- package/docs/dev-portal/zudoku/configuration/api-reference.md +397 -0
- package/docs/dev-portal/zudoku/configuration/authentication-auth0.md +173 -0
- package/docs/dev-portal/zudoku/configuration/authentication-azure-ad.md +238 -0
- package/docs/dev-portal/zudoku/configuration/authentication-clerk.md +110 -0
- package/docs/dev-portal/zudoku/configuration/authentication-firebase.md +61 -0
- package/docs/dev-portal/zudoku/configuration/authentication-pingfederate.md +136 -0
- package/docs/dev-portal/zudoku/configuration/authentication-supabase.md +225 -0
- package/docs/dev-portal/zudoku/configuration/authentication.md +199 -0
- package/docs/dev-portal/zudoku/configuration/build-configuration.mdx +147 -0
- package/docs/dev-portal/zudoku/configuration/docs.md +282 -0
- package/docs/dev-portal/zudoku/configuration/footer.mdx +214 -0
- package/docs/dev-portal/zudoku/configuration/llms.md +89 -0
- package/docs/dev-portal/zudoku/configuration/navigation.mdx +408 -0
- package/docs/dev-portal/zudoku/configuration/overview.md +380 -0
- package/docs/dev-portal/zudoku/configuration/protected-routes.md +149 -0
- package/docs/dev-portal/zudoku/configuration/search.md +169 -0
- package/docs/dev-portal/zudoku/configuration/sentry.mdx +44 -0
- package/docs/dev-portal/zudoku/configuration/site.md +124 -0
- package/docs/dev-portal/zudoku/configuration/slots.mdx +124 -0
- package/docs/dev-portal/zudoku/configuration/vite-config.md +18 -0
- package/docs/dev-portal/zudoku/custom-plugins.md +287 -0
- package/docs/dev-portal/zudoku/customization/colors-theme.mdx +275 -0
- package/docs/dev-portal/zudoku/customization/fonts.md +110 -0
- package/docs/dev-portal/zudoku/extending/events.md +124 -0
- package/docs/dev-portal/zudoku/guides/custom-pages.md +106 -0
- package/docs/dev-portal/zudoku/guides/environment-variables.md +99 -0
- package/docs/dev-portal/zudoku/guides/mermaid.mdx +70 -0
- package/docs/dev-portal/zudoku/guides/navigation-migration.md +87 -0
- package/docs/dev-portal/zudoku/guides/navigation-rules.mdx +197 -0
- package/docs/dev-portal/zudoku/guides/processors.mdx +234 -0
- package/docs/dev-portal/zudoku/guides/static-files.md +55 -0
- package/docs/dev-portal/zudoku/guides/transforming-examples.md +156 -0
- package/docs/dev-portal/zudoku/guides/using-multiple-apis.md +87 -0
- package/docs/dev-portal/zudoku/markdown/admonitions.md +128 -0
- package/docs/dev-portal/zudoku/markdown/code-blocks.md +196 -0
- package/docs/dev-portal/zudoku/markdown/frontmatter.md +172 -0
- package/docs/dev-portal/zudoku/markdown/mdx.md +68 -0
- package/docs/dev-portal/zudoku/markdown/overview.md +275 -0
- package/docs/dev-portal/zudoku/plugins.md +5 -0
- package/docs/dev-portal/zudoku/writing.mdx +72 -0
- package/docs/errors/bad-request.mdx +39 -0
- package/docs/errors/build-error.mdx +45 -0
- package/docs/errors/fatal-project-error.mdx +39 -0
- package/docs/errors/gateway-timeout.mdx +33 -0
- package/docs/errors/get-head-body-error.mdx +41 -0
- package/docs/errors/main-mod-error.mdx +40 -0
- package/docs/errors/no-project-set.mdx +41 -0
- package/docs/errors/not-found.mdx +43 -0
- package/docs/errors/rate-limit-exceeded.mdx +31 -0
- package/docs/errors/schema-validation-failed.mdx +51 -0
- package/docs/errors/system-configuration-error.mdx +44 -0
- package/docs/errors/unauthorized.mdx +50 -0
- package/docs/errors/unknown-error.mdx +42 -0
- package/docs/errors.mdx +14 -0
- package/docs/guides/canary-routing-for-employees.mdx +385 -0
- package/docs/guides/geolocation-backend-routing.mdx +404 -0
- package/docs/guides/modify-openapi-paths.mdx +371 -0
- package/docs/guides/openapi-overlays.mdx +492 -0
- package/docs/guides/overview.mdx +12 -0
- package/docs/guides/user-based-backend-routing.mdx +437 -0
- package/docs/handlers/aws-lambda.mdx +201 -0
- package/docs/handlers/custom-handler.mdx +112 -0
- package/docs/handlers/legacy-dev-portal-handler.mdx +135 -0
- package/docs/handlers/mcp-server.mdx +730 -0
- package/docs/handlers/openapi.mdx +78 -0
- package/docs/handlers/redirect.mdx +115 -0
- package/docs/handlers/system-handlers.mdx +41 -0
- package/docs/handlers/url-forward.mdx +204 -0
- package/docs/handlers/url-rewrite.mdx +224 -0
- package/docs/handlers/websocket-handler.mdx +154 -0
- package/docs/home.mdx +6 -0
- package/docs/managed-edge/overview.md +78 -0
- package/docs/mcp-server/configuration-migration-guide.mdx +344 -0
- package/docs/mcp-server/custom-tools.mdx +487 -0
- package/docs/mcp-server/graphql.mdx +241 -0
- package/docs/mcp-server/introduction.mdx +122 -0
- package/docs/mcp-server/openai-apps-sdk.mdx +160 -0
- package/docs/mcp-server/prompts.mdx +283 -0
- package/docs/mcp-server/resources.mdx +288 -0
- package/docs/mcp-server/testing.mdx +53 -0
- package/docs/mcp-server/tools.mdx +306 -0
- package/docs/policies/_index.md +92 -0
- package/docs/policies/ab-test-inbound/intro.md +8 -0
- package/docs/policies/ab-test-inbound/policy.ts +14 -0
- package/docs/policies/ab-test-inbound/schema.json +27 -0
- package/docs/policies/ab-test-outbound/intro.md +8 -0
- package/docs/policies/ab-test-outbound/policy.ts +26 -0
- package/docs/policies/ab-test-outbound/schema.json +27 -0
- package/docs/policies/acl-policy-inbound/intro.md +5 -0
- package/docs/policies/acl-policy-inbound/policy.ts +32 -0
- package/docs/policies/acl-policy-inbound/schema.json +52 -0
- package/docs/policies/akamai-ai-firewall/schema.json +98 -0
- package/docs/policies/amberflo-metering-inbound/doc.md +183 -0
- package/docs/policies/amberflo-metering-inbound/intro.md +20 -0
- package/docs/policies/amberflo-metering-inbound/schema.json +108 -0
- package/docs/policies/api-key-inbound/doc.md +77 -0
- package/docs/policies/api-key-inbound/intro.md +30 -0
- package/docs/policies/api-key-inbound/schema.json +84 -0
- package/docs/policies/archive-request-aws-s3-inbound/intro.md +4 -0
- package/docs/policies/archive-request-aws-s3-inbound/policy.ts +58 -0
- package/docs/policies/archive-request-aws-s3-inbound/schema.json +68 -0
- package/docs/policies/archive-request-azure-storage-inbound/doc.md +31 -0
- package/docs/policies/archive-request-azure-storage-inbound/intro.md +4 -0
- package/docs/policies/archive-request-azure-storage-inbound/policy.ts +54 -0
- package/docs/policies/archive-request-azure-storage-inbound/schema.json +53 -0
- package/docs/policies/archive-request-gcp-storage-inbound/doc.md +63 -0
- package/docs/policies/archive-request-gcp-storage-inbound/intro.md +4 -0
- package/docs/policies/archive-request-gcp-storage-inbound/policy.ts +68 -0
- package/docs/policies/archive-request-gcp-storage-inbound/schema.json +47 -0
- package/docs/policies/archive-response-aws-s3-outbound/intro.md +2 -0
- package/docs/policies/archive-response-aws-s3-outbound/policy.ts +59 -0
- package/docs/policies/archive-response-aws-s3-outbound/schema.json +68 -0
- package/docs/policies/archive-response-azure-storage-outbound/doc.md +31 -0
- package/docs/policies/archive-response-azure-storage-outbound/intro.md +3 -0
- package/docs/policies/archive-response-azure-storage-outbound/policy.ts +54 -0
- package/docs/policies/archive-response-azure-storage-outbound/schema.json +53 -0
- package/docs/policies/audit-log-inbound/doc.md +78 -0
- package/docs/policies/audit-log-inbound/intro.md +10 -0
- package/docs/policies/audit-log-inbound/schema.json +81 -0
- package/docs/policies/auth0-jwt-auth-inbound/doc.md +125 -0
- package/docs/policies/auth0-jwt-auth-inbound/intro.md +17 -0
- package/docs/policies/auth0-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/authzen-inbound/doc.md +24 -0
- package/docs/policies/authzen-inbound/intro.md +31 -0
- package/docs/policies/authzen-inbound/schema.json +126 -0
- package/docs/policies/axiomatics-authz-inbound/doc.md +144 -0
- package/docs/policies/axiomatics-authz-inbound/intro.md +11 -0
- package/docs/policies/axiomatics-authz-inbound/schema.json +161 -0
- package/docs/policies/basic-auth-inbound/intro.md +9 -0
- package/docs/policies/basic-auth-inbound/schema.json +99 -0
- package/docs/policies/bot-detection-inbound/intro.md +4 -0
- package/docs/policies/bot-detection-inbound/schema.json +56 -0
- package/docs/policies/brownout-inbound/doc.md +55 -0
- package/docs/policies/brownout-inbound/intro.md +12 -0
- package/docs/policies/brownout-inbound/schema.json +115 -0
- package/docs/policies/caching-inbound/doc.md +209 -0
- package/docs/policies/caching-inbound/intro.md +23 -0
- package/docs/policies/caching-inbound/schema.json +98 -0
- package/docs/policies/change-method-inbound/schema.json +56 -0
- package/docs/policies/clear-headers-inbound/schema.json +59 -0
- package/docs/policies/clear-headers-outbound/schema.json +59 -0
- package/docs/policies/clerk-jwt-auth-inbound/doc.md +85 -0
- package/docs/policies/clerk-jwt-auth-inbound/intro.md +4 -0
- package/docs/policies/clerk-jwt-auth-inbound/schema.json +68 -0
- package/docs/policies/cognito-jwt-auth-inbound/intro.md +7 -0
- package/docs/policies/cognito-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/comet-opik-tracing-inbound/schema.json +65 -0
- package/docs/policies/complex-rate-limit-inbound/doc.md +20 -0
- package/docs/policies/complex-rate-limit-inbound/intro.md +23 -0
- package/docs/policies/complex-rate-limit-inbound/schema.json +142 -0
- package/docs/policies/composite-inbound/doc.md +69 -0
- package/docs/policies/composite-inbound/intro.md +15 -0
- package/docs/policies/composite-inbound/schema.json +59 -0
- package/docs/policies/composite-outbound/intro.md +6 -0
- package/docs/policies/composite-outbound/schema.json +59 -0
- package/docs/policies/curity-phantom-token-inbound/doc.md +109 -0
- package/docs/policies/curity-phantom-token-inbound/intro.md +3 -0
- package/docs/policies/curity-phantom-token-inbound/schema.json +68 -0
- package/docs/policies/custom-code-inbound/doc.md +267 -0
- package/docs/policies/custom-code-inbound/intro.md +2 -0
- package/docs/policies/custom-code-inbound/schema.json +48 -0
- package/docs/policies/custom-code-outbound/doc.md +235 -0
- package/docs/policies/custom-code-outbound/intro.md +2 -0
- package/docs/policies/custom-code-outbound/schema.json +43 -0
- package/docs/policies/firebase-jwt-inbound/intro.md +6 -0
- package/docs/policies/firebase-jwt-inbound/schema.json +68 -0
- package/docs/policies/formdata-to-json-inbound/schema.json +60 -0
- package/docs/policies/galileo-tracing-inbound/schema.json +65 -0
- package/docs/policies/geo-filter-inbound/doc.md +33 -0
- package/docs/policies/geo-filter-inbound/schema.json +108 -0
- package/docs/policies/graphql-complexity-limit-inbound/doc.md +48 -0
- package/docs/policies/graphql-complexity-limit-inbound/intro.md +2 -0
- package/docs/policies/graphql-complexity-limit-inbound/schema.json +90 -0
- package/docs/policies/graphql-disable-introspection-inbound/doc.md +66 -0
- package/docs/policies/graphql-disable-introspection-inbound/intro.md +15 -0
- package/docs/policies/graphql-disable-introspection-inbound/schema.json +48 -0
- package/docs/policies/graphql-introspection-filter-outbound/doc.md +148 -0
- package/docs/policies/graphql-introspection-filter-outbound/schema.json +79 -0
- package/docs/policies/hmac-auth-inbound/doc.md +30 -0
- package/docs/policies/hmac-auth-inbound/intro.md +10 -0
- package/docs/policies/hmac-auth-inbound/policy.ts +70 -0
- package/docs/policies/hmac-auth-inbound/schema.json +53 -0
- package/docs/policies/http-deprecation-outbound/doc.md +73 -0
- package/docs/policies/http-deprecation-outbound/schema.json +83 -0
- package/docs/policies/ip-restriction-inbound/intro.md +8 -0
- package/docs/policies/ip-restriction-inbound/policy.ts +40 -0
- package/docs/policies/ip-restriction-inbound/schema.json +58 -0
- package/docs/policies/jwt-scopes-inbound/schema.json +59 -0
- package/docs/policies/ldap-auth-inbound/schema.json +56 -0
- package/docs/policies/mock-api-inbound/schema.json +72 -0
- package/docs/policies/moesif-inbound/doc.md +44 -0
- package/docs/policies/moesif-inbound/intro.md +6 -0
- package/docs/policies/moesif-inbound/schema.json +68 -0
- package/docs/policies/monetization-inbound/doc.md +87 -0
- package/docs/policies/monetization-inbound/intro.md +6 -0
- package/docs/policies/monetization-inbound/schema.json +102 -0
- package/docs/policies/mtls-auth-inbound/intro.md +6 -0
- package/docs/policies/mtls-auth-inbound/schema.json +68 -0
- package/docs/policies/okta-fga-authz-inbound/doc.md +181 -0
- package/docs/policies/okta-fga-authz-inbound/intro.md +20 -0
- package/docs/policies/okta-fga-authz-inbound/schema.json +104 -0
- package/docs/policies/okta-jwt-auth-inbound/intro.md +7 -0
- package/docs/policies/okta-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/open-id-jwt-auth-inbound/doc.md +58 -0
- package/docs/policies/open-id-jwt-auth-inbound/intro.md +30 -0
- package/docs/policies/open-id-jwt-auth-inbound/schema.json +128 -0
- package/docs/policies/openfga-authz-inbound/doc.md +207 -0
- package/docs/policies/openfga-authz-inbound/intro.md +17 -0
- package/docs/policies/openfga-authz-inbound/schema.json +191 -0
- package/docs/policies/openmeter-inbound/doc.md +163 -0
- package/docs/policies/openmeter-inbound/intro.md +18 -0
- package/docs/policies/openmeter-inbound/schema.json +183 -0
- package/docs/policies/prompt-injection-outbound/doc.md +106 -0
- package/docs/policies/prompt-injection-outbound/intro.md +4 -0
- package/docs/policies/prompt-injection-outbound/schema.json +74 -0
- package/docs/policies/propel-auth-jwt-inbound/doc.md +88 -0
- package/docs/policies/propel-auth-jwt-inbound/intro.md +4 -0
- package/docs/policies/propel-auth-jwt-inbound/schema.json +74 -0
- package/docs/policies/query-param-to-header-inbound/doc.md +70 -0
- package/docs/policies/query-param-to-header-inbound/intro.md +5 -0
- package/docs/policies/query-param-to-header-inbound/schema.json +74 -0
- package/docs/policies/quota-inbound/doc.md +235 -0
- package/docs/policies/quota-inbound/intro.md +7 -0
- package/docs/policies/quota-inbound/schema.json +133 -0
- package/docs/policies/rate-limit-inbound/doc.md +78 -0
- package/docs/policies/rate-limit-inbound/intro.md +30 -0
- package/docs/policies/rate-limit-inbound/schema.json +134 -0
- package/docs/policies/rbac-policy-inbound/intro.md +3 -0
- package/docs/policies/rbac-policy-inbound/policy.ts +42 -0
- package/docs/policies/rbac-policy-inbound/schema.json +52 -0
- package/docs/policies/readme-metrics-inbound/doc.md +1 -0
- package/docs/policies/readme-metrics-inbound/intro.md +3 -0
- package/docs/policies/readme-metrics-inbound/schema.json +84 -0
- package/docs/policies/remove-headers-inbound/schema.json +59 -0
- package/docs/policies/remove-headers-outbound/schema.json +59 -0
- package/docs/policies/remove-query-params-inbound/schema.json +59 -0
- package/docs/policies/replace-string-outbound/schema.json +69 -0
- package/docs/policies/request-size-limit-inbound/schema.json +60 -0
- package/docs/policies/request-validation-inbound/doc.md +72 -0
- package/docs/policies/request-validation-inbound/intro.md +24 -0
- package/docs/policies/request-validation-inbound/schema.json +98 -0
- package/docs/policies/require-origin-inbound/intro.md +12 -0
- package/docs/policies/require-origin-inbound/schema.json +65 -0
- package/docs/policies/secret-masking-outbound/doc.md +41 -0
- package/docs/policies/secret-masking-outbound/intro.md +13 -0
- package/docs/policies/secret-masking-outbound/schema.json +65 -0
- package/docs/policies/semantic-cache-inbound/doc.md +63 -0
- package/docs/policies/semantic-cache-inbound/intro.md +4 -0
- package/docs/policies/semantic-cache-inbound/schema.json +179 -0
- package/docs/policies/set-body-inbound/intro.md +7 -0
- package/docs/policies/set-body-inbound/schema.json +56 -0
- package/docs/policies/set-headers-inbound/doc.md +41 -0
- package/docs/policies/set-headers-inbound/intro.md +2 -0
- package/docs/policies/set-headers-inbound/schema.json +83 -0
- package/docs/policies/set-headers-outbound/schema.json +83 -0
- package/docs/policies/set-query-params-inbound/schema.json +83 -0
- package/docs/policies/set-status-outbound/schema.json +62 -0
- package/docs/policies/sleep-inbound/schema.json +56 -0
- package/docs/policies/stripe-webhook-verification-inbound/intro.md +2 -0
- package/docs/policies/stripe-webhook-verification-inbound/schema.json +60 -0
- package/docs/policies/supabase-jwt-auth-inbound/doc.md +29 -0
- package/docs/policies/supabase-jwt-auth-inbound/intro.md +12 -0
- package/docs/policies/supabase-jwt-auth-inbound/schema.json +86 -0
- package/docs/policies/transform-body-inbound/intro.md +8 -0
- package/docs/policies/transform-body-inbound/policy.ts +16 -0
- package/docs/policies/transform-body-inbound/schema.json +27 -0
- package/docs/policies/transform-body-outbound/intro.md +8 -0
- package/docs/policies/transform-body-outbound/policy.ts +19 -0
- package/docs/policies/transform-body-outbound/schema.json +27 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/doc.md +82 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/intro.md +20 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/schema.json +84 -0
- package/docs/policies/upstream-firebase-admin-auth-inbound/intro.md +10 -0
- package/docs/policies/upstream-firebase-admin-auth-inbound/schema.json +68 -0
- package/docs/policies/upstream-firebase-user-auth-inbound/intro.md +2 -0
- package/docs/policies/upstream-firebase-user-auth-inbound/schema.json +113 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/doc.md +139 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/intro.md +21 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/schema.json +96 -0
- package/docs/policies/upstream-gcp-jwt-inbound/intro.md +10 -0
- package/docs/policies/upstream-gcp-jwt-inbound/schema.json +62 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/doc.md +132 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/intro.md +25 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/schema.json +95 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/doc.md +213 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/intro.md +16 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/schema.json +101 -0
- package/docs/policies/validate-json-schema-inbound/doc.md +129 -0
- package/docs/policies/validate-json-schema-inbound/intro.md +7 -0
- package/docs/policies/validate-json-schema-inbound/schema.json +56 -0
- package/docs/policies/web-bot-auth-inbound/doc.md +104 -0
- package/docs/policies/web-bot-auth-inbound/intro.md +16 -0
- package/docs/policies/web-bot-auth-inbound/schema.json +76 -0
- package/docs/policies/xml-to-json-outbound/doc.md +71 -0
- package/docs/policies/xml-to-json-outbound/intro.md +4 -0
- package/docs/policies/xml-to-json-outbound/schema.json +117 -0
- package/docs/programmable-api/audit-log.mdx +74 -0
- package/docs/programmable-api/background-dispatcher.mdx +124 -0
- package/docs/programmable-api/background-loader.mdx +104 -0
- package/docs/programmable-api/cache.mdx +186 -0
- package/docs/programmable-api/compatibility-dates.mdx +201 -0
- package/docs/programmable-api/console-logging.mdx +48 -0
- package/docs/programmable-api/context-data.mdx +127 -0
- package/docs/programmable-api/custom-cors-policy.mdx +64 -0
- package/docs/programmable-api/environment.mdx +328 -0
- package/docs/programmable-api/hooks.mdx +569 -0
- package/docs/programmable-api/http-problems.mdx +385 -0
- package/docs/programmable-api/jwt-service-plugin.mdx +420 -0
- package/docs/programmable-api/logger.mdx +223 -0
- package/docs/programmable-api/memory-zone-read-through-cache.mdx +96 -0
- package/docs/programmable-api/node-modules.mdx +67 -0
- package/docs/programmable-api/not-found-handler.mdx +47 -0
- package/docs/programmable-api/oauth-protected-resource-plugin.mdx +46 -0
- package/docs/programmable-api/overview.mdx +213 -0
- package/docs/programmable-api/problem-response-formatter.mdx +183 -0
- package/docs/programmable-api/request-user.mdx +289 -0
- package/docs/programmable-api/reusing-code.mdx +26 -0
- package/docs/programmable-api/route-raw.mdx +55 -0
- package/docs/programmable-api/runtime-behaviors.mdx +25 -0
- package/docs/programmable-api/runtime-errors.mdx +246 -0
- package/docs/programmable-api/runtime-extensions.mdx +340 -0
- package/docs/programmable-api/safely-clone-a-request-or-response.mdx +57 -0
- package/docs/programmable-api/streaming-zone-cache.mdx +155 -0
- package/docs/programmable-api/web-crypto-apis.mdx +219 -0
- package/docs/programmable-api/web-standard-apis.mdx +109 -0
- package/docs/programmable-api/zone-cache.mdx +131 -0
- package/docs/programmable-api/zp-body-removed.mdx +32 -0
- package/docs/programmable-api/zuplo-context.mdx +414 -0
- package/docs/programmable-api/zuplo-id-token.mdx +90 -0
- package/docs/programmable-api/zuplo-json.mdx +91 -0
- package/docs/programmable-api/zuplo-request.mdx +200 -0
- package/docs/sample-apis.mdx +78 -0
- package/docs/self-hosted/overview.md +60 -0
- package/package.json +6 -5
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Migrate from Azure API Management to Zuplo
|
|
3
|
+
sidebar_label: Migrate from Azure APIM
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
This guide walks through migrating from Azure API Management (APIM) to Zuplo. It
|
|
7
|
+
covers the key differences, concept mapping, policy translation, and a
|
|
8
|
+
step-by-step migration process.
|
|
9
|
+
|
|
10
|
+
## Why teams migrate from Azure APIM
|
|
11
|
+
|
|
12
|
+
Azure API Management is a natural choice for organizations running on Microsoft
|
|
13
|
+
Azure. However, teams frequently encounter friction points that prompt them to
|
|
14
|
+
evaluate alternatives:
|
|
15
|
+
|
|
16
|
+
- **Slow deployments** — Azure APIM deployments can take 15-45 minutes to
|
|
17
|
+
propagate, creating long feedback loops during development. Creating a new
|
|
18
|
+
APIM instance can take 30-60 minutes.
|
|
19
|
+
- **Expensive per-environment pricing** — Each APIM instance (dev, staging,
|
|
20
|
+
production) is billed separately. The Developer tier starts at ~$50/month, but
|
|
21
|
+
the Standard tier needed for production starts at ~$700/month per instance.
|
|
22
|
+
- **Poor GitOps support** — Azure APIM uses ARM templates, Bicep, or Terraform
|
|
23
|
+
for infrastructure-as-code, but the policy definitions are embedded XML that
|
|
24
|
+
does not merge well in version control.
|
|
25
|
+
- **XML policy complexity** — Like Apigee, Azure APIM policies are written in
|
|
26
|
+
XML with C# expressions. The syntax is verbose and error-prone, especially for
|
|
27
|
+
complex transformations.
|
|
28
|
+
- **Azure lock-in** — APIM is tightly integrated with the Azure ecosystem. Using
|
|
29
|
+
it with non-Azure backends or multi-cloud architectures adds friction.
|
|
30
|
+
- **Limited developer portal customization** — The built-in developer portal has
|
|
31
|
+
improved over time but still requires significant effort to customize and
|
|
32
|
+
lacks features like self-serve API key management with built-in billing.
|
|
33
|
+
|
|
34
|
+
:::tip
|
|
35
|
+
|
|
36
|
+
[Imburse Payments](https://zuplo.com/blog/imburse-choose-zuplo-over-azure-api-management),
|
|
37
|
+
a UK fintech, chose Zuplo over Azure API Management to optimize the API
|
|
38
|
+
experience for their customers and improve their engineering team's workflow.
|
|
39
|
+
|
|
40
|
+
:::
|
|
41
|
+
|
|
42
|
+
## Concept mapping: Azure APIM to Zuplo
|
|
43
|
+
|
|
44
|
+
| Azure APIM concept | Zuplo equivalent |
|
|
45
|
+
| ----------------------- | ------------------------------------------------------------------------ |
|
|
46
|
+
| API | Routes in your [OpenAPI spec](./openapi.md) |
|
|
47
|
+
| Operation | Route (path + method) in OpenAPI spec |
|
|
48
|
+
| Backend | [URL Forward handler](../handlers/url-forward.md) target |
|
|
49
|
+
| Inbound policy (XML) | [Inbound policy](./policies.md) (TypeScript) |
|
|
50
|
+
| Outbound policy (XML) | [Outbound policy](./policies.md) (TypeScript) |
|
|
51
|
+
| Named value | [Environment variable](./environment-variables.md) |
|
|
52
|
+
| Subscription key | [API Key Authentication](../policies/api-key-inbound.md) |
|
|
53
|
+
| Product | API key with [metadata](./api-key-management.md) |
|
|
54
|
+
| Service (APIM instance) | [Environment](./environments.md) |
|
|
55
|
+
| Developer portal | [Zuplo Developer Portal](../dev-portal/introduction.md) |
|
|
56
|
+
| Application Insights | [Logging integrations](./logging.md) (Datadog, Splunk, etc.) |
|
|
57
|
+
| API revision | Git branch with [branch-based deployment](./branch-based-deployments.md) |
|
|
58
|
+
| Gateway (self-hosted) | [Self-hosted Zuplo](../self-hosted/overview.md) |
|
|
59
|
+
|
|
60
|
+
## Step-by-step migration
|
|
61
|
+
|
|
62
|
+
### Step 1: Export your API definition
|
|
63
|
+
|
|
64
|
+
Azure APIM stores API definitions as OpenAPI specs. Export them:
|
|
65
|
+
|
|
66
|
+
**Using the Azure Portal:**
|
|
67
|
+
|
|
68
|
+
1. Navigate to your APIM instance.
|
|
69
|
+
2. Select **APIs** from the sidebar.
|
|
70
|
+
3. Select the API you want to export.
|
|
71
|
+
4. Click the **...** menu and select **Export**.
|
|
72
|
+
5. Choose **OpenAPI v3 (JSON)**.
|
|
73
|
+
|
|
74
|
+
**Using the Azure CLI:**
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
az apim api export \
|
|
78
|
+
--resource-group myResourceGroup \
|
|
79
|
+
--service-name myApimService \
|
|
80
|
+
--api-id my-api \
|
|
81
|
+
--export-format openapi-link
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Step 2: Map Azure APIM policies to Zuplo policies
|
|
85
|
+
|
|
86
|
+
The following table maps common Azure APIM policies to Zuplo equivalents:
|
|
87
|
+
|
|
88
|
+
| Azure APIM policy | Zuplo policy |
|
|
89
|
+
| ---------------------------------- | ------------------------------------------------------------------------- |
|
|
90
|
+
| `check-header` | [Custom Code Policy](../policies/custom-code-inbound.md) checking headers |
|
|
91
|
+
| `set-header` | [Set Headers](../policies/set-headers-inbound.md) |
|
|
92
|
+
| `remove-header` | [Remove Headers](../policies/remove-headers-inbound.md) |
|
|
93
|
+
| `set-body` | [Set Body](../policies/set-body-inbound.md) |
|
|
94
|
+
| `set-query-parameter` | [Set Query Params](../policies/set-query-params-inbound.md) |
|
|
95
|
+
| `rewrite-uri` | [URL Rewrite handler](../handlers/url-rewrite.md) |
|
|
96
|
+
| `rate-limit` / `rate-limit-by-key` | [Rate Limiting](../policies/rate-limit-inbound.md) |
|
|
97
|
+
| `quota` / `quota-by-key` | [Quota](../policies/quota-inbound.md) |
|
|
98
|
+
| `validate-jwt` | [Open ID JWT Authentication](../policies/open-id-jwt-auth-inbound.md) |
|
|
99
|
+
| `authentication-basic` | [Basic Authentication](../policies/basic-auth-inbound.md) |
|
|
100
|
+
| `ip-filter` | [IP Restriction](../policies/ip-restriction-inbound.md) |
|
|
101
|
+
| `cors` | Built-in [CORS configuration](../programmable-api/custom-cors-policy.md) |
|
|
102
|
+
| `json-to-xml` / `xml-to-json` | [XML to JSON](../policies/xml-to-json-outbound.md) or custom code |
|
|
103
|
+
| `find-and-replace` | [Replace String](../policies/replace-string-outbound.md) |
|
|
104
|
+
| `cache-lookup` / `cache-store` | [Caching](../policies/caching-inbound.md) |
|
|
105
|
+
| `mock-response` | [Mock API](../policies/mock-api-inbound.md) |
|
|
106
|
+
| Custom C# expression | [Custom Code Policy](../policies/custom-code-inbound.md) (TypeScript) |
|
|
107
|
+
|
|
108
|
+
### Step 3: Translate policy configuration
|
|
109
|
+
|
|
110
|
+
Here is an example of translating an Azure APIM rate limit policy to a Zuplo
|
|
111
|
+
rate limit policy.
|
|
112
|
+
|
|
113
|
+
**Azure APIM XML policy:**
|
|
114
|
+
|
|
115
|
+
```xml
|
|
116
|
+
<policies>
|
|
117
|
+
<inbound>
|
|
118
|
+
<rate-limit-by-key
|
|
119
|
+
calls="100"
|
|
120
|
+
renewal-period="60"
|
|
121
|
+
counter-key="@(context.Subscription.Id)" />
|
|
122
|
+
<set-header name="X-Request-Id" exists-action="skip">
|
|
123
|
+
<value>@(Guid.NewGuid().ToString())</value>
|
|
124
|
+
</set-header>
|
|
125
|
+
</inbound>
|
|
126
|
+
</policies>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Zuplo policy configuration:**
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"policies": {
|
|
134
|
+
"inbound": [
|
|
135
|
+
{
|
|
136
|
+
"name": "rate-limit-inbound",
|
|
137
|
+
"policyType": "rate-limit-inbound",
|
|
138
|
+
"handler": {
|
|
139
|
+
"export": "RateLimitInboundPolicy",
|
|
140
|
+
"module": "$import(@zuplo/runtime)",
|
|
141
|
+
"options": {
|
|
142
|
+
"rateLimitBy": "user",
|
|
143
|
+
"requestsAllowed": 100,
|
|
144
|
+
"timeWindowMinutes": 1
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"name": "set-request-id",
|
|
150
|
+
"policyType": "set-headers-inbound",
|
|
151
|
+
"handler": {
|
|
152
|
+
"export": "SetHeadersInboundPolicy",
|
|
153
|
+
"module": "$import(@zuplo/runtime)",
|
|
154
|
+
"options": {
|
|
155
|
+
"headers": [
|
|
156
|
+
{
|
|
157
|
+
"name": "X-Request-Id",
|
|
158
|
+
"value": "$function(generateId)",
|
|
159
|
+
"overwrite": false
|
|
160
|
+
}
|
|
161
|
+
]
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
]
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Step 4: Translate C# policy expressions to TypeScript
|
|
171
|
+
|
|
172
|
+
Azure APIM allows inline C# expressions in XML policies. Translate these to
|
|
173
|
+
TypeScript custom code policies.
|
|
174
|
+
|
|
175
|
+
**Azure APIM C# expression:**
|
|
176
|
+
|
|
177
|
+
```xml
|
|
178
|
+
<policies>
|
|
179
|
+
<inbound>
|
|
180
|
+
<set-header name="X-Forwarded-For" exists-action="override">
|
|
181
|
+
<value>@(context.Request.IpAddress)</value>
|
|
182
|
+
</set-header>
|
|
183
|
+
<choose>
|
|
184
|
+
<when condition="@(context.Request.Headers
|
|
185
|
+
.GetValueOrDefault("Authorization","")
|
|
186
|
+
.Length == 0)">
|
|
187
|
+
<return-response>
|
|
188
|
+
<set-status code="401" reason="Unauthorized" />
|
|
189
|
+
<set-body>{"error": "Missing authorization"}</set-body>
|
|
190
|
+
</return-response>
|
|
191
|
+
</when>
|
|
192
|
+
</choose>
|
|
193
|
+
</inbound>
|
|
194
|
+
</policies>
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Equivalent Zuplo TypeScript policy:**
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
import { ZuploContext, ZuploRequest, HttpProblems } from "@zuplo/runtime";
|
|
201
|
+
|
|
202
|
+
export default async function (
|
|
203
|
+
request: ZuploRequest,
|
|
204
|
+
context: ZuploContext,
|
|
205
|
+
options: never,
|
|
206
|
+
policyName: string,
|
|
207
|
+
) {
|
|
208
|
+
const authHeader = request.headers.get("authorization");
|
|
209
|
+
|
|
210
|
+
if (!authHeader) {
|
|
211
|
+
return HttpProblems.unauthorized(request, context, {
|
|
212
|
+
detail: "Missing authorization",
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Forward the client IP
|
|
217
|
+
const headers = new Headers(request.headers);
|
|
218
|
+
headers.set("X-Forwarded-For", request.headers.get("x-real-ip") ?? "");
|
|
219
|
+
|
|
220
|
+
return new ZuploRequest(request, { headers });
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Step 5: Migrate subscription keys to Zuplo API keys
|
|
225
|
+
|
|
226
|
+
Azure APIM uses subscription keys tied to products. Migrate to Zuplo's API key
|
|
227
|
+
system:
|
|
228
|
+
|
|
229
|
+
| Azure APIM subscription feature | Zuplo equivalent |
|
|
230
|
+
| ------------------------------- | ----------------------------------------------------------- |
|
|
231
|
+
| Subscription key | [API key](./api-key-management.md) |
|
|
232
|
+
| Product grouping | API key metadata for access control |
|
|
233
|
+
| Subscription approval | API key creation via Portal or API |
|
|
234
|
+
| Key regeneration | Key rotation in the Zuplo Portal or Developer Portal |
|
|
235
|
+
| Usage reporting | Built-in analytics and [logging](./logging.md) integrations |
|
|
236
|
+
|
|
237
|
+
### Step 6: Migrate named values to environment variables
|
|
238
|
+
|
|
239
|
+
Azure APIM named values become Zuplo
|
|
240
|
+
[environment variables](./environment-variables.md):
|
|
241
|
+
|
|
242
|
+
| Azure APIM named value type | Zuplo equivalent |
|
|
243
|
+
| --------------------------- | --------------------------- |
|
|
244
|
+
| Plain value | Environment variable |
|
|
245
|
+
| Secret value | Secret environment variable |
|
|
246
|
+
| Key Vault reference | Secret environment variable |
|
|
247
|
+
|
|
248
|
+
Access environment variables in route configuration using `$env(VARIABLE_NAME)`
|
|
249
|
+
or in custom code using `context.env.VARIABLE_NAME`.
|
|
250
|
+
|
|
251
|
+
### Step 7: Deploy and migrate traffic
|
|
252
|
+
|
|
253
|
+
1. Deploy your Zuplo project by pushing to your connected Git repository.
|
|
254
|
+
2. Set up a [custom domain](./custom-domains.md) for Zuplo.
|
|
255
|
+
3. Route a subset of traffic to Zuplo using Azure Front Door, Traffic Manager,
|
|
256
|
+
or DNS-based routing.
|
|
257
|
+
4. Validate behavior matches your Azure APIM configuration.
|
|
258
|
+
5. Gradually shift all traffic to Zuplo.
|
|
259
|
+
6. Decommission your Azure APIM instances.
|
|
260
|
+
|
|
261
|
+
## Keeping Azure backends with Zuplo
|
|
262
|
+
|
|
263
|
+
You do not need to migrate your backend infrastructure. Zuplo works with any
|
|
264
|
+
HTTP backend, including:
|
|
265
|
+
|
|
266
|
+
- Azure App Service
|
|
267
|
+
- Azure Functions
|
|
268
|
+
- Azure Kubernetes Service (AKS)
|
|
269
|
+
- Azure Container Apps
|
|
270
|
+
- Any Azure service with an HTTP endpoint
|
|
271
|
+
|
|
272
|
+
Use [backend security](./securing-your-backend.md) options to secure the
|
|
273
|
+
connection between Zuplo and your Azure backends.
|
|
274
|
+
|
|
275
|
+
## Deployment model comparison
|
|
276
|
+
|
|
277
|
+
| Feature | Azure APIM | Zuplo |
|
|
278
|
+
| --------------------- | ---------------------------------- | -------------------------------------------- |
|
|
279
|
+
| Deployment time | 15-45 minutes | Under 20 seconds |
|
|
280
|
+
| New instance creation | 30-60 minutes | Instant |
|
|
281
|
+
| Environment cost | ~$700/month per Standard instance | Free tier available; environments are free |
|
|
282
|
+
| Preview environments | Manual setup required | Automatic per Git branch |
|
|
283
|
+
| Global distribution | Premium tier + multi-region config | Built-in across 300+ edge locations |
|
|
284
|
+
| GitOps workflow | ARM/Bicep + XML policies | OpenAPI + TypeScript, native Git integration |
|
|
285
|
+
|
|
286
|
+
## Next steps
|
|
287
|
+
|
|
288
|
+
- [Set up your first Zuplo gateway](./step-1-setup-basic-gateway.md)
|
|
289
|
+
- [Add rate limiting](./step-2-add-rate-limiting.md)
|
|
290
|
+
- [Add API key authentication](./step-3-add-api-key-auth.md)
|
|
291
|
+
- [Configure your developer portal](../dev-portal/introduction.md)
|
|
292
|
+
- [Set up source control](./source-control.md)
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Migrate from Kong Gateway to Zuplo
|
|
3
|
+
sidebar_label: Migrate from Kong
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
This guide walks through migrating from Kong Gateway (Community Edition or
|
|
7
|
+
Enterprise) to Zuplo. Whether you're running Kong OSS on Kubernetes, Kong
|
|
8
|
+
Konnect, or a self-hosted Kong cluster, this guide covers the key differences,
|
|
9
|
+
concept mapping, and step-by-step migration process.
|
|
10
|
+
|
|
11
|
+
## Why teams migrate from Kong
|
|
12
|
+
|
|
13
|
+
Kong Gateway is a powerful, plugin-driven API gateway built on NGINX and Lua.
|
|
14
|
+
However, teams frequently encounter challenges that drive them to seek
|
|
15
|
+
alternatives:
|
|
16
|
+
|
|
17
|
+
- **Community Edition stagnation** — Kong's open-source Community Edition
|
|
18
|
+
receives fewer updates and lacks critical features like the developer portal,
|
|
19
|
+
RBAC, and advanced rate limiting that are reserved for Enterprise tiers.
|
|
20
|
+
- **Kubernetes complexity** — Running Kong in production requires managing
|
|
21
|
+
Postgres or Cassandra databases, configuring the Kong Ingress Controller, and
|
|
22
|
+
maintaining Kubernetes clusters across environments.
|
|
23
|
+
- **Lua plugin development** — Kong's plugin architecture requires Lua, a niche
|
|
24
|
+
language that few developers know. This limits who on your team can extend the
|
|
25
|
+
gateway and makes AI-assisted code generation less effective.
|
|
26
|
+
- **Cost escalation** — Kong Konnect pricing starts at ~$105/month per gateway
|
|
27
|
+
service plus ~$34/million API requests, with additional charges for analytics,
|
|
28
|
+
portals, and mesh management. Self-hosted Kong requires significant SRE
|
|
29
|
+
investment.
|
|
30
|
+
- **Global scaling challenges** — Scaling Kong globally requires deploying and
|
|
31
|
+
synchronizing clusters across regions manually, each with its own database and
|
|
32
|
+
configuration state.
|
|
33
|
+
|
|
34
|
+
:::tip
|
|
35
|
+
|
|
36
|
+
[Copilot Travel](https://zuplo.com/customers/copilot-travel) switched from Kong
|
|
37
|
+
to Zuplo after nine months, achieving over 50% faster API implementation and
|
|
38
|
+
reducing development time from months to days. Their team eliminated the need
|
|
39
|
+
for a dedicated DevOps engineer to maintain the API gateway.
|
|
40
|
+
|
|
41
|
+
:::
|
|
42
|
+
|
|
43
|
+
## Concept mapping: Kong to Zuplo
|
|
44
|
+
|
|
45
|
+
| Kong concept | Zuplo equivalent |
|
|
46
|
+
| -------------------------- | ----------------------------------------------------------------------- |
|
|
47
|
+
| Service | Backend URL configured in a [route handler](../handlers/url-forward.md) |
|
|
48
|
+
| Route | Route in your [OpenAPI spec](./openapi.md) |
|
|
49
|
+
| Plugin (Lua) | [Policy](./policies.md) (TypeScript) or built-in policy |
|
|
50
|
+
| Consumer | [API key consumer](./api-key-management.md) |
|
|
51
|
+
| Consumer group | API key metadata with custom rate limit logic |
|
|
52
|
+
| Upstream | [URL forward handler](../handlers/url-forward.md) target |
|
|
53
|
+
| Workspace (Enterprise) | [Environment](./environments.md) |
|
|
54
|
+
| Kong Manager / Konnect UI | [Zuplo Portal](./development-options.md) or local development with Git |
|
|
55
|
+
| DB-less declarative config | [OpenAPI route config](./openapi.md) in Git |
|
|
56
|
+
| Admin API | [Zuplo API](./accounts/zuplo-api-keys.md) or `git push` |
|
|
57
|
+
| Kong Dev Portal | [Zuplo Developer Portal](../dev-portal/introduction.md) |
|
|
58
|
+
|
|
59
|
+
## Step-by-step migration
|
|
60
|
+
|
|
61
|
+
### Step 1: Export your API definitions
|
|
62
|
+
|
|
63
|
+
If you have OpenAPI specs for your APIs, export them from Kong. If you're using
|
|
64
|
+
Kong's declarative configuration, convert your service and route definitions to
|
|
65
|
+
an OpenAPI spec.
|
|
66
|
+
|
|
67
|
+
**From Kong declarative config (deck):**
|
|
68
|
+
|
|
69
|
+
```yaml
|
|
70
|
+
# kong.yml - Your existing Kong config
|
|
71
|
+
services:
|
|
72
|
+
- name: my-api
|
|
73
|
+
url: http://backend-service:8080
|
|
74
|
+
routes:
|
|
75
|
+
- name: get-users
|
|
76
|
+
paths:
|
|
77
|
+
- /users
|
|
78
|
+
methods:
|
|
79
|
+
- GET
|
|
80
|
+
- name: create-user
|
|
81
|
+
paths:
|
|
82
|
+
- /users
|
|
83
|
+
methods:
|
|
84
|
+
- POST
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Equivalent OpenAPI spec for Zuplo:**
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"openapi": "3.1.0",
|
|
92
|
+
"info": {
|
|
93
|
+
"title": "My API",
|
|
94
|
+
"version": "1.0.0"
|
|
95
|
+
},
|
|
96
|
+
"paths": {
|
|
97
|
+
"/users": {
|
|
98
|
+
"get": {
|
|
99
|
+
"operationId": "get-users",
|
|
100
|
+
"summary": "Get users",
|
|
101
|
+
"x-zuplo-route": {
|
|
102
|
+
"corsPolicy": "none",
|
|
103
|
+
"handler": {
|
|
104
|
+
"export": "urlForwardHandler",
|
|
105
|
+
"module": "$import(@zuplo/runtime)",
|
|
106
|
+
"options": {
|
|
107
|
+
"baseUrl": "http://backend-service:8080"
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"policies": {
|
|
111
|
+
"inbound": []
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"post": {
|
|
116
|
+
"operationId": "create-user",
|
|
117
|
+
"summary": "Create user",
|
|
118
|
+
"x-zuplo-route": {
|
|
119
|
+
"corsPolicy": "none",
|
|
120
|
+
"handler": {
|
|
121
|
+
"export": "urlForwardHandler",
|
|
122
|
+
"module": "$import(@zuplo/runtime)",
|
|
123
|
+
"options": {
|
|
124
|
+
"baseUrl": "http://backend-service:8080"
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"policies": {
|
|
128
|
+
"inbound": []
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Step 2: Map Kong plugins to Zuplo policies
|
|
138
|
+
|
|
139
|
+
The following table maps common Kong plugins to their Zuplo policy equivalents:
|
|
140
|
+
|
|
141
|
+
| Kong plugin | Zuplo policy |
|
|
142
|
+
| ------------------------ | ------------------------------------------------------------------------ |
|
|
143
|
+
| `key-auth` | [API Key Authentication](../policies/api-key-inbound.md) |
|
|
144
|
+
| `jwt` | [Open ID JWT Authentication](../policies/open-id-jwt-auth-inbound.md) |
|
|
145
|
+
| `basic-auth` | [Basic Authentication](../policies/basic-auth-inbound.md) |
|
|
146
|
+
| `rate-limiting` | [Rate Limiting](../policies/rate-limit-inbound.md) |
|
|
147
|
+
| `rate-limiting-advanced` | [Complex Rate Limiting](../policies/complex-rate-limit-inbound.md) |
|
|
148
|
+
| `request-transformer` | [Transform Body](../policies/transform-body-inbound.md) |
|
|
149
|
+
| `response-transformer` | [Transform Body Outbound](../policies/transform-body-outbound.md) |
|
|
150
|
+
| `cors` | Built-in [CORS configuration](../programmable-api/custom-cors-policy.md) |
|
|
151
|
+
| `ip-restriction` | [IP Restriction](../policies/ip-restriction-inbound.md) |
|
|
152
|
+
| `request-size-limiting` | [Request Size Limit](../policies/request-size-limit-inbound.md) |
|
|
153
|
+
| `request-validation` | [Request Validation](../policies/request-validation-inbound.md) |
|
|
154
|
+
| `acl` | [ACL Policy](../policies/acl-policy-inbound.md) |
|
|
155
|
+
| Custom Lua plugin | [Custom Code Policy](../policies/custom-code-inbound.md) (TypeScript) |
|
|
156
|
+
|
|
157
|
+
### Step 3: Translate plugin configuration
|
|
158
|
+
|
|
159
|
+
Here is an example of translating a Kong rate limiting plugin to a Zuplo rate
|
|
160
|
+
limit policy.
|
|
161
|
+
|
|
162
|
+
**Kong plugin configuration:**
|
|
163
|
+
|
|
164
|
+
```yaml
|
|
165
|
+
plugins:
|
|
166
|
+
- name: rate-limiting
|
|
167
|
+
config:
|
|
168
|
+
minute: 100
|
|
169
|
+
policy: local
|
|
170
|
+
limit_by: consumer
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Zuplo policy configuration:**
|
|
174
|
+
|
|
175
|
+
```json
|
|
176
|
+
{
|
|
177
|
+
"name": "rate-limit-inbound",
|
|
178
|
+
"policyType": "rate-limit-inbound",
|
|
179
|
+
"handler": {
|
|
180
|
+
"export": "RateLimitInboundPolicy",
|
|
181
|
+
"module": "$import(@zuplo/runtime)",
|
|
182
|
+
"options": {
|
|
183
|
+
"rateLimitBy": "user",
|
|
184
|
+
"requestsAllowed": 100,
|
|
185
|
+
"timeWindowMinutes": 1
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
:::note
|
|
192
|
+
|
|
193
|
+
Zuplo's rate limiter is globally distributed across 300+ edge locations. Unlike
|
|
194
|
+
Kong, which enforces rate limits per-node or per-cluster (requiring Redis
|
|
195
|
+
synchronization), Zuplo enforces limits as a single global zone automatically.
|
|
196
|
+
|
|
197
|
+
:::
|
|
198
|
+
|
|
199
|
+
### Step 4: Migrate authentication
|
|
200
|
+
|
|
201
|
+
**Kong `key-auth` to Zuplo API Key Authentication:**
|
|
202
|
+
|
|
203
|
+
Kong uses consumers with key credentials stored in its database. In Zuplo, API
|
|
204
|
+
keys are managed through the built-in
|
|
205
|
+
[API key management system](./api-key-management.md), which includes a
|
|
206
|
+
self-serve developer portal for key creation and rotation.
|
|
207
|
+
|
|
208
|
+
1. Add the `api-key-inbound` policy to your routes.
|
|
209
|
+
2. Create API key consumers through the Zuplo Portal or API.
|
|
210
|
+
3. Optionally, enable the [Developer Portal](../dev-portal/introduction.md) for
|
|
211
|
+
self-serve key management.
|
|
212
|
+
|
|
213
|
+
**Kong `jwt` to Zuplo JWT Authentication:**
|
|
214
|
+
|
|
215
|
+
Replace Kong's JWT plugin with one of Zuplo's JWT authentication policies:
|
|
216
|
+
|
|
217
|
+
- [Auth0 JWT](../policies/auth0-jwt-auth-inbound.md)
|
|
218
|
+
- [AWS Cognito JWT](../policies/cognito-jwt-auth-inbound.md)
|
|
219
|
+
- [Firebase JWT](../policies/firebase-jwt-inbound.md)
|
|
220
|
+
- [Open ID JWT](../policies/open-id-jwt-auth-inbound.md) (generic OIDC)
|
|
221
|
+
|
|
222
|
+
### Step 5: Set up your project and deploy
|
|
223
|
+
|
|
224
|
+
1. Create a new project in the [Zuplo Portal](https://portal.zuplo.com/signup)
|
|
225
|
+
or using the [Zuplo CLI](../cli/overview.md).
|
|
226
|
+
2. Import your OpenAPI spec as the route configuration file.
|
|
227
|
+
3. Add policies to your routes.
|
|
228
|
+
4. Connect your project to [source control](./source-control.md).
|
|
229
|
+
5. Push to deploy — Zuplo deploys globally in under 20 seconds.
|
|
230
|
+
|
|
231
|
+
### Step 6: Migrate traffic
|
|
232
|
+
|
|
233
|
+
Run Zuplo alongside Kong during migration:
|
|
234
|
+
|
|
235
|
+
1. Point a subset of traffic to Zuplo using DNS or a load balancer.
|
|
236
|
+
2. Monitor both gateways for correctness and performance.
|
|
237
|
+
3. Gradually shift more traffic to Zuplo.
|
|
238
|
+
4. Decommission Kong once all traffic is migrated.
|
|
239
|
+
|
|
240
|
+
## Custom Lua plugins to TypeScript
|
|
241
|
+
|
|
242
|
+
If you have custom Kong plugins written in Lua, rewrite them as Zuplo
|
|
243
|
+
[custom code policies](../policies/custom-code-inbound.md) in TypeScript.
|
|
244
|
+
|
|
245
|
+
**Kong Lua plugin example:**
|
|
246
|
+
|
|
247
|
+
```lua
|
|
248
|
+
local MyPlugin = {}
|
|
249
|
+
|
|
250
|
+
function MyPlugin:access(conf)
|
|
251
|
+
local header_value = kong.request.get_header("x-custom-header")
|
|
252
|
+
if not header_value then
|
|
253
|
+
return kong.response.exit(403, { message = "Missing required header" })
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
return MyPlugin
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Equivalent Zuplo TypeScript policy:**
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
import { ZuploContext, ZuploRequest, HttpProblems } from "@zuplo/runtime";
|
|
264
|
+
|
|
265
|
+
export default async function (
|
|
266
|
+
request: ZuploRequest,
|
|
267
|
+
context: ZuploContext,
|
|
268
|
+
options: never,
|
|
269
|
+
policyName: string,
|
|
270
|
+
) {
|
|
271
|
+
const headerValue = request.headers.get("x-custom-header");
|
|
272
|
+
if (!headerValue) {
|
|
273
|
+
return HttpProblems.forbidden(request, context, {
|
|
274
|
+
detail: "Missing required header",
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
return request;
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Kong DB-less mode to Zuplo GitOps
|
|
282
|
+
|
|
283
|
+
If you use Kong's DB-less declarative mode, you're already familiar with
|
|
284
|
+
configuration-as-code. Zuplo takes this further with native GitOps:
|
|
285
|
+
|
|
286
|
+
| Kong DB-less | Zuplo GitOps |
|
|
287
|
+
| ----------------------------- | -------------------------------------------------------------------- |
|
|
288
|
+
| Single `kong.yml` file | OpenAPI spec + policy configs in Git |
|
|
289
|
+
| `deck sync` to apply changes | `git push` triggers automatic deployment |
|
|
290
|
+
| Manual environment management | Automatic [branch-based environments](./branch-based-deployments.md) |
|
|
291
|
+
| No PR-based review workflow | PR reviews with preview environments |
|
|
292
|
+
| Manual rollback | `git revert` and push |
|
|
293
|
+
|
|
294
|
+
## Next steps
|
|
295
|
+
|
|
296
|
+
- [Set up your first Zuplo gateway](./step-1-setup-basic-gateway.md)
|
|
297
|
+
- [Add rate limiting](./step-2-add-rate-limiting.md)
|
|
298
|
+
- [Add API key authentication](./step-3-add-api-key-auth.md)
|
|
299
|
+
- [Configure your developer portal](../dev-portal/introduction.md)
|
|
300
|
+
- [Set up source control](./source-control.md)
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Migrate to Zuplo from Other API Gateways
|
|
3
|
+
sidebar_label: Migration Overview
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Moving to Zuplo from another API gateway is straightforward. Zuplo is
|
|
7
|
+
OpenAPI-native, so you can import your existing API definitions and start
|
|
8
|
+
configuring policies in minutes. This section provides migration guides for the
|
|
9
|
+
most common API gateways.
|
|
10
|
+
|
|
11
|
+
## Why teams migrate to Zuplo
|
|
12
|
+
|
|
13
|
+
Teams migrate to Zuplo from legacy API gateways for several common reasons:
|
|
14
|
+
|
|
15
|
+
- **Reduce operational complexity** — Eliminate self-hosted infrastructure,
|
|
16
|
+
database management, and Kubernetes overhead with a fully managed platform.
|
|
17
|
+
- **Lower total cost of ownership** — Replace expensive enterprise licensing and
|
|
18
|
+
hidden infrastructure costs with transparent, usage-based pricing.
|
|
19
|
+
- **Accelerate development velocity** — Deploy globally in under 20 seconds with
|
|
20
|
+
GitOps workflows, TypeScript policies, and instant preview environments.
|
|
21
|
+
- **Modernize the developer experience** — Replace XML configs, Lua plugins, or
|
|
22
|
+
CloudFormation templates with TypeScript and OpenAPI-native configuration.
|
|
23
|
+
- **Go multi-cloud** — Deploy to 300+ edge locations worldwide without
|
|
24
|
+
single-cloud lock-in.
|
|
25
|
+
|
|
26
|
+
## Migration guides by platform
|
|
27
|
+
|
|
28
|
+
| Source platform | Common migration triggers |
|
|
29
|
+
| ---------------------------------------------------- | --------------------------------------------------------------------------- |
|
|
30
|
+
| [Kong Gateway](./migrate-from-kong.md) | Community Edition stagnation, Kubernetes complexity, Lua plugin limitations |
|
|
31
|
+
| [Google Apigee](./migrate-from-apigee.md) | Apigee Edge EOL, GCP lock-in, XML policy complexity, high costs |
|
|
32
|
+
| [AWS API Gateway](./migrate-from-aws-api-gateway.md) | AWS lock-in, limited customization, no built-in developer portal |
|
|
33
|
+
| [Azure API Management](./migrate-from-azure-apim.md) | Slow deployments, expensive per-environment pricing, poor GitOps support |
|
|
34
|
+
|
|
35
|
+
## General migration approach
|
|
36
|
+
|
|
37
|
+
Regardless of your source platform, the migration process follows a similar
|
|
38
|
+
pattern:
|
|
39
|
+
|
|
40
|
+
1. **Export your API definitions** — Extract OpenAPI specs from your current
|
|
41
|
+
gateway. If you don't have OpenAPI specs, create them from your existing
|
|
42
|
+
route configuration.
|
|
43
|
+
2. **Import into Zuplo** — Import your OpenAPI spec through the Zuplo Portal or
|
|
44
|
+
by adding the file to your project repository.
|
|
45
|
+
3. **Map policies** — Translate your existing gateway policies (authentication,
|
|
46
|
+
rate limiting, transformation) to Zuplo's built-in
|
|
47
|
+
[policy library](./policies.md).
|
|
48
|
+
4. **Configure backend connectivity** — Set up
|
|
49
|
+
[URL forwarding](../handlers/url-forward.md) or
|
|
50
|
+
[URL rewriting](../handlers/url-rewrite.md) to route traffic to your existing
|
|
51
|
+
backends.
|
|
52
|
+
5. **Test in a preview environment** — Use Zuplo's
|
|
53
|
+
[branch-based deployments](./branch-based-deployments.md) to validate your
|
|
54
|
+
configuration before going live.
|
|
55
|
+
6. **Migrate traffic incrementally** — Route a subset of traffic through Zuplo
|
|
56
|
+
first, then gradually shift all traffic once you've validated the
|
|
57
|
+
configuration.
|
|
58
|
+
|
|
59
|
+
## Concept mapping
|
|
60
|
+
|
|
61
|
+
The following table maps common API gateway concepts to their Zuplo equivalents:
|
|
62
|
+
|
|
63
|
+
| Concept | Kong | Apigee | AWS API Gateway | Azure APIM | Zuplo |
|
|
64
|
+
| ---------------- | -------------------- | ------------------- | -------------------- | --------------------- | ------------------------------------------------------ |
|
|
65
|
+
| Route definition | Service + Route | API Proxy | Resource + Method | API + Operation | [OpenAPI route](./openapi.md) |
|
|
66
|
+
| Request policy | Plugin (Lua) | Policy (XML) | Lambda authorizer | Policy (XML) | [Inbound policy](./policies.md) (TypeScript) |
|
|
67
|
+
| Response policy | Plugin (Lua) | PostFlow (XML) | Response mapping | Outbound policy (XML) | [Outbound policy](./policies.md) (TypeScript) |
|
|
68
|
+
| Authentication | Plugin | VerifyAPIKey policy | API key / Authorizer | Subscription key | [API key](./api-key-authentication.md) or JWT policy |
|
|
69
|
+
| Rate limiting | Rate Limiting plugin | SpikeArrest / Quota | Usage plan | rate-limit policy | [Rate limit policy](../policies/rate-limit-inbound.md) |
|
|
70
|
+
| Developer portal | Kong Dev Portal | Drupal portal | N/A (self-build) | Built-in portal | [Developer Portal](../dev-portal/introduction.md) |
|
|
71
|
+
| Environment | Workspace | Environment | Stage | Service | [Environment](./environments.md) |
|
|
72
|
+
| Deployment | Deck / Admin API | API deploy | CloudFormation / SAM | ARM / Bicep | `git push` with [GitOps](./source-control.md) |
|
|
73
|
+
|
|
74
|
+
## Get migration support
|
|
75
|
+
|
|
76
|
+
Need help planning your migration? Zuplo's team can assist with migration
|
|
77
|
+
planning, policy translation, and architecture review.
|
|
78
|
+
|
|
79
|
+
- [Book a demo](https://zuplo.com/meeting)
|
|
80
|
+
- [Contact support](https://zuplo.com/support)
|
|
81
|
+
- [Join the Discord community](https://discord.gg/W4mQqNnfSq)
|