我的API Connect API程序集包含两个调用。第一种是调用内部路由API来获取一些路由信息。此路由API的响应不应传递给第二个调用。
如果我没有配置一个'响应对象变量'在路由API的调用中,原始请求主体被覆盖,第二个API从路由API获取结果作为请求主体。如果我指定一个'响应对象变量'在路由调用中,我无法在以下步骤中访问此变量的内容(json)。
我该如何解决这个问题?
Thx 4帮助。
答案 0 :(得分:1)
您可以从已配置的'响应对象变量'中读取,而不是依赖于读取请求对象。后来在流程中。例如,如果您的第一次调用将响应对象变量设置为' resp1',则可以使用' $(resp1.body)'来访问JSON有效内容。后来在流程中。使用此技术将允许您将每个调用的响应存储在单独的对象中,从而避免覆盖问题。这些响应对象变量可以像流中的任何其他上下文变量一样被读取。
有关详细信息,请查看知识中心中的以下链接:
答案 1 :(得分:0)
我不明白这部分内容:
[...]“如果我在路由中指定了“响应对象变量” 调用时,我无法访问该变量的内容(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;
}
}
在将其保存为全局变量之前,请记住对整个对象进行字符串化。是存储它的唯一方法(因为您只能在这种变量中存储 string 值)
apim.setvariable("objRequest", JSON.stringify(objRequest));
...您已保存在全局变量中,可以通过以下方式从所需的任何其他GatewayScript中获取它:
let objRequest = JSON.parse(apim.getvariable("objRequest"));
请注意不要将现有名称分配给 apim.setvariable(name,value),因为如果您将“ request”用作 name 而不是“ objRequest”(或其他),您将替换原始的 request 元素,我们不希望发生这种情况。
...您可以使用:
let statusCode = objRequest.body.status.code;