查看原文
其他

【集成】API 参数映射之 JavaScript引擎介绍

张同学 明源云天际PaaS平台 2022-09-10

01背景在大家使用集成平台的过程中,会使用到自定义api、事件、服务流等功能,常常会用到参数映射、或返回值转换等。这里面除了直接选择值、固定值外,还提供了自定义表达式的方式为大家提供了自定义扩展的开放功能。考虑到公司内部的技术背景是以.net为主,所以我们初期一直使用的是Razor的解析引擎,但由于Razor脚本的使用方法较为复杂不直观,许多小伙伴反馈不太会用。经过了许多使用者的反馈和竞品分析,我们提供了javascript引擎解析作为我们自定义表达式的另外一个解析方式。
02使用的组件JavaScriptEngineSwitcher : 一个流行 JavaScript 引擎基本功能的统一接口Microsoft.ClearScript : 官方提供的支持V8的一个.net library
03如何使用1、初识我们进入到表达式界面中,选中javascript引擎,默认是有一段脚本,定义一个变量,再返回这个变量。其实内部做了一层封装,这块代码区域的内容都会作为一个function到引擎中执行。如下面所示:
(function(){ var output = ""; //自定义代码...... return output;})()

2、上下文变量表达式左侧为上下文变量,上下文变量来源于很多地方:
  • 例如我们api的参数定义、事件的参数定义、服务流前面步骤的一些运算结果、请求结果、自定义变量等。
  • 另外一部分来自于在api、服务流中前面步骤使用到的连接上下文,例如http连接的Url等等。
  • 还有一些是方案中定义的方案变量。
这些可用的变量都会展示在左侧,可以通过展开,折叠、下拉等方式来查看。在自定义表达式的代码区域获取到这些变量的方式非常简单。直接双击想要的变量,或者从左侧将变量拖至代码区域即可。拖过来后的表现形式为 _getContext('变量路径'),_getContext是一个内置的系统函数,用处是将变量的路径进行解析,从上下文对象中准确获取到想要的变量值。
3、内置函数表达式右侧为系统内置函数,系统按照用图分类定义了一些函数,让用户省去了很多麻烦的低级处理,更方便的完成我们的业务。这些函数参考的IBM服务流竞品,函数的使用方式和效果和Jsonata提供的函数一致,我们可以查看文档的函数部分来熟悉这些函数的用法。
4、其他我们收集了其他使用者的意见,还在引擎中还内置了 lodash 工具库,进一步让js表达式的使用变得更加简单了Lodash 通过降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单。Lodash 的模块化方法 非常适用于:
  • 遍历 array、object 和 string
  • 对值进行操作和检测
  • 创建符合功能的函数
04常见问题Q:output 可以定义成其他类型吗?A:完全可以,可以定义成任何js类型,最终return后,结果会经过JSON.stringify进行序列化。
▼往期精彩回顾▼【建模】用户自定义搜索条件,检索效率快人一步
【建模】列表编辑模式,你知道多少?
移动新玩法,0代码实现已有业务的实时在线
▼更多技术分享可关注明源技术团队▼技术分析|在 Nginx 服务器启用 GZip 压缩的实践
技术分享|NodeJS分布式链路追踪实现
技术分享|文件预览方案在应用市场的落地

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存