背景
API Connect 2018 为网关提供了两个选项。
(1) DataPower Gateway - v5 兼容
此网关与 APIC v5 兼容,因此 GatewayScript 策略也是如此。您无需执行任何额外操作即可使用 apim.setvariable,而在 v5 中您不需要这样做。
(2) DataPower API 网关
这是 APIC 2018 中提供的新网关。它提供了许多界面改进。性能、可调试性等。它不完全向后兼容。您似乎正在使用这个新网关。
APIGW 选项
对于 GatewayScript 策略中的 apim.setvariable 特定示例,您有两个选项,同时仍使用此 APIGW:
(选项 1):移植您的 GatewayScript 代码以在新 API Gateway 中使用 GatewayScript 中提供的新功能。这些应该有更好的接口,更好的性能,并修复了许多错误。一般来说,它们记录在这里:https://www.ibm.com/support/knowledgecenter/en/SS9H2Y_7.7.0/com.ibm.dp.doc/context_apigw_js.html
您正在寻找在 API 上下文中设置变量的特定函数记录在此:https://www.ibm.com/support/knowledgecenter/en/SS9H2Y_7.7.0/com.ibm.dp.doc/context_apigw_js.html#context.set
要像上面的示例那样在 API 上下文中设置一个变量,它可能是:
context.set('message.body',"hello there!");
(选项 2):如果您想使用新的 APIGW 获得其他优势,但您也有没有太多时间移植的 GatewayScript 策略,并且您愿意保持较低的性能等。暂时在 API 的那一部分,然后对于那些 GatewayScript 策略,您可以在 APIGW 的 GatewayScript 策略实现中使用Compatibility Layer。
这会减少您的整体移植时间,但可能仍需要对脚本进行一些更改。
要使用此Compatibility Layer,请将显式行var apim = require('apim'); 添加到GatewayScript,然后您可以使用apim 向后兼容函数。
例如,在您的问题中:
var apim = require('apim');
var req=apim.setvariable('message.body',"hello there!");
为什么要强制你添加额外的行?
原因之一是它可以帮助您确保不会在您为 API Connect 2018 及更高版本编写的新 GatewayScripts 上意外使用 Compatibility Layer。虽然旧功能仍然可用,但默认情况下它会尝试帮助您仅使用更高性能的新功能。需要时,只需在脚本顶部多出一行。
总结
总体而言,API Connect 2018 为您的旧 APIC v5 GatewayScript 策略提供了三个选项: