从请求体中提取变量

时间:2014-03-12 20:05:07

标签: apigee

我想从请求的JSON主体中获取变量。目前,我在请求预流程中有这个提取变量策略:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="true" enabled="true" name="extractvariables-grabrequestpayload">
<DisplayName>ExtractVariables-GrabRequestPayload</DisplayName>
<Source clearPayload="false">request</Source>
<FaultRules/>
<Properties/>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
<JSONPayload>
    <Variable name="payload">
        <JSONPath>$</JSONPath>
    </Variable>
    <Variable name="method">
        <JSONPath>$.method</JSONPath>
    </Variable>
</JSONPayload>
<VariablePrefix>myprefix</VariablePrefix>

示例请求正文如下:

{   “方法”:“取消”,   “params”:{     “分区”: “05”,     “itemnumber”:“1”,     “收件人号码”:“1”,     “SKU”: “0JAX330000”   } }

但是,我没有看到跟踪中的变量,即使我可以看到content.request正确地填充了上面的JSON并且正在执行策略。我看不到任何从请求体中获取此信息的引用,只有响应。这不可能吗?

4 个答案:

答案 0 :(得分:1)

很少有尝试:

  1. Content-Type必须为application/json才能使apigee jsonpath提取工作
  2. 下载调试跟踪。在XML文件中查找<Point id="Execution"><Property name="stepDefinition-name">extractvariables-grabrequestpayload</Property>。这是您的提取变量策略执行步骤。这里的Point id检查VariableAccess元素。如果有任何设置,它将在这里显示。像<Set name="extractvariables-1.invoked" success="true" value="true"/>一样。这表示策略已成功执行,并且是否已设置任何变量。
  3. 也尝试使用$。&#39;&#39;用于选择整个有效载荷。 (两个单引号,内容为空。)
  4. 为了确保提取了任何变量,您可以在此之后在策略中使用该变量。这也应该在调试日志中打印出变量访问。

答案 1 :(得分:0)

您使用的是经典(较旧)版本的跟踪工具吗? 您可能想尝试点击&#34;尝试新的BETA版本TRACE&#34;在右上角。 如果使用它会显示您正在寻找的变量,请告诉我。

答案 2 :(得分:0)

ExtractVariables策略不会通过UI显示变量。您可以使用JavaScript策略调试代码并显示这些变量。此策略应在ExtractVariables策略之后执行。然后跟踪工具应显示变量。

context.getVariable('myprefix.payload');
context.getVariable('myprefix.method');

您还可以设置另一个变量来查看实际值:

context.setVariable('method-in-JavaScript', context.getVariable('myprefix.method') )

答案 3 :(得分:0)

调试内联变量的另一种方法显示在变量sample proxy:

https://github.com/apigee/api-platform-samples/tree/master/sample-proxies/variables

将变量写入响应HTTP标头可能很有用,这样您就可以在迭代时立即看到新JSONPath的结果。