2014-09-10 13 views
1

我创建的代理我的REST API的基本路径:如何强制apigee代理从目标URL网址响应改写为代理网址与

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

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

你会得到响应与位置标头这样

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

但是,如果我去通过代理:

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

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

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

但我预计会得到

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

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

回答

0

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

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

我建议你添加将读取响应的Location头,重新写一个JavaScript或Python或Java标注的政策。东西像下面的效果在Javascript

locationHeader = context.getVariable("message.header.Location"); 
// modify it 
context.setVariable("message.header.Location", locationHeader); 
+0

谢谢。我希望我不必手动编写代码。我的问题是如此罕见,以至于没有内置的策略? HATEOAS呢?没有人与apigee一起使用它? 那么从apigee: 这个声明怎么样?尽可能使用现成的策略,并避免在JavaScript中编写所有API代理逻辑的诱惑。尽管Apigee Edge利用编译后的JavaScript来提高性能, JavaScript不可能像政策一样执行。“ 来源:http://apigee.com/docs/api-services/content/programming-api-proxies-javascript – 2014-09-11 20:43:22

+0

@Pitor Bochynski - 我完全同意你的观点。这并不罕见。 – 2014-09-12 05:30:43