首页 搜索 关于
ivx编辑器功能组件学习:服务组件
ivx编辑器功能组件学习:服务组件
November  2  2021 学习 Admin

服务是实现ivx前端应用与后台数据库之间数据交互的媒介,其工作原理是前端发起服务请求,服务启动,向后台传递增删查改等处理需求,并将处理结果通过参数进行返回;前端可通过服务回调获取到服务的返回参数、运行状态等。如果把前端应用比作餐厅中正在点餐顾客,把后台数据库比作餐厅的后厨,那么服务就是为客户记录点餐、向后厨传递点餐信息、并最终将菜品递送到客户餐桌的服务员。

服务组件



服务隔绝了应用的前后端,保障了前后端数据交互的安全性,实现了交互状态的可监控性。同时由于服务的本质是一个动作组,合理设计服务可实现逻辑复用,进而降低项目复杂度,增强项目的可读性和易维护性。
传统的前后端数据交互是通过独立事件实现的,通信效率较低,保密性较差,对于可能会出现的数据丢失、通信意外终止等情况也无法进行监测
如下图所示,将用户组件的退出登录动作放在名为“用户退出”的服务中:

该服务可以被当前应用调用,例如在按钮被点击以及其他事件触发时被调用:

此外,服务还可以转为标准的Restful API,从而实现当前应用与其他应用之间的数据交互。

基本用法

服务是后台组件,使用时需要添加在后台目录下。尽管某些场景使用服务时无需设置参数即可完成(如上述“用户退出”的例子),绝大多数情况下的服务调用都需要设置接收参数和返回参数才能完成。例如:在前端输入框内键入姓名,点击按钮,在后台查询该姓名对应的年龄,将年龄返回至前端,并在浏览器Console中打印。该功能可通过以下步骤实现:

Step1 组件的添加
在前台目录下添加输入框组件和按钮组件,在后台目录下添加数据库组件和服务组件,给按钮组件添加事件。添加后的对象树如下:

Step2 数据表的编辑
点击数据库组件,给数据表添加“姓名”和“年龄”两个字段,数据类型分别为“文本”和“整数”,并给数据表插入一些数据。有关数据库的操作请见数据库的相关章节,编辑后的数据表如下:

Step3 服务的编辑
点击服务组件,点击面板上参数区域的加号“+”创建接收参数和返回参数,分别命名为“接收姓名”和“返回年龄”;将数据库的查询逻辑写入服务的主体中,注意使用“接收姓名”来筛选“姓名”字段,并在数据库回调中,通过“当前服务-设置返回结果”对“返回年龄”进行赋值。有关数据库的动作逻辑请见数据库的相关章节,编辑后的服务面板如下:

Step4 服务的调用
前后台均可对服务结果进行调用。在本例中,服务是在按钮被点击时调用的,即在按钮的点击事件中调用服务,将输入框的内容作为接收参数,并在回调中引用返回参数:

多次返回与中断

当服务内有多个“设置返回结果”时,返回值会依次被覆盖,即最后一次执行的“设置返回结果”有效。
如下图中所示的服务,最终在回调中得到的返回结果是“第二次”:

如果希望服务在某些情况下中止执行,需要使用“设置返回结果并中止服务”。将上例中条件语句下的“设置返回结果”改为“设置返回结果并中止服务”,则最终在回调中得到的返回结果是“第一次”:

请注意,在执行循环语句的过程中,服务是无法中止的。例如下图所示,最终在回调中得到的返回结果是“2”:

公共服务: 服务转API

为了使当前应用内的数据库能够被其他应用共享,一种方法是在创建数据库时添加“账号数据库”或“企业数据库”。这两种数据库组件可以实现一定范围内的应用间数据共享,且共享时的数据操作不受限制,即提供了共享的灵活性,也带来一定的数据安全问题。

账号数据库是iVX个人账号所拥有的组件,可以被同一个iVX个人账号下的所有应用共享;企业数据库是iVX企业子账号所拥有的组件,可以被同一个iVX企业主账号下所有子账号下的所有应用共享。共享这两种数据库时需要将其添加到目标应用的对象树中,再适当编写动作逻辑,因此不能被非iVX应用共享。

另一种方法是将需要被共享的数据操作添加到服务中,再将该服务发布为API,通过调用该API即可实现当前应用与任何应用之间的数据交互,且目标应用不必是iVX应用,也不必与当前应用同属一个iVX账号之下。服务转API的方式极大程度的扩展了应用间数据的共享范围,并且通过对数据操作进行限制,提高了数据的安全性。

继续引用上述根据姓名查找年龄的例子。如下图中所示,打开服务面板最上端的“设为公共服务”开关后,右侧出现服务路径,格式为https://v4rel.h5sys.cn/api/xxxxxxxx,在其后的输入框中为该API方法定义一个名称getAge,保持最右侧的返回类型为JSON:

路径https://v4rel.h5sys.cn/api/10472767/getAge即为该服务转为API后的接口URL,Body参数为原服务的接收参数,即“接收姓名”,当前应用发布后该URL即可生效。如果在另一iVX应用中对该API进行调用,可以先在另一应用的前台目录下添加API组件,再对API组件进行如下编辑,调试并得到返回结果:

注意:

将一个服务设置为公共服务后,服务的参数将不会加密;
如果公共服务所在的应用没有进行发布编译,而是进行了预览编译,那么需要将接口URL中的子域名v4rel替换为v4pre,即接口URL格式变为https://v4pre.h5sys.cn/api/xxxxxxxx/xxxx;
如果公共服务所在的应用在"配置"中设置了自定义域名,公共服务的域名将会替换为设置的自定义域名;
公共服务固定以POST方式请求JSON数据,请合理组织划分公共服务;
服务内的逻辑改变时,需重新预览或发布当前应用后,公共服务才能生效,否则将会返回function not found:

服务的日志

iVX提供服务日志功能,可记录每个服务详细的调用流程,包括入参、出参、内部调用结构,以及自定义的日志信息。

由于服务日志会有一定的资源消耗,因此我们需要手动打开日志功能:

在后台根,我们可以通过“启用日志”的开关,来打开日志功能。打开日志之后,当前应用下所有的服务都会开始进行日志记录。注意,日志的开关是针对每个应用的,无法针对单个服务来启动/停用日志。

启用日志之后,我们可以在每个服务的日志入口查看服务的调用日志:

日志面板中,系统会自动记录每个服务的调用记录,包括服务调用的时间、响应级别(包括信息、警告、错误三种)与运行时长。我们还可以进一步展开每一个服务调用记录,来查看当前服务的入参和出参。

除了基础日志,我们还可以选择更详细的日志选项:

如上图所示,我们可以在后台根的日志配置属性中,额外选择需要详细记录的后台服务类型,包括数据库、API、快表等常见逻辑单元,也添加自定义的日志主题,在服务中使用“记录日志”的动作,来手动记录日志,类似前台的console log(控制台调试记录)。

选项了详细的日志子项之后,日志的详情面板就会显示更详细的调用步骤了:

上一篇: ivx后台组件:数据库组件

下一篇: iVX个人作品开发记录:验机助手(整体开发思路)001

推荐阅读

添加新评论