Fresns 命令字扩展插件机制介绍

作者: 唐杰 分类: 产品设计 发布时间: 2021-07-07 22:50

Fresns 是一款免费开源的社交网络服务软件,专为跨平台而打造的通用型社区产品,支持灵活多样的内容形态,可以满足多种运营场景,符合时代潮流,更开放且更易于二次开发。

这一篇给大家介绍一下「命令字」扩展插件机制。

Fresns

Fresns 系统中每一个功能或者每一组功能都可以封装成命令字,一个完整的命令字通讯流程包括请求输入“input”和结果输出“output”。插件将自己的功能封装成一个命令字,在系统内或者跨系统的调用通讯则以 cmd 指令的方式,直接 cmd 插件命令字即可直接通讯和调用插件功能,并且还能指定插件返回的结果数据是任何格式。

命令字开发逻辑:

1、在配置文件中添加命令字,例如 plg_cmd_default 命令字;

2、在配置文件中添加命令字回调函数(函数名自定义命名),用于映射命令字的功能,一个命令字可以映射多个函数,例如 plg_cmd_default => ‘A’ 和 plg_cmd_default => ‘B’ ;

3、开发函数功能,每一个函数代表一个功能点,是具体的功能执行代码,例如 A 和 B 函数,函数 A 功能是为数据库用户表 C 字段数值加 1,函数 B 功能是为数据库用户表 D 字段数值减 1,当 plg_cmd_default 命令字被请求时,则是一同执行函数 A 和 B 的功能,同时为两个字段加和减数值。

命令字使用逻辑:

1、发起请求

软件系统中其他功能或者其他扩展插件,通过调用指令向系统发起请求,系统会根据请求将命令字转发给对应的插件;请求信息包含命令字、请求插件、请求参数(多个)、输出格式要求,下图为 PHP 编程语言的示例,但不局限于 PHP 编程语言。

Fresns命令字

2、系统分发请求

系统检测请求插件是否存在,存在则将请求分发给插件。

3、检查命令字是否存在

插件接受到指令请求后,检查插件中是否存在该命令字(命令字开发逻辑中向系统定义的命令字,通过配置文件查验是否存在),不存在则返回提示信息,存在则执行请求。

4、验证参数正确性和合法性

扩展插件接受到系统分发的命令字请求,首先验证请求的参数是否正确和是否安全。正确性则是验证参数是否匹配所属格式,例如邮箱参数是否是一个正确的邮箱格式,手机号参数是否是一个正确的号码位数,整数参数是否是整数,网址参数是否是网址等等;合法性则是验证参数是否含有危险的入侵和注入性的代码内容,例如 SQL 注入代码;当检查参数有问题时,则返回提示信息,没有问题则执行命令字回调函数。

由于不同的业务场景和业务目的,命令字的参数验证标准也有所不同,所以参数正确性和合法性的验证逻辑由开发者自行定义,可以根据技术框架和业务逻辑灵活定义验证的参数规则;例如以 PHP Laravel 框架为命令字底层技术框架,参数校验可以遵循 Laravel 表单验证标准,验证方法和流程可以直接采用 Lavavel 技术方案。

5、回调命令字映射函数

扩展插件解析请求参数,回调自己映射函数的,执行具体的功能。

6、输出处理结果

扩展插件处理结果后,无论结果是完成,还是中止,都会输出结果;输出结果的格式则根据请求时的要求输出,如果请求时没有要求,或者要求的格式插件不支持,则输出默认格式;输出信息包含状态码、状态描述、结果数据。

命令字框架设计思路

命令字整个使用过程中,插件与插件之间不需要知道对方是什么样的处理逻辑,也无需要经过数据库解析命令,直接通过一个命令字唤起插件功能。

基于大型服务系统的 RPC 思路,设计了独创性的「命令字」框架,通过命令字实现网络通信编程模型,减少处理网络数据的复杂度,提升主程序和插件机制的灵活性,让跨业务跨插件间的交互更方便。从后续的框架扩展来看,单体框架可以支撑多插件,同时后续也能支撑多系统多插件模式,并能以微服务的模式实现系统之间的分布式调用。命令字不仅通信灵活,升级也更方便,当主程序业务或数据库发生变动时,无需插件联动升级,甚至跨编程语言或者 SaaS 运行的时候,也能兼容使用。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

一条评论
  • 王者荣耀

    2022年6月15日 10:48

    命令太难记了

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注