Я пишу API-клиент для WooCommerce с использованием Alamofire 5 (бета-версия 1), который позволит мне получать заказы, купоны и т. Д., А также создавать их. Примечание. Я использую новую функцию .responseDecodable
.
Я настроил свой API-клиент, используя следующую функцию performRequest
, которая выглядит следующим образом:
@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 с сервера). Я могу включить результат, чтобы определить случай success
или failure
, но Alamofire пытается декодировать тело ответа об ошибке в созданную мной модель Coupon
.
В дальнейшем я создал модель ошибки, которую я намерен декодировать с помощью ошибки. Но после всего сказанного у меня возникли проблемы с его внедрением в эту функцию.
У кого-нибудь есть идеи, как мне справиться с этим?
(Я создал эту функцию, следуя этому руководству - надеюсь, оно могло бы предоставить немного больше контекста тому, что я делаю. https://github.com/AladinWay/NetworkingExample)