CloudBrum
CloudBrum · Cloud decision-support platform
Google Cloud App modernization

Apigee API ManagementLast 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

    Apigee API Management mind map Apigee API Management at a glance: Structure: Organization, Environments, groups, Instances (runtime); API proxy: Proxy and target endpoints, Flows and conditions, Shared flows; Policies: Verify key, OAuth, JWT, Quota, spike arrest, Mediation, caching; Products & apps: API products, Developers and apps, Keys and OAuth clients; Deployment: Apigee X (managed), Apigee hybrid, Revisions, promotion; Networking: Load balancer, PSC, VPC peering, Private targets; Pricing: Evaluation, 60 days, Pay-as-you-go, Subscription tiers; Operations: Analytics, debug view, API hub, security, Terraform, CI/CD. Apigee API Management at a glance API management on Google Cloud: the main building blocks and decisions CloudBrum Cloud decision-support platform CloudBrum Organization Environments, groups Instances (runtime) Structure Proxy and target endpoints Flows and conditions Shared flows API proxy Verify key, OAuth, JWT Quota, spike arrest Mediation, caching Policies API products Developers and apps Keys and OAuth clients Products & apps Apigee X (managed) Apigee hybrid Revisions, promotion Deployment Load balancer, PSC VPC peering Private targets Networking Evaluation, 60 days Pay-as-you-go Subscription tiers Pricing Analytics, debug view API hub, security Terraform, CI/CD Operations Apigee17-point analysis CloudBrum· 17-point cloud service analysis cloudbrum.com
    CloudBrum Apigee at a glance · 17-point analysis Structure Organization Environments, groups Instances (runtime) API proxy Proxy and target endpoints Flows and conditions Shared flows Policies Verify key, OAuth, JWT Quota, spike arrest Mediation, caching Products & apps API products Developers and apps Keys and OAuth clients Deployment Apigee X (managed) Apigee hybrid Revisions, promotion Networking Load balancer, PSC VPC peering Private targets Pricing Evaluation, 60 days Pay-as-you-go Subscription tiers Operations Analytics, debug view API hub, security Terraform, CI/CD CloudBrum · cloudbrum.com

    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

    1. 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.
    2. 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.
    3. Check the environment and hostnameThe wizard creates an environment and a group with a hostname. Note the hostname, you will call proxies through it.
    4. 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.
    5. 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.
    6. Deploy a revisionSave and deploy the revision to your environment. The proxy answers on the group’s hostname a minute or so later.
    7. 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.
    8. 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.
    9. 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

    SymptomLikely causeWhat to check / fix
    401 Invalid ApiKeyKey missing, wrong, or not approved for the productCheck 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 proxyWrong hostname, base path or environment groupCompare 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 violationCalls arrived faster than the smoothed rateSpikeArrest 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 exceededA Quota policy counter is fullCheck 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 errorA policy failed at run timeOpen 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 UnavailableBack end unreachable or refused the callCall the target directly from the same network. Check firewall rules, TLS settings (truststore, SNI) and the target server’s health monitor.
    504 Gateway TimeoutBack end slower than the proxy’s timeoutRaise 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 failsBundle error or environment not attachedValidate 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 internetLoad balancer, DNS or certificateCheck 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 upA new revision exists but isn’t deployedDeployments are per revision and per environment. Deploy the revision you edited.
    Key value map or secret read returns nothingWrong environment or a name typoKey value maps are per environment unless created at organization level. Check scope and key names.
    Cache returns stale dataThe cache key or timeout is too broadInclude 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

    RiskSeverityWhy it mattersMitigation
    Back end reachable without the proxyHighAnyone 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 authenticationHighAn 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 entryHighA 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 mapsMediumBundles 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 scopeMediumA broken flow hook affects every proxy in the environment.Test in a non-production environment and review changes in code.
    Missing quotas and spike arrestMediumA buggy or hostile client can flood the back end.Apply SpikeArrest in PreFlow and a Quota per app or product.
    Open developer portal sign-upMediumAnyone can register and get credentials for products meant for partners.Require approval for sensitive products and review who has access.
    Verbose logging of payloadsLow–MedTokens and personal data end up in logs and analytics.Log selected fields, mask the rest and set retention.
    Edge to X migration left too lateLow–MedEdge 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.

    Introduction to Apigee API ManagementVideo coming soon · Beginner
    Your first API proxy in ApigeeVideo coming soon · Beginner
    Quotas and spike arrest in ApigeeVideo coming soon · Intermediate
    Apigee hybrid explainedVideo coming soon · Advanced

    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

    CapabilityAWSAzureGoogle Cloud
    ServiceAmazon API GatewayAzure API ManagementApigee and Google Cloud API Gateway
    Sweet spotHTTP APIs for Lambda and other AWS back endsOrganisations that need policy control plus a portalApigee: a full programme with analytics, products and partners. API Gateway: two or three serverless back ends
    How rules are expressedStage and route settings, authorizers, VTL templates (REST)XML policies in four stepsXML policies in a proxy bundle, or an OpenAPI file for API Gateway
    Caller identityIAM, Cognito, JWT, custom Lambda authorizers, keysKeys, JWT validation, OAuth 2.0 and certificatesAPI keys and OAuth 2.0 tokens through products and developer apps
    Throttling and quotasThrottle at account, stage or route; usage plans on RESTTwo policies: rate-limit and quotaSpikeArrest for bursts, Quota per app or product
    Developer portalManaged portals for REST APIsBuilt-in portalIntegrated portal or a custom one
    Your own networkVPC links and private APIsSelf-hosted gateway and virtual networksApigee hybrid on your Kubernetes, or Private Service Connect
    BillingCalls, with cache billed hourlyUnit-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.