Swift Siesta重定向响应失败

时间:2017-09-04 21:46:23

标签: swift pipeline siesta-swift

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

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

1 个答案:

答案 0 :(得分:0)

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

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

例如,下面是变换器的草图,它检查200上的X-My-API-Error标头,如果存在则返回错误:

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())
}

您可能还会发现从turn a 404 into a successful response with false for the content的示例项目和overrides Siesta’s default error message with a server-provided one的示例项目中研究变换器很有帮助。