将成功的午睡响应标记为错误

Mark successful siesta response as error

我正在处理一个我无法控制的非常奇怪(和讨厌的)API,不幸的是,当发出无效请求时,它没有以 4xx 状态响应,而是以改为 200 状态。

对于此响应,它还将响应 body 从通常的 XML 响应更改为纯文本,但不会更改内容类型 header。你可以想象这有多烦人!

我已经让 Siesta 使用 API 并且事实上它根本不是 RESTful,但我不确定如何让下一部分工作 - 处理不成功的请求。

如何将技术上有效且成功的 200 响应转换为错误响应?现在我有以下设置:

configure("/endpoint") {
  [=10=].mutateRequests { req in
    ... perform some mutation to request ...
  }
  [=10=].pipeline[.parsing].add(self.XMLTransformer)
}

configureTransformer("/endpoint") {
  ([=10=].content as APIResponse)
    .data()
    .map(Resource.init)
}

当响应实际上是 XML 时,这工作得很好,但是在响应是错误的情况下,我收到以下信息:

bad api request: invalid api key

或类似的东西。 XML解析器 class 已经在处理这个问题,然后将自己标记为遇到错误,但是我不知道如何让 Siesta 意识到有错误,而不是调用我的转换器而是将请求标记为失败我可以在其他地方处理错误。

我怎样才能实现我所追求的目标?

configureTransformer有点just a common-case shortcut for the full-featured (but more verbose) arbitrary transformers Siesta’s pipeline supports. Full transformers can arbitrarily convert any response to any other, including success → failure and failure → success. The user guide discusses this

您可以在示例项目中看到这一点,它有一个客户转换器,它做的事情与您想要的非常相似,将 404 failure 转换为 成功,内容false。是configured here and defined here。该示例进行了失败→成功的转换,但您应该找到适用于您的成功→失败目的的代码。