Plugin API Reference
Complete reference for the ElasticView Plugin API, including configuration schema and available interfaces.
Plugin Manifest (plugin.yaml)
The plugin.yaml file defines your plugin's metadata, configuration, and requirements.
Basic Structure
yaml
# Plugin Identity
name: "my-plugin"
version: "1.0.0"
description: "A sample ElasticView plugin"
author: "Your Name"
email: "your.email@example.com"
homepage: "https://github.com/yourname/my-plugin"
# Plugin Metadata
category: "visualization"
tags: ["charts", "analytics", "dashboard"]
license: "MIT"
icon: "assets/icon.png"
# Compatibility
min_ev_version: "1.0.0"
max_ev_version: "2.0.0"
# Permissions
permissions:
- "data.read"
- "data.query"
- "ui.dashboard"
# Configuration Schema
config_schema:
type: "object"
properties:
api_key:
type: "string"
description: "API key for external service"
required: true
refresh_interval:
type: "integer"
description: "Data refresh interval in seconds"
default: 60
minimum: 10
maximum: 3600Backend API
Plugin Interface
Implement the main plugin interface:
go
package main
import (
"github.com/gin-gonic/gin"
"github.com/1340691923/ElasticView/pkg/plugin"
)
type MyPlugin struct {
plugin.BasePlugin
config *Config
}
// Init initializes the plugin
func (p *MyPlugin) Init() error {
// Load configuration
if err := p.LoadConfig(&p.config); err != nil {
return err
}
// Initialize resources
return p.initializeResources()
}
// Routes defines HTTP routes
func (p *MyPlugin) Routes(router *gin.RouterGroup) {
router.GET("/status", p.getStatus)
router.POST("/data", p.postData)
router.PUT("/config", p.updateConfig)
router.DELETE("/cache", p.clearCache)
}
func main() {
plugin.Register(&MyPlugin{})
}Frontend API
Plugin Registration
Register your Vue.js plugin:
javascript
// src/main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import { ElasticViewPlugin } from '@elasticview/plugin-sdk'
const app = createApp(App)
app.use(router)
app.use(ElasticViewPlugin, {
pluginId: 'my-plugin',
apiBase: '/plugin/my-plugin/api'
})
app.mount('#app')HTTP Client
Make API requests:
javascript
// Using the built-in HTTP client
export default {
async mounted() {
try {
// GET request
const response = await this.$http.get('/api/data')
this.data = response.data
// POST request
await this.$http.post('/api/action', {
param1: 'value1',
param2: 'value2'
})
} catch (error) {
this.$message.error('Request failed: ' + error.message)
}
}
}Configuration Management
Access and manage plugin configuration:
go
type Config struct {
APIKey string `json:"api_key"`
RefreshInterval int `json:"refresh_interval"`
EnableCache bool `json:"enable_cache"`
}
func (p *MyPlugin) LoadConfig(config interface{}) error {
return p.BasePlugin.LoadConfig(config)
}
func (p *MyPlugin) SaveConfig(config interface{}) error {
return p.BasePlugin.SaveConfig(config)
}Error Handling
Standard Error Types
go
func (p *MyPlugin) someOperation() error {
// Configuration error
if p.config == nil {
return errors.New("plugin not configured")
}
// Validation error
if !isValid(input) {
return errors.New("invalid input format")
}
return nil
}Next Steps
- Frontend Development - Build plugin UI
- Backend Development - Implement server logic
- Package & Publish - Deploy your plugin
- Development Workflow - Development best practices
