关于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 来获取数据并显示在我的表格视图中。但我看到了一些教程 - 他们使用 NSURLConnection
或 Rest API 或 AFNetworking。
我真的对所有类型感到困惑。我应该在上述类型中使用哪一个。对于我应该使用哪种类型的 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)
//....
];
【讨论】:
其实dictfeed
和arrEntry
是什么...您将json 数据转换为mutableDictionary。以及为什么要“喂”
sendSynchronousRequest
已弃用为 ios9
。
这是关于nsurl
。那么我们不应该使用Afnetworking
、rest kit
和全部还是什么??那么对于什么类型的web service
,您将使用AFNetworking
和rest kit
...
feed 是 json 响应的关键。并且提要类型是字典,因此在 dictfeed 中获取所有提要。【参考方案2】:
首先,AFNetworking 和 NSURLConnection 用于移动端。 Rest API 不是来自移动端。您在服务器端实现的 Rest API,用于处理 GET、POST、PUT 和 DELETE 等 CRUD 操作。
第三方库可以简化我们的工作。而AFNetworking 是非常受欢迎且值得信赖的库。
AFNetworking 发出异步网络请求。要了解更多信息,请访问Introduction to AFNetworking。
AFNetworking 做了 NSURLConnection 可以做的一切。现在使用它将为您节省大量编写样板代码的时间!
【讨论】:
【参考方案3】:NSURLConnection
和 NSURLSession
是苹果 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]
,这是一种反模式。这里operation
是AFJSONRequestOperation
的一个实例。
【讨论】:
@joseph REST 只是一种类似于 SOAP 的 API 我应该使用 REST 在我的表格视图中获取数据和发布数据 是的,REST 是响应速度非常快的类型 API。以上是关于关于web服务Json/rest api/Nsurl连接的主要内容,如果未能解决你的问题,请参考以下文章
使用 jQuery/Ajax 从 JavaScript 调用 WCF/JSON/REST WebService
从 iOS / Objc 访问 JSON/Rest 服务器的方法?