2017-09-04 3 views
0

Est-il possible d'utiliser le pipeline Siesta, de recevoir une réponse de succès, de l'analyser et, en fonction du retour, de le rediriger vers une réponse d'échec?Swift Siesta redirige la réponse à l'échec

Ma réponse serveur renvoie plusieurs fois un HTTP 200, mais avec un message d'erreur/indicateur.

Répondre

0

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.

+0

Génial !! Merci Paul! – user2921672