gpt4 book ai didi

alamofire - 使用 Alamofire 5 和 responseDecodable 函数解码错误响应

转载 作者:行者123 更新时间:2023-12-04 02:52:55 35 4
gpt4 key购买 nike

我正在使用 Alamofire 5(测试版 1)为 WooCommerce 编写 API 客户端,这将允许我获取订单、优惠券等以及创建它们。注意我使用的是新的 .responseDecodable功能。

我已经使用以下 performRequest 设置了我的 API 客户端看起来像这样的函数:

@discardableResult
private static func performRequest<T:Decodable>(route: APIConfiguration,
decoder: JSONDecoder = JSONDecoder(),
completion: @escaping (Result<T>)->Void) -> DataRequest {
return AF.request(route)
.responseDecodable(decoder: decoder) { (response: DataResponse<T>) in
completion(response.result)
}
}

这很有效,因为我可以,例如,调用函数 getCouponForId(_ id: Int)它将执行此函数并通过完成处理程序返回响应。

唯一的缺点是,假设用户尝试访问不存在的优惠券,他们将收到错误(来自服务器的 404)。我可以打开结果来确定 successfailure情况,但 Alamofire 尝试将错误响应的正文解码为 Coupon我创建的模型。

展望 future ,我创建了一个错误模型,我打算使用它来解码错误。但是话虽如此,我在将它实现到这个函数中时遇到了麻烦。

有没有人对我如何处理这个有任何想法?

(我通过遵循本指南创建了此功能 - 希望它可以为我正在做的事情提供更多背景信息。 https://github.com/AladinWay/NetworkingExample)

最佳答案

您提到的文章中的类似登录功能,针对 Alamofire 5 的当前测试版进行了更新,并处理了 404、401 等(通过 guard 声明)

  static func login(email: String, password: String, completion:@escaping (Result<UserCredentials>)->Void) {
performRequest(router: Router.login(email: email, password: password), completion: completion)
AF.request(Router.login(email: email, password: password))
.validate(statusCode: 200..<300)
.responseDecodable { (response: DataResponse<UserCredentials>) in
guard response.result.isSuccess else {
print("🥶 Error on login: \(String(describing: response.error))")
return
}
completion(response.result)
}
}

关于alamofire - 使用 Alamofire 5 和 responseDecodable 函数解码错误响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54163534/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com