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
- Ensure that you have the following IAM permissions:
apihub.plugins.create
apihub.plugins.delete
apihub.plugins.get
apihub.plugins.list
For information on granting roles to principals, see Granting, changing, and revoking access.
- For Apigee Edge Public Cloud plugins, read about Apigee Edge API hub connector integration.
- For Apigee Edge Private Cloud (OPDK) plugins, read about API hub connector integration.
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
- Learn more about Plugins overview.
- Learn how to Manage plugins.