【问题标题】:About web service Json/rest api/Nsurl connection关于web服务Json/rest api/Nsurl连接
【发布时间】:2015-12-15 06:14:24
【问题描述】:

我开始学习网络服务,我使用一个 url api 来获取数据并显示在我的表格视图中。但我看到了一些教程 - 他们使用 NSURLConnectionRest APIAFNetworking

我真的对所有类型感到困惑。我应该在上述类型中使用哪一个。对于我应该使用哪种类型的 Web 服务。而且我在 SO 中看到了一些使用同步或异步的疑问。因此,这是从 URL 获取数据的任何其他类型吗?

其实对于所有网络服务,我应该使用哪个来获取数据和显示?

【问题讨论】:

    标签: ios web-services afnetworking


    【解决方案1】:
     -(void)JsonDataParsing
     {
    
    
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    
        manager.requestSerializer = [AFJSONRequestSerializer serializer];
        [manager POST:url parameters:params
              success:^(AFHTTPRequestOperation *operation, id responseObject) {
                  NSDictionary *jsonDict = (NSDictionary *) responseObject;
                  //!!! here is answer (parsed from mapped JSON: {"result":"STRING"}) ->
                  NSString *res = [NSString stringWithFormat:@"%@", [jsonDict objectForKey:@"result"]];
              } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                  //....
              }
         ];
    
     }
    

    【讨论】:

    • 其实dictfeedarrEntry 是什么...您将json 数据转换为mutableDictionary。以及为什么要“喂”
    • sendSynchronousRequest 已弃用为 iOS9
    • 这是关于nsurl。那么我们不应该使用Afnetworkingrest kit 和全部还是什么??那么对于什么类型的web service,您将使用AFNetworkingrest kit...
    • feed 是 json 响应的关键。并且提要类型是字典,因此在 dictfeed 中获取所有提要。
    【解决方案2】:

    首先,AFNetworking 和 NSURLConnection 用于移动端。 Rest API 不是来自移动端。您在服务器端实现的 Rest API,用于处理 GET、POST、PUT 和 DELETE 等 CRUD 操作。

    第三方库可以简化我们的工作。而AFNetworking 是非常受欢迎且值得信赖的库。

    AFNetworking 发出异步网络请求。要了解更多信息,请访问Introduction to AFNetworking

    AFNetworking 做了 NSURLConnection 可以做的一切。现在使用它将为您节省大量编写样板代码的时间!

    【讨论】:

      【解决方案3】:

      NSURLConnectionNSURLSession 是苹果 API 用于管理下载和上传等网络操作,AFNetworking 是使用这两个 API 并添加多线程/错误处理/网络可达性的框架......生活更轻松,RESTful 是客户端-服务器连接的架构,您可以在服务器端实现它,以易于使用的模型 (JSON) 将内容返回到客户端。

      synchronous 意味着你等待它完成做任何其他事情,asynchronous 意味着你只是启动它但不需要等待它,就像你向服务器发出请求并且用户仍然可以与你的交互UI 同时进行,因此建议使用asynchronous task 向服务器请求然后只更新synchronous 中的UI

      希望我的解释容易理解和纠正:)

      【讨论】:

      • 是的,我现在很清楚 AFNetworking 以及 Sunchronous 和异步......但是 Rest 是客户端服务器连接意味着我很困惑
      • 我正在使用一个 url 来获取、发布数据并将其显示在表格视图中。供 Nsurlconection 和 Afnetworking 使用....但是我可以将 RESTFul 用于相同的目的,例如获取数据并在表格视图中显示它
      • 这一切都取决于服务器,如果该服务器是为处理 RESTful 而构建的,那么你可以让它请求任何东西,因为 RESTful 已经有一些 URL 结构,如 GET、POST ......诸如请求获取数据或将数据上传到服务器的目的....API 表示服务器端代码来处理这些 URL 并执行它
      • 你真的不需要了解很多可以使用的思想,除非你自己创建所有东西,基本上它只是 URL 请求结构(带有标题和正文的链接)和 AFNetworking NSURLSession 已经实现了它以便于创建这些请求
      【解决方案4】:

      NSURLConnection

      这使您可以通过提供URL 请求对象来加载URL 的内容。通过使用NSURLConnection,您可以使用回调块异步同步加载 URL 请求。看这个例子

      NSURL *URL = [NSURL URLWithString:@"http://example.com"];
      NSURLRequest *request = [NSURLRequest requestWithURL:URL];
      
      [NSURLConnection sendAsynchronousRequest:request
                                          queue:[NSOperationQueue mainQueue]
                              completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
           // ...
       }];
      

      更多内容可以去apple docs

      AFNetworking

      这是建立在Foundation URL Loading之上的第三方库。 这很容易通过 pod 安装并且使用方便。请参阅下面的示例,例如我如何在我的应用中使用它

      -(AFHTTPRequestOperationManager *)manager
      {
          if (!_manager)
          {
              _manager = [AFHTTPRequestOperationManager manager];
              _manager.requestSerializer = [AFHTTPRequestSerializer serializer];
              _manager.responseSerializer = [AFHTTPResponseSerializer serializer];
          }   
          return _manager;
      }
      

      上面我们正在初始化AFHTTPRequestOperationManager *manager的实例

      [self.manager POST:@"http://example.com" parameters:parameters
      
                     success:^(AFHTTPRequestOperation *operation, id responseObject)
           {
               NSError *error;
               NSMutableDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:&error];
               // return response dictionary in success block
           }
      
                     failure:^(AFHTTPRequestOperation *operation, NSError *error)
           {
               // return error in failure block
           }]
      

      上述方法将异步加载数据,其余的是不言自明的。但是,如果您想像同步请求一样阻止用户界面,而不是使用[operation waitUntilFinished],这是一种反模式。这里operationAFJSONRequestOperation 的一个实例。

      【讨论】:

      • @joseph REST 只是一种类似于 SOAPAPI
      • 我应该使用 REST 在我的表格视图中获取数据和发布数据
      • 是的,REST 是响应速度非常快的类型 API。
      猜你喜欢
      • 2016-03-26
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多