当请求是POST时,在Apigee HTTPTargetConnection上调用GET

时间:2014-01-21 12:13:32

标签: apigee

我需要调用使用GET的遗留API。 我的API代理使用POST。

我尝试在AssignMessage中使用: <AssignTo type="request" createNew="false"/>

<Set> ... <Verb>GET</Verb>

但它仍然在目标API上进行POST。

转换的正确方法是什么? 网关会自动将POST表单参数转换为GET查询参数吗? GET和POST message.queryparam是否相同?

2 个答案:

答案 0 :(得分:3)

将动词从POST转换为GET时,策略不会自动将表单参数转换为查询参数。您需要使用<Add>政策的<Remove>和/或AssignMessage功能来进一步操纵邮件。在AssignMessage策略中使用示例添加查询参数,引用formparams:

<Add>
    <QueryParams>
        <QueryParam name="q1">{request.formparam.q1}</QueryParam>
    </QueryParams>
</Add>

此外,在您的问题中,您提到API代理使用POST方法接受请求。然后,您有一个设置GET的政策:

  

<Set> ... <Verb>GET</Verb>

     

但它仍然在目标API上进行GET。

有什么问题?这不是你所期待的吗?该请求以POST的形式进入Apigee API代理,代理将方法(动词)转换为GET,并使用GET将请求发送到后端旧API。

注意:<AssignTo>在AssignMessage中是可选的。如果方法设置不正确,请尝试将其保留。如果没有,流程当前点的消息将被修改。

答案 1 :(得分:2)

将此预定义变量更改为发布

request.verb = "GET"

注意:如果执行此操作并且您有基于request.verb =“POST”的流条件,则在响应中无效。因此,您需要在流条件中使用另一个变量。

这是适用于我的政策代码。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="changeverbassignmessage">
    <DisplayName>ChangeVerbAssignMessage</DisplayName>
    <FaultRules/>
    <Properties/>
    <AssignVariable>
        <Name>request.verb</Name>
      <Value>GET</Value>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>