
Apigee API ManagementAuthorCloudBrum editorial teamLast reviewedReading time~12 minLevelBeginner to advanced
Google Cloud · App modernization · API management platform
Google Cloud’s full API management platform. You put an Apigee proxy in front of a back end and attach policies for keys, quotas and security. Proxies are bundled into products, and developers sign up through a portal. It is built for organisations with many APIs that want analytics and control over them. For one or two serverless back ends, the lighter Google Cloud API Gateway may be all you need.
On this page (17 sections)
Mind map: Apigee API Management at a glance
Free to share. The downloaded image includes the CloudBrum link.
Key features (summary)
- Proxies in front of anythingA proxy wraps a back end, wherever it runs: Cloud Run, GKE, another cloud, a datacenter. Clients see one stable face while the code behind it changes.
- Policies, not codeDozens of ready-made policies cover key checks, OAuth, quotas, spike control, caching and message changes. You wire them into flows with XML.
- Products and developer appsBundle operations into an API product with its own quota, then let developers register apps that receive credentials for it.
- Developer portalsPublish products on an integrated portal, or build a custom one. Developers read the docs, try calls and get their own keys without asking anyone.
- Analytics and debuggingBuilt-in reports break traffic, errors and latency down by product, developer and proxy. A debug session shows each step a live call took.
- Apigee hybridRun the runtime in your own Kubernetes cluster near back ends that can’t leave a datacenter, while managing it from Google Cloud.
- Security toolingAdvanced API Security looks for misconfigured and misused APIs, and API hub keeps a catalogue of every API you own.
- Revisions and environmentsEach change is a numbered revision. Deploy it to an environment such as dev or prod, and roll back by deploying an earlier one.
Basic concepts
- Organization
- The top-level container, tied to a Google Cloud project. Everything else lives inside it: proxies, products, developers, environments.
- Environment
- A place where proxies run, for example dev or prod. You deploy a proxy revision to an environment.
- Environment group
- A set of environments reached through the same hostnames, such as api.example.com. It decides which hostname maps to which environments.
- Instance
- The managed runtime that serves traffic in a Region. An environment must be attached to an instance to serve calls.
- API proxy
- The façade clients call. It has a proxy endpoint (the client side), a target endpoint (the back-end side) and the flows between them.
- Flow
- An ordered list of steps that run on a request or a response. PreFlow runs first, conditional flows match certain paths or verbs, and PostFlow runs last.
- Policy
- A configurable building block, such as VerifyAPIKey, Quota or AssignMessage, that you attach to a step in a flow.
- Shared flow
- A reusable group of policies that several proxies call, or that runs for every proxy through a flow hook.
- API product
- A bundle of API resources with access rules and quotas, which developers subscribe to.
- Developer and app
- A developer is a registered user. An app is what that developer builds, and it receives the keys or OAuth credentials for the products it is approved for.
- Target server
- A named back-end address that proxies refer to, so moving a back end means changing one setting, not every proxy.
- Key value map
- A small store for settings or secrets that a proxy reads at run time, kept per environment.
- Apigee hybrid
- A model where the runtime runs in your own Kubernetes cluster and the management side stays in Google Cloud.
- API hub
- A catalogue for all your APIs, wherever they run. Each entry holds its spec, its owner and its versions.
How to create & configure it
Set up Apigee and deploy a first proxy in the Google Cloud console
- Pick an evaluation or a billing modelFor a first look, create an evaluation organization (free for 60 days). For something permanent, choose pay-as-you-go or a subscription, with a billing account attached.
- Provision the organizationOpen Apigee in the console and follow the provisioning wizard: project, Region, how the runtime will be reached (VPC peering or Private Service Connect) and the hostname. This can take up to an hour.
- Check the environment and hostnameThe wizard creates an environment and a group with a hostname. Note the hostname, you will call proxies through it.
- Create a proxyUnder Proxy development choose Create proxy, pick Reverse proxy, give it a name and a base path such as /orders, and set the target URL of your back end.
- Add policies to the flowIn the Develop view add policies to the PreFlow: a spike arrest, a key check and a quota are a sensible first set.
- Deploy a revisionSave and deploy the revision to your environment. The proxy answers on the group’s hostname a minute or so later.
- Test and debugUse a debug session to watch a call pass through each policy, then call the proxy with curl. Fix the order of steps if a policy fires too late.
- Create a product, a developer and an appBundle the proxy into an API product with a quota, add a developer, and register an app. Its consumer key is what callers send.
- Publish and watchPublish the product to a portal, open the analytics dashboard, and add alerts on error rate and latency before real traffic arrives.
Tip: the console is a good way to learn, but keep proxies as files in Git (the apiproxy folder) and deploy them from a pipeline. A proxy that lives only in the console has no history and no review (see the code references).
Common issues after configuration
| Symptom | Likely cause | What to check / fix |
|---|---|---|
| 401 Invalid ApiKey | Key missing, wrong, or not approved for the product | Check the header or query name the policy reads, that the app is approved for a product that includes the proxy, and that the product is deployed to this environment. |
| 404 Not found or Could not find proxy | Wrong hostname, base path or environment group | Compare the call with the proxy’s base path and the environment group’s hostnames. A proxy that isn’t deployed to an environment in that group won’t answer. |
| 429 Spike arrest violation | Calls arrived faster than the smoothed rate | SpikeArrest spreads the rate across short intervals, so 30 calls a second really means about one every 33 milliseconds. Slow the client or raise the rate. |
| 429 Quota limit exceeded | A Quota policy counter is full | Check which identifier the quota counts by, and the interval. Raise the product’s quota or fix a client that retries too hard. |
| 500 with steps.servicecallout.ExecutionFailed or a script error | A policy failed at run time | Open a debug session and read the failing step. Often it is a null variable, a bad URL or a back end that timed out. |
| 502 Bad Gateway or 503 Service Unavailable | Back end unreachable or refused the call | Call the target directly from the same network. Check firewall rules, TLS settings (truststore, SNI) and the target server’s health monitor. |
| 504 Gateway Timeout | Back end slower than the proxy’s timeout | Raise io.timeout.millis on the target only if the back end really needs longer. Otherwise fix the back end or answer asynchronously. |
| Deployment stays in Processing or fails | Bundle error or environment not attached | Validate the bundle’s XML, check policy names match the steps, and confirm the environment is attached to an instance. |
| Proxy works from the console but not from the internet | Load balancer, DNS or certificate | Check the external load balancer’s routing to the instance, the DNS record for the hostname and that the certificate covers it. |
| A change doesn’t show up | A new revision exists but isn’t deployed | Deployments are per revision and per environment. Deploy the revision you edited. |
| Key value map or secret read returns nothing | Wrong environment or a name typo | Key value maps are per environment unless created at organization level. Check scope and key names. |
| Cache returns stale data | The cache key or timeout is too broad | Include the parts of the request that change the answer in the cache key, and lower the time to live. |
Use cases: when and where to use it
Good fit
- A company with many APIs and teams that wants one place to secure and report on them
- Selling or sharing APIs with partners through products, quotas and a developer portal
- Putting security rules in front of legacy or on-premises back ends
- Governing API use in a regulated setting, with analytics, keys and OAuth
- Hybrid and multi-cloud estates where the runtime must stay close to the data
- Turning internal services into products with clear ownership
Consider something else
- One or two Cloud Run or Cloud Functions back ends and basic key or JWT checks → Google Cloud API Gateway, which is simpler and bills per call
- Calls between services inside Kubernetes → the GKE Gateway API or a service mesh
- Only global load balancing and DDoS protection → Cloud Load Balancing with Cloud Armor
- A pay-per-call gateway on AWS → Amazon API Gateway
- The Microsoft equivalent with a similar policy model → Azure API Management
Pros: why consider it?
Why teams choose it
- The whole API lifecycle in one product, from proxy to portal to analytics
- Rich policy library that covers most security and mediation needs
- Hybrid option for back ends that can’t move
- Strong analytics, and a debug view that shows every step of a call
- Plays well with Cloud Load Balancing and Cloud Armor, and with Google Cloud identity
- Lets a platform team set the rules once for every API team
Trade-offs to weigh
- Heavier and costlier than a simple gateway, so it’s overkill for a couple of APIs
- Networking set-up (peering or Private Service Connect, load balancer, DNS) takes planning
- Billing combines environment time and call volume, which is harder to forecast
- XML flows and policies have a learning curve and are awkward to unit test
- Apigee X is not a drop-in upgrade for Apigee Edge, so older estates need a rebuild
- Policies and conventions tie you to Apigee
Common threats, vulnerabilities & risks
| Risk | Severity | Why it matters | Mitigation |
|---|---|---|---|
| Back end reachable without the proxy | High | Anyone who finds the target address skips every policy. | Limit the back end to Apigee’s addresses, use mutual TLS to the target and keep it on a private network. |
| Keys treated as strong authentication | High | An API key identifies an app. It doesn’t prove who the end user is, and leaked keys work until revoked. | Use OAuth 2.0 or JWT verification for users and rotate or revoke keys. |
| Unprotected northbound entry | High | A public load balancer with no filtering exposes the runtime to floods and scans. | Put Cloud Armor in front, restrict hostnames and consider Private Service Connect for internal callers. |
| Secrets in proxy code or plain key value maps | Medium | Bundles are copied around and key value maps can be read by many people. | Use encrypted key value maps or Secret Manager, and keep secrets out of Git. |
| Shared flows and policy errors at wide scope | Medium | A broken flow hook affects every proxy in the environment. | Test in a non-production environment and review changes in code. |
| Missing quotas and spike arrest | Medium | A buggy or hostile client can flood the back end. | Apply SpikeArrest in PreFlow and a Quota per app or product. |
| Open developer portal sign-up | Medium | Anyone can register and get credentials for products meant for partners. | Require approval for sensitive products and review who has access. |
| Verbose logging of payloads | Low–Med | Tokens and personal data end up in logs and analytics. | Log selected fields, mask the rest and set retention. |
| Edge to X migration left too late | Low–Med | Edge is being phased out, and a rushed move invites mistakes. | Plan the move as a rebuild with a parallel run and tests. |
Performance optimisation
- Keep the PreFlow light. Every policy there runs on every call, so put heavy or optional work in conditional flows.
- Use response caching for data that rarely changes, with a cache key that includes what makes responses differ.
- Avoid ServiceCallout to slow services in the main path. Each one adds its latency to every call.
- Keep the runtime close to the back ends, and use an instance in each Region where callers are spread out.
- Set timeouts and connect timeouts on targets sensibly, and use target servers with health monitoring for several back ends.
- Prefer built-in policies to JavaScript or Java callouts, which are slower and harder to maintain.
- Use SpikeArrest to smooth sudden bursts, and Quota for the long-running limit. They do different jobs.
- Watch latency by proxy in the analytics, and use debug sessions to find the slow step.
Reduce monthly cost
FinOps is the habit of managing cloud spend together with engineering. These are the FinOps checks that matter most for Apigee API Management.
- Match the billing model to the pattern. Pay-as-you-go suits variable or early use, and a subscription suits steady, high volume.
- Environments and deployments cost money while they exist. Don’t leave extra environments and old proxy deployments running.
- Use the evaluation organization for learning, then delete it.
- Cache and reject early, so bad or repeated calls don’t reach a billed back end.
- Count the extras: external load balancers, Cloud Armor, networking, logging and data transfer.
- Share one organization between teams, with clear environments, instead of running one per team.
- Trim analytics and logging that nobody reads.
- Ask yourself if you need Apigee at all. For a few serverless back ends, API Gateway can cost much less.
- Review the subscription tier and call volume before renewal, and compare it with real usage.
- Use labels and budget alerts on the project that holds the organization.
Prices in this guide are described, not quoted. Apigee pricing depends on the model, the Region and your contract. Confirm current rates before you decide (see Pricing).
Security optimisation
- Use OAuth 2.0 or JWT verification for end users, and API keys only to identify apps.
- Restrict the back end so it accepts calls only from Apigee, with mutual TLS to the target and private networking.
- Put Cloud Armor and a load balancer in front, and use Private Service Connect for internal callers.
- Keep secrets in encrypted key value maps or Secret Manager, never in the proxy bundle.
- Apply SpikeArrest, Quota and request size limits on every proxy.
- Validate input with schema and size checks, and strip internal headers on the way out.
- Turn on Advanced API Security to find misconfigured and abused APIs, and register APIs in API hub.
- Set least-privilege IAM roles for people who edit proxies, deploy them and read analytics.
- Control developer portal sign-up and require approval for sensitive products.
- Send audit logs to Cloud Logging, and review who changed or deployed what.
Governance & compliance
Guardrails
- Required labels: owner, environment, cost centre (organization policy and labels)
- IAM roles split between proxy developers, deployers and analytics readers
- A review step before any proxy is deployed to production
- Shared flows owned by a platform team for authentication, headers and error handling
Continuous checks (Google Cloud)
- Cloud Audit Logs for Apigee admin and deployment activity
- Security Command Center findings where your edition covers Apigee
- Advanced API Security assessments and alerts
- Organization policies that restrict regions and public access
- Cloud Armor logs for the front door
Use Cloud Audit Logs to see who changed or deployed a proxy, IAM to separate duties and the Compliance resource centre for Google Cloud’s reports. Responsibility is shared: Google runs the managed platform, and you own the proxies, policies, credentials, data and access.
Reduce carbon footprint
- Delete environments and portals that nobody uses, along with their old proxies.
- Cache so repeated calls don’t wake the back end.
- Reject abusive traffic at the edge with Cloud Armor, and further in with spike arrest and quotas.
- Place instances in Regions near your users and back ends, and favour lower-carbon Regions where rules allow.
- Log what you will read, with short retention.
- Share one organization among teams rather than running many.
- The Google Cloud Carbon Footprint report shows estimated emissions. Check what it covers for Apigee.
Pricing
Purchase options
Evaluation 60 days
A free organization for learning and trials. It is not for production and it ends, so plan to move or delete it.
Pay-as-you-go Usage
No upfront commitment. You pay for what you use, which includes the environments and deployments you keep running and the API calls you serve.
Subscription Commit
Standard, Enterprise and Enterprise Plus tiers with a fixed fee and included call volumes, for steady and high usage. Usually arranged with Google Cloud.
Hybrid Own cluster
The runtime runs in your Kubernetes cluster, so you also carry that infrastructure. Check the pricing page for how hybrid is billed.
What you actually pay for
- Environments and proxy deployments over time (pay-as-you-go)
- API calls served
- The subscription fee and any volume beyond what it includes
- Add-ons such as Advanced API Security, where charged separately
- Networking and edge: load balancer, Cloud Armor, Private Service Connect and data transfer
- Logging and the infrastructure of an Apigee hybrid cluster
Pay-as-you-go and subscription rates vary by Region and contract, so none are quoted here. For comparison, Google Cloud API Gateway, the lighter product, bills per call: the first 2 million calls each month are free and the next tier is about $3 per million at the time of writing. See the official Apigee pricing page, the API Gateway pricing page and the Google Cloud pricing calculator.
Important code references
A proxy called orders that spreads calls out, checks an API key and enforces an hourly quota for each app. The gcloud and curl tab imports and deploys the proxy bundle and creates a product, a developer and an app; the Terraform tab adds an environment, a hostname group and a target server; the XML tab is the proxy bundle itself; and the C# tab is a caller that sends the key and backs off when it is limited. It assumes the Apigee organization and instance already exist. Replace the project, hostname and e-mail addresses with your own.
# Assumes an Apigee organization already exists in this project (provision it once in the console) and that an environment called dev is attached to an instance
PROJECT=my-project
ORG=$PROJECT
ENV=dev
API=https://apigee.googleapis.com/v1/organizations/$ORG
TOKEN=$(gcloud auth print-access-token)
gcloud services enable apigee.googleapis.com --project=$PROJECT
gcloud apigee environments list --organization=$ORG
# Zip the proxy bundle (the apiproxy folder from the Proxy XML tab) and import it as a new proxy
(cd orders && zip -r ../orders.zip apiproxy)
curl -s -X POST "$API/apis?name=orders&action=import" \
-H "Authorization: Bearer $TOKEN" -F "data=@orders.zip"
# Deploy revision 1 to the dev environment
curl -s -X POST "$API/environments/$ENV/apis/orders/revisions/1/deployments" \
-H "Authorization: Bearer $TOKEN"
# An API product that exposes the proxy in dev, with a quota of 1,000 calls an hour per app
curl -s -X POST "$API/apiproducts" -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -d '{
"name": "starter", "displayName": "Starter", "approvalType": "auto",
"environments": ["dev"], "proxies": ["orders"],
"quota": "1000", "quotaInterval": "1", "quotaTimeUnit": "hour"
}'
# A developer and an app that is allowed to use the product
curl -s -X POST "$API/developers" -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -d '{
"email": "dev@example.com", "firstName": "Test", "lastName": "Developer", "userName": "testdev"
}'
KEY=$(curl -s -X POST "$API/developers/dev@example.com/apps" -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"name": "test-app", "apiProducts": ["starter"]}' | python3 -c 'import json,sys; print(json.load(sys.stdin)["credentials"][0]["consumerKey"])')
# Call the proxy through the environment group hostname
curl -i -H "x-api-key: $KEY" https://api-dev.example.com/orders/items
# Assumes the Apigee organization and instance already exist (provisioned with VPC peering or Private Service Connect)
variable "org_id" {
description = "organizations/<project id>"
type = string
}
variable "instance_id" {
description = "Full ID of the existing Apigee instance"
type = string
}
resource "google_apigee_environment" "dev" {
org_id = var.org_id
name = "dev"
display_name = "Development"
description = "Where new revisions are tried first"
}
# The hostname callers use for everything deployed to dev
resource "google_apigee_envgroup" "dev" {
org_id = var.org_id
name = "dev-group"
hostnames = ["api-dev.example.com"]
}
resource "google_apigee_envgroup_attachment" "dev" {
envgroup_id = google_apigee_envgroup.dev.id
environment = google_apigee_environment.dev.name
}
# An environment only serves traffic once it is attached to an instance
resource "google_apigee_instance_attachment" "dev" {
instance_id = var.instance_id
environment = google_apigee_environment.dev.name
}
# The back end, named once so proxies refer to "orders-backend" and not to a URL
resource "google_apigee_target_server" "orders" {
name = "orders-backend"
description = "Orders service on Cloud Run"
env_id = google_apigee_environment.dev.id
protocol = "HTTP"
host = "orders-abc123-el.a.run.app"
port = 443
is_enabled = true
s_sl_info {
enabled = true
}
}
<!-- apiproxy/orders.xml: the bundle's descriptor -->
<APIProxy name="orders">
<DisplayName>Orders API</DisplayName>
<Description>Orders for the mobile app, with key checks and quotas</Description>
</APIProxy>
<!-- apiproxy/proxies/default.xml: the client-facing side -->
<ProxyEndpoint name="default">
<PreFlow name="PreFlow">
<Request>
<Step><Name>Spike-Arrest</Name></Step>
<Step><Name>Verify-API-Key</Name></Step>
<Step><Name>Quota-Per-App</Name></Step>
</Request>
<Response/>
</PreFlow>
<HTTPProxyConnection>
<BasePath>/orders</BasePath>
</HTTPProxyConnection>
<RouteRule name="default">
<TargetEndpoint>default</TargetEndpoint>
</RouteRule>
</ProxyEndpoint>
<!-- apiproxy/policies/Spike-Arrest.xml: smooth out sudden bursts (30 a second means about one every 33 ms) -->
<SpikeArrest continueOnError="false" enabled="true" name="Spike-Arrest">
<Rate>30ps</Rate>
</SpikeArrest>
<!-- apiproxy/policies/Verify-API-Key.xml: the key comes in the x-api-key header -->
<VerifyAPIKey continueOnError="false" enabled="true" name="Verify-API-Key">
<APIKey ref="request.header.x-api-key"/>
</VerifyAPIKey>
<!-- apiproxy/policies/Quota-Per-App.xml: 1,000 calls an hour for each app -->
<Quota continueOnError="false" enabled="true" name="Quota-Per-App">
<Allow count="1000"/>
<Interval>1</Interval>
<TimeUnit>hour</TimeUnit>
<Identifier ref="verifyapikey.Verify-API-Key.client_id"/>
<Distributed>true</Distributed>
<Synchronous>false</Synchronous>
</Quota>
<!-- apiproxy/targets/default.xml: the back end this proxy forwards to -->
<TargetEndpoint name="default">
<PreFlow name="PreFlow">
<Request/>
<Response/>
</PreFlow>
<HTTPTargetConnection>
<Properties>
<Property name="io.timeout.millis">10000</Property>
</Properties>
<LoadBalancer>
<Server name="orders-backend"/>
</LoadBalancer>
<Path>/</Path>
</HTTPTargetConnection>
</TargetEndpoint>
// Program.cs: calls the proxy with an API key. If Apigee answers 429 or 503 it waits and tries again, up to four times
using System.Net;
var http = new HttpClient { BaseAddress = new Uri("https://api-dev.example.com/"), Timeout = TimeSpan.FromSeconds(30) };
var apiKey = Environment.GetEnvironmentVariable("APIGEE_KEY") ?? throw new InvalidOperationException("Set APIGEE_KEY first");
HttpResponseMessage response;
var tries = 0;
do
{
tries++;
// A request message can only be sent once, so build a fresh one for every attempt
var request = new HttpRequestMessage(HttpMethod.Get, "orders/items?limit=20");
request.Headers.Add("x-api-key", apiKey);
response = await http.SendAsync(request);
var shouldRetry = response.StatusCode is HttpStatusCode.TooManyRequests or HttpStatusCode.ServiceUnavailable;
if (!shouldRetry || tries == 4)
{
break;
}
// A spike arrest clears within seconds, a quota takes longer. Prefer the server's Retry-After, else back off 2, 4, 8 seconds
var pause = response.Headers.RetryAfter?.Delta ?? TimeSpan.FromSeconds(Math.Pow(2, tries));
Console.WriteLine($"Got {(int)response.StatusCode}, trying again in {pause.TotalSeconds:0} s (attempt {tries} of 4)");
await Task.Delay(pause);
}
while (true);
Console.WriteLine(response.IsSuccessStatusCode
? await response.Content.ReadAsStringAsync()
: $"Failed with {(int)response.StatusCode}");
Best videos to explore
Short walkthrough videos for this service are being prepared. They will appear here and load only when you press play. Until then, follow CloudBrum on YouTube for new videos.
Interview questions
BasicWhat is Apigee?
Apigee is Google Cloud’s API management platform. You put a proxy in front of a back end and attach policies for security, quotas and changes to the message. You then group proxies into products, let developers sign up through a portal, and watch traffic in the analytics. It covers the whole life of an API, not only the gateway.
BasicWhat is an API proxy?
A proxy is the front that clients call, in place of the real back end. It has a proxy endpoint on the client side, a target endpoint on the back-end side and flows in between, where policies run. Because clients only see the proxy, you can change or move the back end without breaking them.
BasicWhat is an API product?
An API product bundles one or more proxies, or parts of them, with access rules and a quota. Developers register apps and are approved for products, and the app’s credentials only work for the products it was approved for. Products are how you package and meter what you offer.
IntermediateWhat is the difference between Apigee X and Apigee hybrid?
Apigee X is the fully managed option: Google runs the runtime and the management side. With hybrid, the runtime runs in your own Kubernetes cluster, in your datacenter or another cloud, while management and analytics stay in Google Cloud. Choose hybrid when back ends or data must stay put, and accept that you operate the cluster.
IntermediateWhat is the difference between SpikeArrest and Quota?
SpikeArrest protects the back end from sudden bursts by smoothing the rate across short intervals, so 30 per second behaves like one call roughly every 33 milliseconds. Quota counts calls over a longer period, such as an hour or a month, usually per app or per product, to enforce a plan. Use both: one protects, the other meters.
IntermediateHow do you choose between Apigee and Google Cloud API Gateway?
API Gateway is a small, serverless gateway for Cloud Run, Cloud Functions or App Engine back ends. It is configured with an OpenAPI file, handles keys and JWTs, and bills per call. Apigee is a full platform with a rich policy library, products, developer portals, analytics and a hybrid option. If you need monetisation, partner onboarding or detailed analytics, choose Apigee. If you only need to protect a couple of serverless APIs, API Gateway is usually enough.
AdvancedHow would you structure environments and promote changes?
Use separate environments such as dev, test and prod, grouped behind hostnames with environment groups, and keep settings that differ, like target servers and key value maps, per environment so the same bundle works everywhere. Treat each change as a revision stored in Git, build it in a pipeline with apigeecli or Maven, test it in dev and promote the same bundle upward. Shared flows carry the common rules, and Terraform holds the environments themselves.
AdvancedHow do you secure an Apigee deployment end to end?
At the front, use an external load balancer with Cloud Armor, or Private Service Connect for internal callers, and verify OAuth or JWT tokens in the proxy, with keys only identifying apps. In the middle, apply SpikeArrest, Quota and input checks, and keep secrets in encrypted key value maps or Secret Manager. At the back, use private networking and mutual TLS so targets accept only Apigee. Add Advanced API Security and audit logs.
AdvancedA back end is slow and sometimes failing. How do you protect callers and the back end?
Set sensible connect and I/O timeouts on the target, use target servers with health monitoring so unhealthy ones are skipped, and add a fallback server where one exists. Cache safe responses, apply SpikeArrest to avoid piling on, and use a FaultRule to return a clear, consistent error. Keep retries to idempotent calls and cap them. The analytics and debug sessions show whether the time goes to the back end or to a policy.
AdvancedWhen would you choose Apigee hybrid, and what does it cost you?
Choose it when back ends must stay in a datacenter or another cloud for latency, data residency or policy reasons, but you still want Apigee’s management and analytics. You gain locality and control. You take on running and upgrading a Kubernetes cluster, keeping its version supported and its networking and capacity healthy, so it only pays off when those reasons are real.
Similar or alternative services on other clouds
| Capability | AWS | Azure | Google Cloud |
|---|---|---|---|
| Service | Amazon API Gateway | Azure API Management | Apigee and Google Cloud API Gateway |
| Sweet spot | HTTP APIs for Lambda and other AWS back ends | Organisations that need policy control plus a portal | Apigee: a full programme with analytics, products and partners. API Gateway: two or three serverless back ends |
| How rules are expressed | Stage and route settings, authorizers, VTL templates (REST) | XML policies in four steps | XML policies in a proxy bundle, or an OpenAPI file for API Gateway |
| Caller identity | IAM, Cognito, JWT, custom Lambda authorizers, keys | Keys, JWT validation, OAuth 2.0 and certificates | API keys and OAuth 2.0 tokens through products and developer apps |
| Throttling and quotas | Throttle at account, stage or route; usage plans on REST | Two policies: rate-limit and quota | SpikeArrest for bursts, Quota per app or product |
| Developer portal | Managed portals for REST APIs | Built-in portal | Integrated portal or a custom one |
| Your own network | VPC links and private APIs | Self-hosted gateway and virtual networks | Apigee hybrid on your Kubernetes, or Private Service Connect |
| Billing | Calls, with cache billed hourly | Unit-hours (calls on Consumption) | Subscription or pay-as-you-go for Apigee, calls for API Gateway |
Looking for something lighter? Google Cloud API Gateway fronts Cloud Run, Cloud Functions and App Engine from an OpenAPI file. For plain web traffic, Cloud Load Balancing with Cloud Armor is the usual front door, and Cloud Run functions can serve HTTP on their own.
Did you find this article helpful?
Your answer helps us improve this page for the next reader.
Sources and further reading
CloudBrum wrote this page in its own words, using the provider’s public documentation listed below as the reference. Features, limits, names and prices change, so confirm anything that matters on the provider’s own pages before you decide.
- Apigee documentationGoogle Cloud
- Apigee pricingGoogle Cloud
- Introducing pay-as-you-go pricing for ApigeeGoogle Cloud
- Key points of API proxy developmentGoogle Cloud
- Creating reusable shared flowsGoogle Cloud
- Southbound networking patternsGoogle Cloud
- Provision an evaluation organization with VPC peeringGoogle Cloud
- Choosing between Apigee, API Gateway and Cloud EndpointsGoogle Cloud
- API Gateway pricingGoogle Cloud
- Terraform Google provider: google_apigee_environmentHashiCorp
