Apigee - 使用 targetserver 时修改目标路径
Posted
技术标签:
【中文标题】Apigee - 使用 targetserver 时修改目标路径【英文标题】:Apigee - modify target path when using targetserver 【发布时间】:2014-09-02 08:59:42 【问题描述】:我有一个 API 代理,它需要能够修改最终目标 URL 的路径组件。如果为整个代理定义了目标端点 URL,但我们使用的目标服务器和虚拟主机显然是在 TargetEndpoint PreFlow 之后分配的,这看起来相当简单
我在目标端点 PreFlow 中有一个 JS 函数,当我尝试修改 context.targetRequest.path 时出现未指定的 JS 错误。在 Proxy PreFlow 期间尝试修改传入代理的路径部分也失败了。
转储 targetRequest 的值给出:
-
主机=空
path=/v2/cat1/cat2/?param=......
url=与路径相同!
我能够“成功”修改的唯一变量是 targetRequest.url 以实现我的目标,但为此我必须分配整个内容,包括我不知道的协议和主机!
有人知道怎么做吗?我本质上想修改替换“/?”的路径只有“?”
谢谢
【问题讨论】:
【参考方案1】:您还可以通过利用 Path 元素和 TargetServer 在目标端点设置它:
<TargetEndpoint>
...
<HTTPTargetConnection>
<LoadBalancer>
<Server name="TargetServerABC"/>
</LoadBalancer>
<Path>/v1/YourPathHere/json.ws?flow.company.queryparams</Path>
</HTTPTargetConnection>
</TargetEndpoint>
注意 TargetServerABC 需要是使用以下 these steps 创建的 TargetServer。
【讨论】:
感谢 Diego,这让我找到了解决方案。我将调整后的 proxy.pathsuffix 值(我想在第一个位置修改的变量)放入我自己的变量中,并按照您的建议将其应用于 TargetServer 中的“路径”。同样重要的是设置target.copy.pathsuffix = false
以防止原始(坏)路径后缀也被应用。【参考方案2】:
操作 target.path 似乎存在问题(Apigee 中为此打开了一个错误报告)。
当前的解决方法是在 AssignMessage 策略中使用 AssignVariable 块重写整个 URI:
<AssignVariable>
<Name>target.url</Name>
<Value>http://example.com/mypath?param=value&variable=apigee.variable</Value>
<Ref/>
</AssignVariable>
或者你可以在 javascript 中使用 context.setVariable 函数来实现:
context.setVariable("target.url", mycompleteurl);
【讨论】:
感谢您的回复,但我注意到我可以分配完整的 URL,但考虑到 TargetServers/VirtualHosts 的存在,这不是一个可行的解决方案以上是关于Apigee - 使用 targetserver 时修改目标路径的主要内容,如果未能解决你的问题,请参考以下文章