2017-10-19 23 views
1

我正在使用一个非常奇怪的(和令人讨厌的)API,我无法控制,不幸的是,当发出无效请求时,而不是以4xx状态响应,它响应200状态。马克成功的午睡反应,因为错误

使用此响应,它也将响应正文从通常的XML响应更改为纯文本,但不会更改内容类型标题。你可以想象这有多恼人!

我已经得到了Siesta与API的合作,并且事实上它没有丝毫的REST风格,但我不确定如何让下一部分工作 - 处理不成功的请求。

我该如何着手将技术上有效且成功的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类已经在处理这个问题,并且将其标记为遇到错误,但是我不知道如何让Siesta意识到存在错误,并且不会调用我的变换器,而是将请求标记为失败我可以在别处处理错误。

我该如何实现我所追求的目标?

回答

0

configureTransformerjust a common-case shortcut是Siesta管线支持的全功能(但更详细)任意变压器。全变压器可以任意转换任何响应任何其他,包括成功→失败和失败→成功。 user guide discusses this有点。

您可以在示例项目,其中有一个客户变压器,做一些非常相似到你想要的东西,把一个404 失败成功与内容false行动看到这一点。它是configured heredefined here。该示例执行失败→成功转换,但您应该找到适合您的成功→代码失败的代码。

+0

谢谢!想想我已经设法使它工作:D – PaReeOhNos