Skip to content

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: 3600

Backend 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