Modify a gateway to use OpenAPI 3.x

This page describes how to modify an existing API gateway to use an OpenAPI 3.x specification for its API configuration.

Before you begin

  • Confirm that you have an existing API Gateway instance configured with an OpenAPI 2.0 specification.
  • Install the gcloud CLI. For more information, see Install the Google Cloud CLI.

Modify an API configuration to use OpenAPI 3.x

To modify an existing OpenAPI 2.0 API Gateway configuration to use OpenAPI 3.x complete the following steps:

Find the current API configuration

Find the API config associated with your gateway.

  1. Describe your API Gateway instance:

    gcloud api-gateway gateways describe GATEWAY_ID --project=PROJECT_ID --location=GATEWAY_LOCATION
    

    Replace the following:

    • GATEWAY_ID: The ID of your gateway.
    • PROJECT_ID: Your Google Cloud project ID.
    • GATEWAY_LOCATION: The location of your gateway.

    The output displays the apiConfig path, for example:

    apiConfig: projects/my-project/locations/global/apis/my-api/configs/my-gateway-config
    createTime: '2025-03-25T02:49:58.641650649Z'
    defaultHostname: my-gateway-a1b2c3d4.uc.gateway.dev
    displayName: My gateway
    name: projects/my-project/locations/us-west1/gateways/my-new-gateway
    state: ACTIVE
    updateTime: '2025-03-25T02:51:52.674308428Z'
    

Get the OpenAPI document

To get the OpenAPI document for the API configuration you identified:

  1. Describe the API configuration:

    gcloud api-gateway api-configs describe CONFIG_ID --api=API_ID --project=PROJECT_ID --view=FULL
    

    Replace the following:

    • CONFIG_ID: The ID of your API configuration.
    • API_ID: The ID of your API.
    • PROJECT_ID: Your Google Cloud project ID.

    The output displays the openapiDocuments section, which contains the base64-encoded content of your OpenAPI document:

    createTime: '2024-02-16T21:11:36.293169474Z'
    displayName: my-api-config
    gatewayServiceAccount: projects/-/serviceAccounts/api-gateway-sa@my-sandbox.iam.gserviceaccount.com
    name: projects/my-project-id/locations/global/apis/my-api/configs/my-gateway-config
    openapiDocuments:
    -   document:
        contents: IyBvc...
        path: apigateway-config.yaml
    serviceConfigId: my-api-config-0a1fjkfeb7t8z
    state: ACTIVE
    updateTime: '2024-02-16T21:13:45.626771120Z'
    

Decode the OpenAPI document

To decode the base64-encoded OpenAPI document content:

  1. Decode the contents value:

    echo 'IyBvc...' | base64 -d
    

    Replace IyBvc... with the actual contents value from the previous step.

    The output displays your OpenAPI 2.0 document, for example:

    swagger: '2.0'
    info:
      title: API_ID
      description: Sample API on API Gateway with a Google Cloud Functions backend
      version: 1.0.0
    

Convert the OpenAPI document to OpenAPI 3.x

You can use a tool to convert your OpenAPI 2.0 document to OpenAPI 3.x. For example, Swagger Editor provides a conversion utility.

After the initial conversion to OpenAPI 3.x, manually apply any additional changes to the document to align with OpenAPI 3.x and ensure compatibility with API Gateway extensions and features. For more details on supported OpenAPI 3.x extension in API Gateway, see OpenAPI 3.x Extensions in API Gateway.

The following table describes the required changes:

Feature OpenAPI 2.0 OpenAPI 3.x Description of change
API key securityDefinitions securitySchemes API keys use out-of-the-box OpenAPI API key support. Conversion tools typically handle this automatically. No manual changes are required.
JWT Authentication x-google-audiences, etc. x-google-auth In OpenAPI 2.0 extensions, you define OAuth configuration with individual extensions on a securityDefinition instance. Conversion tools convert the security scheme instance to #/components/securitySchemes and leave the extensions. Manually modify these extensions to be children of x-google-auth and remove the x-google- prefix. The values remain the same.
Quota x-google-management, x-google-quota x-google-api-management, x-google-quota In OpenAPI 2.0 extensions, you define metrics and quota in x-google-management and attach them with x-google-quota. Conversion tools leave these extensions in place. Manually move metrics and quota configuration from x-google-management to x-google-api-management. Change the configuration to use YAML keys, and remove valueType, metricKind, and unit. Remove metricCosts from instances of x-google-quota.
Backends x-google-backend x-google-api-management, x-google-backend In OpenAPI 2.0 extensions, you define backends in x-google-backend, and the configuration applies where defined. In OpenAPI 3.x extensions, you define the backend in x-google-api-management and then apply it with x-google-backend. Conversion tools leave this extension in place. Manually move the configuration to x-google-api-management. Modify instances of x-google-backend to reference that configuration.
Endpoints x-google-endpoints x-google-endpoint, servers In OpenAPI 2.0 extensions, you define endpoints configuration in x-google-endpoints. In OpenAPI 3.x extensions, you use x-google-endpoint, but it is an extension on servers rather than at the root. Conversion tools leave this extension in place. Manually move this to servers and remove the name field. For example:
# OpenAPI 2.0
x-google-endpoints:
- name: "my-api.apigateway.my-project.cloud.goog"
  allowCors: True
# OpenAPI 3.0.x
servers:
- url: https://my-api.apigateway.my-project.cloud.goog/
  x-google-endpoint:
    allowCors: True
API Names x-google-api-name x-google-api-management In OpenAPI 2.0 extensions, you define API names in x-google-api-name. In OpenAPI 3.x extensions, you use an apiName field in x-google-api-management. Manually move this configuration to x-google-api-management.
Allow all traffic x-google-allow NOT SUPPORTED Remove this from the OpenAPI document. API Gateway does not support this in OpenAPI 3.x.

Create a new API configuration

Create a new API configuration using your modified OpenAPI 3.x document.

  1. Create the API configuration:

    gcloud api-gateway api-configs create NEW_CONFIG_ID --api=API_ID --project=PROJECT_ID --openapi-spec=NEW_API_DEFINITION
    

    Replace the following:

    • NEW_CONFIG_ID: A new ID for your API configuration.
    • API_ID: The ID of your API.
    • PROJECT_ID: Your Google Cloud project ID.
    • NEW_API_DEFINITION: The path to your OpenAPI 3.x specification file.

Update the gateway

Update your gateway instance to reference the new API configuration from your modified OpenAPI 3.x document.

  1. Update the gateway:

    gcloud api-gateway gateways update GATEWAY_ID --api-config=API_CONFIG --project=PROJECT_ID --location=GATEWAY_LOCATION
    

    Replace the following:

    • GATEWAY_ID: The ID of your gateway.
    • API_CONFIG: The full resource path of your new API configuration, for example: projects/PROJECT_ID/locations/global/apis/API_ID/configs/NEW_CONFIG_ID
    • PROJECT_ID: Your Google Cloud project ID.
    • GATEWAY_LOCATION: The location of your gateway.

What's next