Отметить успешный ответ сиесты как ошибку
Я работаю с действительно странным (и неприятным) API, который я не могу контролировать, и, к сожалению, когда делается неправильный запрос, вместо ответа со статусом 4xx, он отвечает со статусом 200.
С помощью этого ответа он также изменяет тело ответа с обычного ответа XML на обычный текст, но не меняет заголовок типа содержимого. Вы можете представить, как это раздражает!
У меня есть Siesta, работающая с API, и тот факт, что он на самом деле не является RESTful, но я не уверен, как заставить работать следующую часть - обработку неудачных запросов.
Как мне преобразовать технически действительный и успешный ответ 200 в ответ об ошибке? Прямо сейчас у меня есть следующие настройки:
configure("/endpoint") {
$0.mutateRequests { req in
... perform some mutation to request ...
}
$0.pipeline[.parsing].add(self.XMLTransformer)
}
configureTransformer("/endpoint") {
($0.content as APIResponse)
.data()
.map(Resource.init)
}
Это работает очень хорошо, когда ответ на самом деле является XML, однако в случае, когда ответ является ошибкой, я получаю следующее:
bad api request: invalid api key
или что-то похожее на это. Класс XMLParser уже обрабатывает это и, в свою очередь, помечает себя как обнаружившего ошибку, однако я не знаю, как заставить Сиесту осознать, что есть ошибка, и не вызывать мой преобразователь, а вместо этого пометить запрос как сбойный. чтобы я мог обработать ошибку в другом месте.
Как я могу достичь того, что я после?
1 ответ
configureTransformer
это всего лишь обычное сокращение для полнофункциональных (но более многословных) произвольных преобразователей, поддерживаемых конвейером Сиесты. Полные преобразователи могут произвольно преобразовать любой ответ в любой другой, включая успех → неудача и неудача → успех. Руководство пользователя обсуждает это немного.
Вы можете увидеть это в действии в примере проекта, в котором есть преобразователь клиента, который делает нечто очень похожее на то, что вы хотите, превращая ошибку 404 в успех с контентом false
, Это настроено здесь и определено здесь. В этом примере выполняется преобразование "ошибка → успех", но вы должны найти код, адаптируемый для целей "успех → неудача".