我有一个Apigee代理,它有两个资源(/resource1
和/resource2
)。如果尝试访问/resource3
。如何返回404错误而不是Apigee默认错误?
Apigee显示以下故障字符串:
{
"fault": {
"faultstring": "The Service is temporarily unavailable",
"detail": {
"errorcode": "messaging.adaptors.http.flow.ServiceUnavailable"
}
}
}
由于
答案 0 :(得分:2)
更好的解决方案是: 一定要在所有代理API的基本路径中定义一些东西
创建一个名为“catchall”的附加代理API,其基本路径为“/”,并且只有一个引发404的引发错误
Apigee从最长的基本路径执行代理API到最短;该捕获将持续运行并始终返回404
答案 1 :(得分:1)
目前,流的方式以这种方式工作 - 它通过你的default.xml(在代理中)进行解析,并尝试通过路径后缀(例如" / resource1,/)将你的请求与其中一个流匹配。资源2"或VERB或您可能拥有的任何其他条件。如果它没有找到任何匹配条件,它会抛出上面的错误。
如果条件与您没有的有效流量匹配,您可以添加一个特殊的流程。您可以在该流中添加默认策略,并通过该流添加自定义错误响应。
答案 2 :(得分:0)
我只想澄清Vinit的答案。 Vinit说:
如果找不到任何匹配条件,则会抛出上述错误。
实际上,如果找不到匹配的流条件,请求仍将被发送到后端。你提到的错误:
{
"fault": {
"faultstring": "The Service is temporarily unavailable",
"detail": {
"errorcode": "messaging.adaptors.http.flow.ServiceUnavailable"
}
}
}
尝试连接到后端而没有匹配流程后返回。
Vinit解决问题以创建404是满足您需求的最佳解决方案。
但是,在某些情况下,将所有流量传递到后端是合适的(例如,如果您不需要在Apigee层修改每个资源,并且您不希望更新每次添加新的API资源时都会使用Apigee代理。不符合任何流量条件将适用于该用例。