我需要调用一个使用 GET 的遗留 API。我的 API 代理使用 POST。
我尝试使用AssignMessage
:
<AssignTo type="request" createNew="false"/>
和
<Set> ... <Verb>GET</Verb>
但它仍然在目标 API 上进行 POST。
正确的转换方法是什么?网关会自动将 POST 表单参数转换为 GET 查询参数吗?message.queryparam
GET 和 POST 都一样吗?
我需要调用一个使用 GET 的遗留 API。我的 API 代理使用 POST。
我尝试使用AssignMessage
:
<AssignTo type="request" createNew="false"/>
和
<Set> ... <Verb>GET</Verb>
但它仍然在目标 API 上进行 POST。
正确的转换方法是什么?网关会自动将 POST 表单参数转换为 GET 查询参数吗?message.queryparam
GET 和 POST 都一样吗?
将动词从 转换POST
为 时GET
,该策略不会自动将表单参数转换为查询参数。您将需要使用策略的<Add>
和/或<Remove>
功能AssignMessage
来进一步处理消息。在AssignMessage
策略中使用示例添加查询参数,引用表单参数:
<Add>
<QueryParams>
<QueryParam name="q1">{request.formparam.q1}</QueryParam>
</QueryParams>
</Add>
另外,在您的问题中,您提到 API 代理使用 as 方法接受请求POST
。然后,您需要设置一个策略GET
:
<Set> ... <Verb>GET</Verb>
但它仍然在目标 API 上执行 GET。
有什么问题?这不是你所期待的吗?请求进入 Apigee API 代理POST
,代理将方法(动词)转换为GET
,并使用 将请求发送到后端遗留 API GET
。
注意:<AssignTo>
在 AssignMessage 中是可选的。如果方法设置不正确,请尝试将其忽略。如果它不存在,则流中当前点的消息将被修改。
将此预定义变量更改为发布
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>