0

是否可以使用 Siesta 管道,接收成功响应,对其进行解析,并根据返回将其重定向到失败响应?

我的服务器响应多次返回 HTTP 200,但带有错误消息/标志。

4

1 回答 1

1

如果“重定向”是指“将 HTTP 成功转换为 Siesta 错误”,那么是的,这是可能的。管道可以任意将成功转化为错误,反之亦然。

编写一个ResponseTransformer解包.success案例,检查是否设置了错误标志(无论它们是什么),如果是,则返回一个新构造的.failure.

例如,这是一个检查X-My-API-Error200 上的标头的变压器草图,如果存在则返回错误:

struct APIErrorHandler: ResponseTransformer {
  func process(_ response: Response) -> Response {
    switch response {
      case .success(let entity):
        if let errorMessage = entity.header(forKey: "X-My-API-Error") {
          return logTransformation(
            .failure(Error(userMessage: errorMessage, cause: MyAPIError(), entity: entity)))
        }
        return response

      case .failure:
        return response  // no change
    }
  }
}

配置如下:

service.configure {
  $0.pipeline[.cleanup].add(APIErrorHandler())
}

您可能还会发现研究示例项目中的转换器很有帮助,该转换器将 404 转换false为对 content的成功响应,以及使用服务器提供的替代 Siesta 的默认错误消息的转换器

于 2017-09-05T00:35:41.743 回答