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 时修改目标路径的主要内容,如果未能解决你的问题,请参考以下文章

困惑 - Apigee Api Gateway 和 Apigee Api Proxy 有啥区别?如何使用网关?

GCP端点和Apigee有啥区别

使用 Apigee 作为 Auth0 的身份验证存储替代品

Apigee - SpikeArrest 行为

无法使用 apigeetool 将代理部署到 apigee

在 Apigee 中使用 Query DSL 库的经验