处理API错误与网络错误

处理API错误与网络错误

问题描述:

我正在构建SDK。处理API错误与网络错误

基本上,开发人员会传入一个错误处理函数,该函数将在调用API时发生错误。

对于API错误(或由API返回的错误),我创建了一个具有域ExampleAPPDomain的NSError。 ApI错误具有不同的userInfo结构(例如,我向用户信息添加了“类别”键)。

但有时错误是一个nsurlconnection错误...我也将该错误传递给错误处理程序。

所以我称:

errorHandler(error) 

有时传入的ErrorHandler函数NSError误差是API错误,有时它是一个NSURLConnection的类型的错误(如网络错误)。

我该如何最好地处理这些错误? 例如,在错误处理程序代码中,开发人员必须检查错误的域以查看它是什么类型(NSURLDomain vs ExampleAPPDomain)并相应地处理它。这是两种错误之间不同的唯一方法。

什么是处理APP错误与NSUrlConnection连接错误的标准方式是什么?

为什么不总是给他们ExampleAppDomain作为错误的域。这样就没有混淆。大多数标准库都是这样做的 - 封装所有错误。从本质上讲,当你得到错误时,你需要在NSError中包含你的域名。您可以检查响应的NSURLConnectionDelegate的可接受的statusCode和内容。另外,不要自己处理所有的网络代码,为什么不使用像AFNetworking这样的标准库呢?

这是一个代码,但您必须检查基于XML/JSON的可接受代码/内容。以下是AFNetworking的摘录。

NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; 
[userInfo setValue:self.responseString forKey:NSLocalizedRecoverySuggestionErrorKey]; 
[userInfo setValue:[self.request URL] forKey:NSURLErrorFailingURLErrorKey]; 
[userInfo setValue:self.request forKey:ExampleAppDomainFailingURLRequestErrorKey]; 
[userInfo setValue:self.response forKey:ExampleAppDomainOperationFailingURLResponseErrorKey]; 


NSError *error = [[NSError alloc] initWithDomain:ExampleAppDomain code:NSURLErrorBadServerResponse userInfo:userInfo]; 

检查NSURLError.h文件以获取更多错误信息。

+0

我应该如何将错误从NSUrlDomain转换为这种新格式?我只是复制本地化的描述和错误代码?或者我应该在创建的新的ExampleAppDomain错误的userinfo中将nsurldomain错误存储为underlying_error参数... –

+0

reedited the answer! –