Objective-C:在iPhone上访问REST API的最佳方法
一段时间以来一直在摔跤。 我试图访问我的iphone上的REST API,并遇到了ASIHTTP框架,可以帮助我。 所以我做了类似的事情
//call sites, so we can confirm username and password and site/sites NSURL *url = [NSURL URLWithString: urlbase]; ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease]; [request setUsername:@"doronkatz%40xx.com" ]; [request setPassword:@"xxx"];
其中urlbase
是REST网站的url。
现在,开发人员告诉我,这个框架可能存在问题或错误,而且它没有正确传递标题。 是否有另一种testing或访问authenticationnetworkingREST位置的方式?
我build议检查RestKit: http: //restkit.org/它提供了一个非常好的API来访问REST风格的Web服务,并将远程资源表示为本地对象,包括将它们保存到Core Data中。 HTTPauthentication支持开箱即用。
我是iOS开发新手,在过去的一个月左右,我一直在和这个页面上列出的一些大框架做斗争。 这是一场噩梦。 我诚实地build议你坚持使用基本知识,并使用AFNetworking
或苹果自己的NSURLConnection
自己做。
列出的一个图书馆不再维护。 另一个最近接受了大量的破坏API的变化,现在有一半的教程描述了它的使用不再有效。 其他人则大量臃肿。
这比你想象的要容易。 一些帮助我的资源:
- http://blog.strikeiron.com/bid/63338/Integrate-a-REST-API-into-an-iPhone-App-in-less-than-15-minutes
- http://www.slideshare.net/gillygize/connecting-to-a-rest-api-in-ios
在AFNetworking网页上的例子可以让你80%的路上。
更新 : Mantle框架 (由Github Inc.开源)devise精良,易于使用。 它处理对象映射 :将JSON NSDictionary
转换为您自己的自定义Objective-C模型类。 它处理默认情况下,很容易滚动自己的值转换器,例如从string到NSURL
或string到您的自定义enum
。
我有几个应用程序使用一个名为Objective Resource的框架,它提供了一个用于访问基于远程REST的api的包装器。 它主要针对基于Ruby on Rails的应用程序,因此可以调整XML / JSONparsing来处理一些Rails的默认值,但值得一看。 它默认支持http基本authentication。
只是偶然发现了这个问题 – 您可能会发现LRResty非常有趣,因为它使用NSOperation,块等,请参阅: GitHub的源代码(MIT许可证)。 我现在正在试验它 – 它也有一个示例应用程序。
到目前为止,我已经在两个应用程序中使用了ASIHTTP ,并没有任何问题。
看起来你正在做远程站点的HTTP基本身份validation。 尝试从标准浏览器中打开相同的REST URL,并将所需的parameter passing给它。 它应该提示你input用户名/密码。 如果通过,至less你知道服务器端设置来处理请求。 如果没有,那么你需要与开发者谈一谈。
接下来要做的就是放入一个基于Mac的networking嗅探器,看看有哪些头文件来回传送。 任何HTTPScoop,Wireshark或Charles都应该工作。 运行嗅探器作为networking代理,然后在模拟器中运行您的应用程序,并观察发生了什么。 用浏览器再试一次。 一旦看到不同之处,可以使用addRequestHeader
上的addRequestHeader
方法来添加服务器所期望的任何特定标头。