Ibm cloud 如何在以下组装步骤中访问invoke response对象变量
我的API Connect API的程序集包含两个调用。第一种是调用内部路由API以获取一些路由信息。此路由API的响应不应传递给第二个调用 如果我没有在路由API的调用中配置“response object variable”,那么原始请求主体将被覆盖,第二个API将从路由API获取结果作为请求主体。如果我在路由调用中指定了一个“response object variable”,我将无法在以下步骤中访问该变量的内容(json) 我如何解决这个问题Ibm cloud 如何在以下组装步骤中访问invoke response对象变量,ibm-cloud,ibm-datapower,apiconnect,Ibm Cloud,Ibm Datapower,Apiconnect,我的API Connect API的程序集包含两个调用。第一种是调用内部路由API以获取一些路由信息。此路由API的响应不应传递给第二个调用 如果我没有在路由API的调用中配置“response object variable”,那么原始请求主体将被覆盖,第二个API将从路由API获取结果作为请求主体。如果我在路由调用中指定了一个“response object variable”,我将无法在以下步骤中访问该变量的内容(json) 我如何解决这个问题 Thx 4帮助。不依赖于读取请求对象,您可以
Thx 4帮助。不依赖于读取请求对象,您可以稍后在流中读取配置的“响应对象变量”。例如,如果您的第一次调用将响应对象变量设置为“resp1”,那么您可以稍后在流中使用“$(resp1.body)”访问JSON负载。使用此技术将允许您将每个调用的响应存储在单独的对象中,从而避免覆盖问题。这些响应对象变量可以像流中的任何其他上下文变量一样读取 有关更多信息,请查看知识中心中的以下链接: 调用策略: 上下文变量:
我不明白这部分: […]”如果我在路由中指定了“响应对象变量” 调用时,我无法访问 以下步骤。”[……] 为什么不能在以下步骤中访问此变量的内容
保存请求的副本。。。 。。。你收到的。我要做的是始终将调用中接收的数据的副本保存到已处理的变量,而不是原始请求 在您的GatewayScript中,尝试以下操作:
let objRequest = apim.getvariable("request");
let body = null;
在这里,我建议您将主体(如果是json)更改为标准js对象
if(objRequest && objRequest.hasOwnProperty("body")){
try{
body = JSON.parse(objRequest.body);
}catch(e){
body = objRequest.body;
}
}
在将整个对象保存为全局变量之前,请记住对其进行字符串化。是存储它的唯一方法(因为您只能在此类变量中存储字符串值)
检索请求的副本。。。
…保存在全局变量中后,您可以通过以下方式从任何其他网关脚本获取它:
let objRequest = JSON.parse(apim.getvariable("objRequest"));
请注意不要将现有名称分配给apim.setvariable(名称、值),因为如果使用“request”作为名称而不是“objRequest”(或其他),将替换原始的request元素,我们不希望发生这种情况
如果您需要设置或检索状态。代码。。。 …您可以通过以下方式完成:
let statusCode = objRequest.body.status.code;
好的,谢谢。这对身体很有效。但是现在我遇到了status.code的问题。第一次调用/响应的status.code似乎被发送回API调用方。$(resp1.status.code)也应该工作吗?或者如何访问调用响应的status.code?
let statusCode = objRequest.body.status.code;