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

You can create a custom plugin using the Create Plugin API. The following example shows how to create a custom plugin with or without a hosting service.

REST

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/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/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 project ID of the plugin.
  • LOCATION: The location of the plugin.
  • PLUGIN_ID: The ID of the plugin.

What's next