使用“无目标端点”在现有 API 代理上创建新端点

Posted

技术标签:

【中文标题】使用“无目标端点”在现有 API 代理上创建新端点【英文标题】:Create a New Endpoint on an existing API Proxy with "No Target Endpoint" 【发布时间】:2014-04-29 11:33:39 【问题描述】:

我有一个现有的 apigee API 代理,它有一个默认代理端点和一个连接到我们后端服务器的默认目标端点。它有一个速率限制(配额)策略,并在超出其分配的(每日)配额时向客户端抛出错误。一切都很好并且按预期工作。

现在我想在同一个 API 代理上创建一个新的代理端点(或现有默认代理端点上的一个新资源),但路由到一个“空”目标端点;我基本上只是希望这个新的代理调用返回一个关于调用者当前配额状态的 JSON/JSONP(基本上显示 ratelimit.policy.* 的值,如here 所述)。

实现这一点的最佳方法是什么?

【问题讨论】:

【参考方案1】:

如果您使用的是 UI,您可能不知道 RouteRule 部分在哪里。请参阅下面的蓝色箭头 - 单击“默认”文本以查看整个代理文件。

您可能会在那里看到一个 RouteRule 部分,其中包含 TargetEndpoint 但没有条件。我在它之前添加了一个 RouteRule,名称为“NoTarget”和一个 Condition 但没有 TargetEndpoint。 RouteRules 按从上到下的顺序进行评估,并选择第一个匹配条件。如果满足条件,将使用该目标。没有 TargetEndpoint,就不会调用目标。如果 RouteRule 上没有条件,则始终匹配。

因此,对于上面的示例,如果请求是GET /quotastats,则不会调用目标。否则,它会落入第二个RouteRule,并调用默认目标。

【讨论】:

【参考方案2】:

您可以创建一个新资源,例如“checkQuotaStatus”并执行所有逻辑来获取配额状态,可以将其设置在上下文变量 QuotaUsedCount 中(ratelimit.policy_name.used.count 会给您)。现在,您可以使用流程中的 raisefault 策略引发故障,并将响应状态设置为 200,并将内容设置为您想要响应的变量值,在本例中为 quotaUsedCount。还要确保在您的流程中您不具备此故障规则的任何条件。这样,它每次都会执行引发故障策略,而不会击中您的目标端点。 我希望这会有所帮助。

【讨论】:

以上是关于使用“无目标端点”在现有 API 代理上创建新端点的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义端点扩展现有 API

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

AWS Glue - 从现有笔记本服务器访问新的开发终端节点

从另一个 API 端点动态触发现有 Flux - Spring Webflux

将多个 3rd 方 GraphQL API 包装在单个 GraphQL 端点中

使用 Notion API 从模板创建页面