【问题标题】:Handling API errors vs Network errors处理 API 错误与网络错误
【发布时间】:2013-10-15 19:54:43
【问题描述】:

我正在构建一个 SDK。

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

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

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

所以我打电话:

errorHandler(error)

有时传递给 errorHandler 函数的 NSError 错误是 API 错误,有时是 NSUrlConnection 类型错误(如网络错误)。

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

对于此类问题,处理 APP 错误与 NSUrlConnection 连接错误的标准方法是什么?

【问题讨论】:

    标签: ios objective-c cocoa-touch


    【解决方案1】:

    为什么不总是给他们 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 文件了解更多错误信息。

    【讨论】:

    • 我应该如何将错误从 NSUrlDomain 转换为这种新格式?我只是复制本地化的描述和错误代码吗?或者我应该将 nsurldomain 错误作为基础错误参数存储在创建的新 ExampleAppDomain 错误的用户信息中...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 2017-12-27
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    相关资源
    最近更新 更多