2017-10-19 2 views
1

Je travaille avec une API vraiment étrange (et méchante) sur laquelle je n'ai aucun contrôle, et malheureusement lorsqu'une requête invalide est faite, au lieu de répondre avec un statut 4xx, elle répond avec un 200 statut à la place.Marquer la réponse de siesta réussie comme erreur

Avec cette réponse, il modifie également le corps de la réponse de la réponse XML habituelle au texte brut, mais ne modifie pas l'en-tête du type de contenu. Vous pouvez imaginer à quel point c'est ennuyeux!

J'ai Siesta qui fonctionne avec l'API et le fait que ce n'est pas réellement RESTful dans le moindre, mais je ne sais pas comment faire fonctionner la prochaine partie - gérer les demandes infructueuses. Comment transformer une réponse 200 techniquement valide et réussie en une réponse d'erreur? En ce moment, j'ai la configuration suivante:

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) 
} 

Cela fonctionne très bien lorsque la réponse est en fait XML, mais dans le scénario où la réponse est une erreur, je reçois les éléments suivants:

bad api request: invalid api key 

ou quelque chose de similaire à cela. La classe XMLParser gère déjà cela, et à son tour se signale comme ayant rencontré une erreur, mais je ne sais pas comment faire pour que Siesta se rende compte qu'il y a une erreur, et de ne pas appeler mon transformateur, mais marquer la requête comme ayant échoué Je peux gérer l'erreur ailleurs.

Comment puis-je obtenir ce que je suis après?

Répondre

0

configureTransformer est just a common-case shortcut pour les transformateurs arbitraires complets (mais plus verbeux) pris en charge par le pipeline de Siesta. Les transformateurs complets peuvent arbitrairement convertir une réponse à toute autre réponse, y compris succès → échec et échec → succès. Le user guide discusses this un peu.

Vous pouvez le voir en action dans le projet par exemple, qui a un transformateur de client qui fait quelque chose de très semblable à ce que vous voulez, en tournant une 404 échec dans un succès avec le contenu false. C'est configured here et defined here. Cet exemple fait une transformation échec → réussite, mais vous devriez trouver le code adaptable pour votre succès → à des fins d'échec.

+0

Merci! Je pense que j'ai réussi à le faire fonctionner: D – PaReeOhNos