【问题标题】:Apigee - modify target path when using targetserverApigee - 使用 targetserver 时修改目标路径
【发布时间】:2014-09-02 08:59:42
【问题描述】:

我有一个 API 代理,它需要能够修改最终目标 URL 的路径组件。如果为整个代理定义了目标端点 URL,但我们使用的目标服务器和虚拟主机显然是在 TargetEndpoint PreFlow 之后分配的,这看起来相当简单

我在目标端点 PreFlow 中有一个 JS 函数,当我尝试修改 context.targetRequest.path 时出现未指定的 JS 错误。在 Proxy PreFlow 期间尝试修改传入代理的路径部分也失败了。

转储 targetRequest 的值给出:

  1. 主机=空
  2. path=/v2/cat1/cat2/?param=......
  3. url=与路径相同!

我能够“成功”修改的唯一变量是 targetRequest.url 以实现我的目标,但为此我必须分配整个内容,包括我不知道的协议和主机!

有人知道怎么做吗?我本质上想修改替换“/?”的路径只有“?”

谢谢

【问题讨论】:

    标签: proxy apigee


    【解决方案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 的存在,这不是一个可行的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2015-06-26
    • 2014-12-06
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多