这是我参与「第五届青训营 」笔记创作活动的第六天,在今天的学习中,主要了解了规则引擎的原理以及应用场景等。在课后作业中,要求我们结合前面学过的知识来完善给出的规则引擎,下面我们来试着分析完成它。
作业过程
首先我们部署好本地环境及其项目,简单浏览一遍代码后可以发现,项目的接口仅实现了第一个,也就是简单的直接表达式执行。而剩下的四个接口则需要我们自己去完善,简单概括接口功能如下:
| 接口 | 接口类型 | 功能 |
|---|---|---|
/api/engine/exp/new | POST | 新增表达式到数据库中,并返回id |
/api/engine/exp/list | GET | 列出数据库中所有表达式 |
/api/engine/exp/:id | DELETE | 删除数据库中指定id的表达式 |
/api/engine/exp/run | POST | 给出程序与指定表达式id,返回执行结果 |
然后接下来的问题就是数据库内容未知,我们继续浏览代码可以看到如下sql文件以及配套好的四个函数:
实际上看到这里也能发现,需求的功能大部分都已经帮我们实现好了,包括数据库的处理以及HTTP服务路由的搭建等,我们仅需实现的就是合理地调用函数返回结果即可。
由于本人码风较丑,下面仅提出一些注意的点,具体代码不作展示:
1、由于文档中示例错误码全为-1,与代码中定义的常量不同,这里考虑使用代码中的常量以便区分。
2、删除操作需要先调用按ID查询的函数再调用删除函数,否则删完不返回数据
3、执行表达式的操作直接利用写好的HandleRunRule函数,注意搞清楚对应的参数即可
4、未完成的点:返回的信息是Unicode码,暂时没有较好的方法统一转换
作业成果:
1、新增表达式接口:
2、查询表达式接口:
3、删除表达式接口:
4、执行表达式接口: