如何强制apigee代理将目标URL的响应URL重写为具有基本路径的代理URL

时间:2014-09-10 11:40:18

标签: apigee

我为我的REST API创建了代理:

直接调用目标端点时,例如:

POST http://products.example.com/items 

你会得到像这样的位置标题的回复

http://products.example.com/items/123131

但如果我通过代理:

POST http://example.apigee.net/products/v2/items 

然后新创建的资源的位置标头仍指向目标网址:

http://products.example.com/items/3423423

但我希望得到

http://example.apigee.net/products/v2/items/3423423

问题是:如何配置代理以重写URL以响应代理URL?

2 个答案:

答案 0 :(得分:1)

不确定这是否有用,但我在How do you correctly return Location headers and do HATEOAS with Apigee?向你提出了一个非常类似的问题。我们最终需要编写自己的策略,该策略执行简单搜索并替换从目标服务器收到的响应。如果提供开箱即用的东西会很好。

答案 1 :(得分:0)

Apigee代理允许您在流的响应部分添加策略。示例如下:

<Flows>
        <Flow name="myFlow">
            <Description></Description>
            <Request/>
            <Response>
               <Step>
                    <Name>ModifyLocationHeaderPolicy</Name>
               </Step>
            <Response/>
        </Flow>
</Flows>

我建议你添加一个javascript或python或java callout策略,它将读取响应的Location头并重新编写它。在Javascript

中有如下效果
locationHeader = context.getVariable("message.header.Location");
// modify it
 context.setVariable("message.header.Location", locationHeader);