如何阻止消费者在APIGee API中访问无效资源

时间:2014-03-27 23:44:25

标签: apigee

我有一个Apigee代理,它有两个资源(/resource1/resource2)。如果尝试访问/resource3。如何返回404错误而不是Apigee默认错误?

Apigee显示以下故障字符串:

{
    "fault": {
        "faultstring": "The Service is temporarily unavailable",
        "detail": {
            "errorcode": "messaging.adaptors.http.flow.ServiceUnavailable"
        }
    }
}

由于

3 个答案:

答案 0 :(得分:2)

更好的解决方案是: 一定要在所有代理API的基本路径中定义一些东西

创建一个名为“catchall”的附加代理API,其基本路径为“/”,并且只有一个引发404的引发错误

Apigee从最长的基本路径执行代理API到最短;该捕获将持续运行并始终返回404

答案 1 :(得分:1)

目前,流的方式以这种方式工作 - 它通过你的default.xml(在代理中)进行解析,并尝试通过路径后缀(例如" / resource1,/)将你的请求与其中一个流匹配。资源2"或VERB或您可能拥有的任何其他条件。如果它没有找到任何匹配条件,它会抛出上面的错误。

如果条件与您没有的有效流量匹配,您可以添加一个特殊的流程。您可以在该流中添加默认策略,并通过该流添加自定义错误响应。

enter image description here

答案 2 :(得分:0)

我只想澄清Vinit的答案。 Vinit说:

  

如果找不到任何匹配条件,则会抛出上述错误。

实际上,如果找不到匹配的流条件,请求仍将被发送到后端。你提到的错误:

{
    "fault": {
        "faultstring": "The Service is temporarily unavailable",
        "detail": {
            "errorcode": "messaging.adaptors.http.flow.ServiceUnavailable"
        }
    }
}
尝试连接到后端而没有匹配流程后返回

Vinit解决问题以创建404是满足您需求的最佳解决方案。

但是,在某些情况下,将所有流量传递到后端是合适的(例如,如果您不需要在Apigee层修改每个资源,并且您不希望更新每次添加新的API资源时都会使用Apigee代理。不符合任何流量条件将适用于该用例。