我最近开始使用apigee代理。请不要阻止我。 我正在使用邮递员将数据发布到代理中。 我分配了一个提取策略来从json数据中提取一些值,例如 速度,纬度,经度等 然后,我已根据客户端要求使用了分配策略将速度转换为gpsspeed等。 之后,如果速度高于50,则我使用javascript策略输出,然后高于或低于。 我正在举例说明数据。 现在我想将结果数据转发到另一个api。也许是apigee提供的用于测试目的的任何东西。我想查看结果api中的数据。 我使用服务调出策略将数据发送到另一个URL。 我附上了政策。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ServiceCallout-GeocodingRequest1">
<DisplayName>Inline request message</DisplayName>
<Request variable="callAnotherService">
<Set>
<Payload contentType="application/json">
{response.content} // reading data from javascript policy
</Payload>
</Set>
</Request>
<Response>CalloutResponse</Response>
<Timeout>30000</Timeout>
<HTTPTargetConnection>
<URL>http://httpbin.org/anything</URL>
</HTTPTargetConnection>
var content = context.getVariable("response.content") //read the response
content = JSON.parse(content); //parse into an object
if (content.speed > 50) { //apply the condition
content.speed = "high";
}
else {
content.speed = "low";
}
context.setVariable("response.content", JSON.stringify(content)); //set it
back on the response
有人可以帮助我如何将数据转发到另一个api?我的过程正确吗?从Java脚本策略中提取变量的过程正确吗?请指导我。
答案 0 :(得分:1)
好的,如果您确定setVarible之后的值不为空,请尝试下面的代码。
注意::在您的JavaScript策略中,将值重新设置为变量名后(不引起混淆),我更改了变量名。
var content = context.getVariable("response.content") //read the response
content = JSON.parse(content); //parse into an object
if(content.speed > 50){
content.speed = "high";
}
else{
content.speed = "low";
}
context.setVariable("serviceCalloutRequest", JSON.stringify(content)); //I have changed from "response.content" to "serviceCalloutRequest"
并在“服务调用策略”中尝试以下操作:
<Request clearPayload="true" variable="callAnotherService">
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<Set>
<Payload variablePrefix="@" variableSuffix="#">@serviceCalloutRequest#</Payload>
<Verb>POST</Verb>
</Set>
</Request>
使用 variablePrefix 和 variableSuffix 来引用您在javascript策略中分配的值,在这种情况下,我指的是“ serviceCalloutRequest”。