Я пишу шлюз API в SpringBoot и недавно перешел на Unirest.
Интересно, есть ли способ:
- Пересылать случайные сообщения об ошибках бэкэнда без прерывания цепочки методов.
- Пересылать содержимое в случае успеха без необходимости "копаться" в теле ответа или разорвать цепочку.
Мое работающее в данный момент решение плохо читается, и его немного громоздко повторять для всех конечных точек, и я с ним поиграл в течение дня, поэтому я ценю любые идеи.
Конечная точка бэкэнда для тестирования сценария ошибки:
@GetMapping("/backend")
public List<String> backendErrorThrower() {
throw new ResponseStatusException(HttpStatus.I_AM_A_TEAPOT, "no coffee for you");
}
Конечная точка шлюза API:
@GetMapping("/gateway")
public List<?> gateway() {
HttpResponse<JsonNode> response =
Unirest.get("http://localhost:8080/backend")
.header("content-type", "application/json")
.asJson();
// The section to be refactored:
if(response.isSuccess()) {
return response.getBody().getArray().toList();
}
throw new ResponseStatusException(HttpStatus.valueOf(response.getStatus()), response.getBody().getObject().getString("message"));
}
Просто для справки, при вызове конечной точки шлюза, которая дополнительно вызывает конечную точку бэкэнда, ответ выглядит следующим образом:
GET http://localhost:8666/gateway
HTTP/1.1 418 Client Error (418)
Content-Type: application/json
Content-Length: 153
{
"timestamp": "2020-03-15T21:45:29.766+0000",
"path": "/gateway",
"status": 418,
"error": "I'm a teapot",
"message": "no coffee for you",
"requestId": "ccb8f381-1"
}