2

我正在使用一个我无法控制的非常奇怪(且令人讨厌)的 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 意识到存在错误,并且不调用我的转换器而是将请求标记为失败我可以在其他地方处理错误。

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

4

1 回答 1

1

configureTransformer只是Siesta 管道支持的全功能(但更详细)任意转换器的常见快捷方式。全变压器可以任意将任何响应转换为任何其他响应,包括成功→失败和失败→成功。用户指南对此进行了一些讨论。

您可以在示例项目中看到这一点,该项目有一个客户转换器,它执行与您想要的非常相似的操作,将 404失败转化为内容的成功false。它在此处配置并在此处定义。该示例进行了失败→成功转换,但您应该找到适合您成功→失败目的的代码。

于 2017-10-20T00:51:09.427 回答