关于web服务Json/rest api/Nsurl连接

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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。

以上是关于关于web服务Json/rest api/Nsurl连接的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery/Ajax 从 JavaScript 调用 WCF/JSON/REST WebService

从 iOS / Objc 访问 JSON/Rest 服务器的方法?

什么是 JSON REST 接口

简单的 GAE Java JSON REST 服务器

Rest Template 无法正确解析 json rest api 响应

在Firefox中从本地html文件调用Jenkins Json REST API而不更改服务器