Swift 午睡重定向响应失败

Swift Siesta redirect response to failure

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

我的服务器多次响应 return HTTP 200,但有错误 message/flag。

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

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

例如,这是一个检查 200 上的 X-My-API-Error header 的变压器草图,如果存在 returns 则错误:

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 {
  [=11=].pipeline[.cleanup].add(APIErrorHandler())
}

您可能还会发现从 turn a 404 into a successful response with false for the content, and the one that overrides Siesta’s default error message with a server-provided one.

的示例项目中研究转换器很有帮助