Si par "redirection" vous voulez dire "transformer un succès HTTP en une erreur Siesta", alors oui, c'est possible. Le pipeline peut arbitrairement transformer les succès en erreurs et vice versa.
Ecrire un ResponseTransformer
qui déballe le .success
cas, vérifie si les indicateurs d'erreur sont fixés (quels qu'ils soient), et si retourne donc un nouveau construit .failure
.
Par exemple, voici une esquisse d'un transformateur qui vérifie un en-tête X-My-API-Error
sur 200, et si elle est le rendement présente une erreur:
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
}
}
}
Configurer comme suit:
service.configure {
$0.pipeline[.cleanup].add(APIErrorHandler())
}
Vous pourriez également trouver utile d'étudier le transformateur de l'exemple de projet que turn a 404 into a successful response with false
for the content, et celui qui overrides Siesta’s default error message with a server-provided one.
Génial !! Merci Paul! – user2921672