Create custom plugins

This page applies to Apigee and Apigee hybrid.

This page describes how to create custom plugins in API hub. Custom plugins are created manually to connect API hub to a specific API data source. You can create custom plugins to connect to on-premises or multi-cloud sources, or to adapt API hub to meet specific business needs. For more information about plugins in API hub, see Plugins overview.

Before you begin

Create a custom plugin

Console

To create a custom plugin, do the following:

  1. In the Google Cloud console, go to the API hub page.

    Go to API hub

  2. Click Settings from the left navigation menu to open the Settings page.
  3. Click the Plugins tab to view the available plugins in your project.
  4. Click Create a new plugin.
  5. Configure the following fields in the Create plugin pane:
    • Display name: Enter a name for the plugin.
    • Optional: Click Specify ID to provide a unique ID for the plugin. API hub generates a unique ID if you don't provide one.
    • Description: Enter a description for the plugin.
    • Plugin type: This field is selected by default.
  6. Click Create plugin to create the plugin.

    On successful creation, you can see a new plugin card displayed in the Plugins tab. To use the plugin, you need to create a plugin instance.

REST

You can create a custom plugin using the Create Plugin API:

Custom plugin without a hosting service:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
      "display_name": "PLUGIN_DISPLAY_NAME",
      "description": "PLUGIN_DESCRIPTION",
      "actions_config": [
          {
              "id": "PLUGIN_ACTION_ID",
              "display_name": "PLUGIN_ACTION_DISPLAY_NAME",
              "description": "PLUGIN_ACTION_DESCRIPTION",
              "trigger_mode": "PLUGIN_ACTION_TRIGGER_MODE"
          }
      ],
      "plugin_category": "PLUGIN_CATEGORY",
      "ownership_type": "USER_OWNED"
  }' \
  "https://apihub.googleapis.com/v1/projects/PROJECT_ID/locations/HUB_LOCATION/plugins?plugin_id=PLUGIN_ID"
    

Example

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
      "display_name": "Nebula Connect",
      "description": "Nebula Connect plugin for syncing metadata via gRPC.",
      "actions_config": [
          {
              "id": "sync-metadata-core",
              "display_name": "Sync Core Metadata",
              "description": "Initiates synchronization of core API metadata.",
              "trigger_mode": "API_HUB_SCHEDULE_TRIGGER"
          }
      ],
      "plugin_category": "API_GATEWAY",
      "ownership_type": "USER_OWNED"
  }' \
  "https://apihub.googleapis.com/v1/projects/test-project/locations/us-west1/plugins?plugin_id=nebula-connect-v1"
  

Custom plugin with a hosting service:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
      "display_name": "PLUGIN_DISPLAY_NAME",
      "description": "PLUGIN_DESCRIPTION",
      "actions_config": [
          {
              "id": "PLUGIN_ACTION_ID",
              "display_name": "PLUGIN_ACTION_DISPLAY_NAME",
              "description": "PLUGIN_ACTION_DESCRIPTION",
              "trigger_mode": "PLUGIN_ACTION_TRIGGER_MODE"
          }
      ],
      "plugin_category": "PLUGIN_CATEGORY",
      "hosting_service": {
       "service_uri": "PLUGIN_HOSTING_SERVICE_URI"
      },
      "ownership_type": "USER_OWNED"
  }' \
  "https://apihub.googleapis.com/v1/projects/PROJECT_ID/locations/HUB_LOCATION/plugins?plugin_id=PLUGIN_ID"
    

Example

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
      "display_name": "Nebula Connect",
      "description": "Nebula Connect plugin for syncing metadata via gRPC.",
      "actions_config": [
          {
              "id": "sync-metadata-core",
              "display_name": "Sync Core Metadata",
              "description": "Initiates synchronization of core API metadata.",
              "trigger_mode": "API_HUB_SCHEDULE_TRIGGER"
          }
      ],
      "plugin_category": "API_GATEWAY",
      "hosting_service": {
       "service_uri": "[https://nebula-endpoints-987654321098.us-west1.run.app](https://nebula-endpoints-987654321098.us-west1.run.app)"
      },
      "ownership_type": "USER_OWNED"
  }' \
  "https://apihub.googleapis.com/v1/projects/test-project/locations/us-west1/plugins?plugin_id=nebula-connect-v1"

    

Replace the following:

  • PLUGIN_DISPLAY_NAME: The display name of the plugin.
  • PLUGIN_DESCRIPTION: A description of the plugin.
  • PLUGIN_ACTION_ID: The ID of the plugin action.
  • PLUGIN_ACTION_DISPLAY_NAME: The display name of the plugin action.
  • PLUGIN_ACTION_DESCRIPTION: A description of the plugin action.
  • PLUGIN_ACTION_TRIGGER_MODE: The trigger mode of the plugin action.
  • PLUGIN_CATEGORY: The category of the plugin.
  • PLUGIN_HOSTING_SERVICE_URI: The URI of the hosting service.
  • PROJECT_ID: The name of your API hub host project. The host project was selected when API hub was provisioned.
  • HUB_LOCATION: The location of the API hub.
  • PLUGIN_ID: The ID of the plugin.

What's next