我使用的是一个非常奇怪(和讨厌)的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类已经在处理这个问题,并反过来将自己标记为遇到错误,但是我不知道如何让Siesta意识到存在错误,并且不调用我的transformer而是将请求标记为失败。我可以在其他地方处理错误。
我怎样才能实现我所追求的?
configureTransformer
只是Siesta管道支持的功能齐全(但更详细)的任意转换器的常见快捷方式。全变压器可以任意将任何响应转换为任何其他响应,包括成功→故障和故障→成功用户指南对此进行了一些讨论。
您可以在示例项目中看到这一点,该项目有一个客户转换器,它可以做与您想要的非常类似的事情,将404失败转化为内容为false
的成功。它在这里配置,在这里定义。这个例子失败了→成功转换,但您应该找到适合您成功的代码→故障目的。