0

我是 KrakenD 的新手。我尝试将此 API 网关配置为不修改来自后端的响应。以下是 ma 配置的摘录:

"endpoint": "/mycompany/someservice/{id}",
         "output_encoding": "no-op",
         "backend": [{
                 "url_pattern": "/someservice/{id}",
                 "host": [
                     "http://host-in-our-company:8080"
                 ],
                 "encoding": "no-op"
             }
         ]
     }

在这个 GET 请求中,我们询问了一些实体。当实体不存在时,我们的 Spring 应用程序会抛出异常并返回状态 404。没有 KrakenD 的原始响应如下所示:

    "timestamp": "2021-10-04T14:47:58.918+00:00",
    "status": 404,
    "error": "Not Found",
    "path": "/mycompany/someservice/115_EXIST"
}

但是当我使用 KrakenD 时,响应如下:

{
    "cause": "Entity with id 115 cannot be found.",
    "status": "NOT_FOUND"
}

这对应于找不到实体时引发的异常:

ERROR com.my.company.exception.GlobalRestExceptionHandler - Error caught: Entity with id 115 cannot be found.

如何配置 KrakenD 以实现这种行为?或者也许我应该以某种方式改变我们后端的实现?

提前感谢您的帮助

4

1 回答 1

0

no-op编码不会对后端响应进行任何修改。您看到的响应是来自后端的实际响应,没有来自 KrakenD 的任何干预。

请注意,通过 KrakenD 使用内容与直接使用后端不同,因为 KrakenD 不会将任何标头、查询参数或 cookie 传递给后端,直到您这样说。例如,您的后端可能需要Accept客户端发送的标头,但除非您在配置中转发它,否则它不会到达后端(请参阅headers_to_pass文档)。这是使后端响应不同的常见问题的示例。触发此错误消息时,请在您的后端代码中查看,并尝试使用后端直接使用 curl

于 2021-10-05T13:18:10.357 回答