我们刚刚在我们的网站上安装了API 2018版本(安装在Openshift中),并试图遵循我在IBM教程中找到的一些示例。我的问题是我根本不能使用Gatewayscript策略,因为apim似乎根本没有定义。
我正在尝试一个简单的:
var req=apim.setvariable('message.body',"hello there!");我得到的确切错误是: GatewayScript错误: GatewayScript处理错误'ReferenceError: apim没有定义。这里遗漏了什么?为什么在所有的教程中似乎都定义了"apim“,而在我们的安装中却没有定义?
发布于 2019-01-15 22:05:34
背景
API 2018为网关提供了两个选项。
(1) DataPower网关- v5兼容
此网关与APIC v5兼容,因此GatewayScript策略也是如此。您不需要做任何额外的事情就可以使用apim.setvariable,就像在v5中不需要做的那样。
(2) DataPower API网关
这是一个新的网关,可在2018年APIC上使用。它在界面上提供了许多改进。性能、可调试性等。它不是完全向后兼容的。你似乎在使用这个新的网关。
APIGW选项
对于apim.setvariable策略中的特定示例,您有两个选项,同时仍然使用此APIGW:
(选项1):将GatewayScript代码移植到新的API中使用GatewayScript中可用的新函数。这些应该有更好的接口,更好的性能,并有许多错误修复。一般来说,它们是在这里记录的:js.html
您希望在API上下文中设置变量的特定函数记录在这里:js.html#context.set。
要在API上下文中设置一个变量,如上面的示例所示,可能是:context.set('message.body',"hello there!");
(选项2):如果您想使用新的APIGW作为其他优势,但是您也有GatewayScript策略,您没有太多的时间进行移植,并且您愿意暂时保持较低的性能等等,那么对于这些GatewayScript策略,您可以在APIGW的GatewayScript策略实现中使用Compatibility Layer。
这减少了您的整体移植时间,但可能仍然需要对脚本进行一些更改。
若要使用此Compatibility Layer,请向GatewayScript添加显式行var apim = require('apim');,然后可以使用apim向后兼容的函数。
例如,在您的问题中:
var apim = require('apim');
var req=apim.setvariable('message.body',"hello there!");为什么强迫你多加一行呢?原因之一是它有助于确保您不会意外地在您为API 2018及以后编写的新Compatibility Layer上使用该GatewayScripts。虽然旧函数仍然可用,但默认情况下,它只会帮助您使用性能更高的更新函数。当需要时,它只是在脚本顶部的额外一行。
摘要
总的来说,对于旧的APIC v5 GatewayScript策略,您可以使用APIC 2018的三个选项:
require行,并且有一个非常容易移植的体验。https://stackoverflow.com/questions/53727406
复制相似问题