【发布时间】:2014-12-03 03:34:53
【问题描述】:
我想限制对 API 代理中不存在的资源的请求,使其不能达到“默认”目标。
一种方法是在允许访问的 API 产品中添加所有资源,但需要在请求中传递此 api 密钥。在我的情况下,api 密钥未在请求中传递。
请就如何检查阻塞请求提出任何其他方法。
【问题讨论】:
标签: apigee
我想限制对 API 代理中不存在的资源的请求,使其不能达到“默认”目标。
一种方法是在允许访问的 API 产品中添加所有资源,但需要在请求中传递此 api 密钥。在我的情况下,api 密钥未在请求中传递。
请就如何检查阻塞请求提出任何其他方法。
【问题讨论】:
标签: apigee
首先,如果您的资源都位于 /v1 之类的基本路径中,您应该创建一个“catch-all”API,该 API 将阻止 /v1 API 组中的任何内容。创建一个没有目标且基本路径为 / 的新 API——然后您可以在其中放置一条分配消息或引发错误策略,返回 404 错误。这看起来像:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
<Description/>
<Flows/>
<PreFlow name="PreFlow">
<Request>
<Step>
<FaultRules/>
<Name>fault-not-found</Name>
</Step>
</Request>
<Response/>
</PreFlow>
<HTTPProxyConnection>
<BasePath>/</BasePath>
<VirtualHost>default</VirtualHost>
<VirtualHost>secure</VirtualHost>
</HTTPProxyConnection>
<RouteRule name="noroute"/>
<PostFlow name="PostFlow">
<Request/>
<Response/>
</PostFlow>
</ProxyEndpoint>
然后,您需要在 /v1 中定义每个资源,但在您的代理上无条件地创建一个端点 - 请注意,这必须位于所有其他端点的末尾(在XML)。当 Apigee 满足每个条件时(proxy.pathsuffix MatchesPath“/resource-1”),它将停止处理其他流。
因此,当它到达引发错误的最终流时,您的 API 使用者将被阻塞:
<Flows>
<Flow name="Resource 1">
<Description/>
<Request/>
<Response/>
<Condition>(proxy.pathsuffix MatchesPath "/resource-1") and (request.verb = "GET")</Condition>
</Flow>
<Flow name="Resource 2">
<Description/>
<Request/>
<Response/>
<Condition>(proxy.pathsuffix MatchesPath "/resource-2") and (request.verb = "GET")</Condition>
</Flow>
<Flow name="catchall">
<Description/>
<Request>
<Step>
<FaultRules/>
<Name>fault-not-found</Name>
</Step>
<Response/>
</Flow>
</Flows>
【讨论】: