我正在使用一个我无法控制的非常奇怪(且令人讨厌的)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 :(得分:1)
configureTransformer
just a common-case shortcut是Siesta管道支持的功能齐全(但更详细)的任意变换器user guide discusses this。完整变压器可以任意将任何响应转换为任何其他响应,包括成功→失败和失败→成功。 configured here一点。
您可以在示例项目中看到这一点,该示例项目的客户转换器执行与您想要的非常相似的操作,将404 失败转变为成功内容为false
。它是defined here和{{3}}。该示例执行失败→成功转换,但您应该找到适合您的成功→失败目的的代码。