一个 API 代理调用两个不同的目标端点

问题描述 投票:0回答:3

我刚刚开始使用 Apigee。 我想创建一个 API 代理,它将根据“if”条件调用两个目标端点。 我已经创建了一个 API 并向其中添加了资源,但问题是在这种情况下我得到了两个 API。 如果type='abc'目标点应该是target1 如果 thetype='xyz' 目标点应该是 target2 谁能告诉我如何继续吗?

apigee
3个回答
4
投票

查看这个问题的答案。此处列出了查找 RouteRules 的详细信息。 ProxyEndpoint 文档也会很有帮助。

您可以使用此代码完成您正在尝试的事情:

<RouteRule name="routeToTarget1">
    <Condition>thetype == "abc"</Condition>
    <TargetEndpoint>target1</TargetEndpoint>
</RouteRule>
<RouteRule name="routeToTarget2">
    <Condition>thetype == "xyz"</Condition>
    <TargetEndpoint>target2</TargetEndpoint>
</RouteRule>

这些 RouteRules 将按顺序进行评估。

请注意,您可能希望底部 RouteRule 没有条件,这意味着它将始终匹配。当类型不等于“abc”或“xyz”时会发生什么?假设 target1 是默认值,您的代码将如下所示:

<RouteRule name="routeToTarget2">
    <Condition>thetype == "xyz"</Condition>
    <TargetEndpoint>target2</TargetEndpoint>
</RouteRule>
<RouteRule name="routeToTarget1">
    <TargetEndpoint>target1</TargetEndpoint>
</RouteRule>

0
投票

如果您使用 API 代理编辑器 UI,则可以执行以下操作:

(1) 从 API 代理编辑器工具栏中选择 New / New Resource

然后你会看到这个: enter image description here

(2) 对于输入字段可选目标 URL,输入与该资源对应的目标 URL。

此工具将为该资源生成一个条件流,您可以选择附加特定于资源的策略。

此工具还将添加所需的路由规则,生成的 XML 将如下所示:

<ProxyEndpoint name="default">
    <RouteRule name="Resource-1">
        <Condition>(proxy.pathsuffix MatchesPath &quot;/someResource&quot;) and (request.verb = &quot;GET&quot;)</Condition>
        <HTTPTargetConnection>
            <URL>http://myAlternateEndpoint</URL>
        </HTTPTargetConnection>
    </RouteRule>
    ....

0
投票

关于迈克·邓克的回答,我想再编辑一件事 您必须在 /apiproxy/targets/ 文件夹中再添加一个 xml 文件,该文件的名称将为 target2.xml 和 target1.xml 以及 targetendpoint 的内部文件名: 目标2或目标1 新的 xml 文件内容与 default.xml 相同,其中包含您要添加到新 targetEndPoints 中的更改

© www.soinside.com 2019 - 2024. All rights reserved.