目标C:在iphone上访问RESTAPI的最佳方式

目标C:在iphone上访问RESTAPI的最佳方式,iphone,objective-c,web-services,rest,Iphone,Objective C,Web Services,Rest,这件事已经纠缠了一段时间了。我试图在我的iphone上访问RESTAPI,遇到了ASIHTT框架,这将对我有所帮助。所以我做了一些类似的事情 //call sites, so we can confirm username and password and site/sites NSURL *url = [NSURL URLWithString: urlbase]; ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:ur

这件事已经纠缠了一段时间了。我试图在我的iphone上访问RESTAPI,遇到了ASIHTT框架,这将对我有所帮助。所以我做了一些类似的事情

//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


现在,一位开发人员告诉我,这个框架可能存在问题或bug,并且没有正确地传递头。有没有其他方法可以通过身份验证测试或访问网络REST位置?

我有两个应用程序使用一个名为的框架,该框架提供了一个用于访问基于REST的远程api的包装器。它主要针对基于RubyonRails的应用程序,因此它的XML/JSON解析可能会被调整以处理一些Rails默认值,但值得一看。默认情况下,它支持http基本身份验证。

到目前为止,我已经在两个应用程序中使用过,没有出现任何问题

看起来您正在对远程站点执行HTTP基本身份验证。尝试从标准浏览器中点击相同的RESTURL,并将所需的参数向下传递给它。它会提示您输入用户名/密码。如果成功了,那么至少您知道服务器端已设置为处理请求。如果没有,那么你需要和开发人员谈谈


下一步要尝试的是放置一个基于Mac的网络嗅探器,并查看哪些报头来回移动。HTTPScoop、Wireshark或Charles中的任何一个都应该工作。将嗅探器作为网络代理运行,然后在模拟器中运行你的应用程序,观察发生了什么。请使用浏览器重试。看到差异后,您可以使用
ASIHTTPRequest
上的
addRequestHeader
方法添加服务器期望的任何特定头。

刚刚偶然发现这个问题-您可能会发现它使用NSOperation、blocks等非常有趣,请参阅:for source(MIT许可证)。我现在正在试用它-它也有一个示例应用程序。

我建议查看RestKit:它提供了一个优秀的API,用于访问RESTful web服务,并将远程资源表示为本地对象,包括将它们持久化到核心数据。HTTP身份验证是开箱即用的支持。

我是iOS开发新手,在过去一个月左右的时间里,我一直在与本页列出的一些大型框架进行斗争。这是一场噩梦。老实说,我建议你只需坚持基本原则,自己动手或使用苹果自己的软件

列出的库之一不再维护。另一个最近经历了巨大的代码破坏API变化,现在描述其使用的一半教程不再工作。其他人则极度臃肿

这比你想象的要容易。帮助我的一些资源:

单是上面的例子就可以帮助你达到80%的目标


更新:该软件(由Github Inc.开源)设计精良,易于使用。它处理对象映射:将JSON
NSDictionary
转换为您自己的自定义Objective-C模型类。它可以敏感地处理默认情况,并且很容易滚动您自己的值转换器,例如从字符串到
NSURL
或从字符串到自定义
enum

+1但是,在这个问题之后,您需要格式化代码,以便正确显示。我不能编辑,否则我会,但在你的每行代码前面放4个空格,它看起来就像代码。对不起,伙计,我以后会这么做的。看看这个。。。很容易使用。嗨,Ramin,我试过使用ASIHTTPRequest,甚至是Twitter api,看看我是否可以使用addRequestHeader和HTTPScoop来获得标题,但它没有显示正在向它传递标题。你在寻找哪些标题?当你用浏览器点击同一个URL时,你是否在HTTPScoop中找到了你想要的东西?如果您是从浏览器中获取标题,而不是在ASITP中,那么您可能需要向开发人员提交一份错误报告。对于我正在处理的任何一个站点,HTTPSchool im都会得到一个响应,表示需要身份验证。使用Twitter,我可以将用户名和密码放在URL文件中,但当我将其放在addRequestHeader HTTPSchoop中时,并不表明我放了任何标题。这就是为什么我想知道ASIHTTP肯定有什么东西。ASIHTTP确实支持使用您列出的API进行基本用户名/密码身份验证。我认为您不需要添加任何额外的头,除非它是自定义身份验证方案。我建议你将你的问题转发给他们的谷歌小组,寻求具体帮助:不幸的是,ASIHTT不再被维护,作者建议你使用另一个库。我不认为这意味着“不要使用它”,但这是一个值得考虑的问题。请参见0.20.0中的>(链接包含分号)如何执行基本身份验证?我能找到的唯一例子与
RKClient
有关,但这一点已在0.20.0中删除。非常感谢你的帮助。