Swift Siesta重定向对失败的响应

Swift Siesta重定向对失败的响应

问题描述:

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

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

如果通过“重定向”您的意思是“将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 contentoverrides Siesta’s default error message with a server-provided one的示例项目来研究变压器会有帮助。

+0

太棒了!谢谢保罗! – user2921672