我需要调用使用GET的遗留API。 我的API代理使用POST。
我尝试在AssignMessage
中使用:
<AssignTo type="request" createNew="false"/>
和
<Set> ... <Verb>GET</Verb>
但它仍然在目标API上进行POST。
转换的正确方法是什么?
网关会自动将POST表单参数转换为GET查询参数吗?
GET和POST message.queryparam
是否相同?
答案 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>