Свифт Сиеста перенаправить ответ на сбой
Возможно ли использовать конвейер Siesta, получить ответ об успешном выполнении, проанализировать его и, в зависимости от возврата, перенаправить его на ответ об ошибке?
Мой ответ сервера много раз возвращает HTTP 200, но с сообщением об ошибке / флагом.
1 ответ
Если под "редиректом" вы подразумеваете "преобразовать HTTP-успех в ошибку Siesta", то да, это возможно. Конвейер может произвольно преобразовывать успехи в ошибки и наоборот.
Напиши ResponseTransformer
это разворачивает .success
case, проверяет, установлены ли флаги ошибок (какими бы они ни были), и если да, возвращает вновь созданный .failure
,
Например, вот эскиз трансформатора, который проверяет X-My-API-Error
заголовок на 200, и если он присутствует, возвращает ошибку:
struct APIErrorHandler: ResponseTransformer {
func process(_ response: Response) -> Response {
switch response {
case .success(let entity):
if let errorMessage = entity.header(forKey: "X-My-API-Error") {
return logTransformation(
.failure(Error(userMessage: errorMessage, cause: MyAPIError(), entity: entity)))
}
return response
case .failure:
return response // no change
}
}
}
Настройте его следующим образом:
service.configure {
$0.pipeline[.cleanup].add(APIErrorHandler())
}
Также может оказаться полезным изучить трансформатор из примера проекта, который превращает 404 в успешный ответ с false
для контента, и тот, который переопределяет сообщение об ошибке Siesta по умолчанию с предоставленным сервером.