aiway-plugin 0.1.2-alpha.1

The aiway plugin lib
Documentation

插件

插件是网关实现功能扩展的核心组件。插件目前仅支持使用Rust开发,并导出为.so格式的动态库给网关使用。

插件分类

按照插件的执行范围,可以分为全局插件和路由插件。

全局插件

全局插件对整个网关的所有请求生效(不含控制台请求,因为控制台是独立的)。

执行阶段:

  • 请求阶段:在请求到达API处理端点前执行,可对请求改写、安全验证、限流、缓存等。
  • 响应阶段:在API处理完成,响应客户端前执行,可修改响应、记录日志等。

路由插件

对特定路由生效。

路由插件和全局插件实现方式相同,仅执行时机不同。

执行阶段:

  • 请求阶段:在全局插件执行后,到达API处理端点前执行。
  • 响应阶段:在API处理完成,全局插件执行前执行。

注意:全局插件的优先级高于路由插件。

错误处理

插件执行时可能发生错误,当某个插件返回Err时,插件执行流程会中断,整个请求将失败,网关将返回502错误码。

使用方式

use aiway_plugin::protocol::gateway::HttpContext;
use aiway_plugin::serde_json::Value;
use aiway_plugin::{Plugin, PluginError, PluginInfo, Version, async_trait, export, plugin_version};

// 示例插件
pub struct DemoPlugin;

impl DemoPlugin {
    pub fn new() -> Self {
        Self {}
    }
}

#[async_trait]
impl Plugin for DemoPlugin {
    fn name(&self) -> &'static str {
        "demo"
    }

    fn info(&self) -> PluginInfo {
        PluginInfo {
            version: plugin_version!(),
            default_config: Default::default(),
            description: "Demo Plugin".to_string(),
        }
    }

    // 实现插件逻辑
    async fn execute(&self, _context: &HttpContext, _config: &Value) -> Result<Value, PluginError> {
        //println!("run demo plugin, context: {:?}", context);
        //println!("config: {:?}", config);
        Ok(Default::default())
    }
}

// 导出插件
export!(DemoPlugin);

插件仓库

https://github.com/xgpxg/aiway-plugins