什么类型的Web服务最适合iOS?

20

我将为iPhone和iPad创建一个内部应用程序,用于跟踪销售电话、相关的报价、照片和这些报价的图纸。我仍处于概念设计阶段,正在尝试阅读关于在应用程序和Web服务之间通信的不同方式。显然,由于这将主要在3G或Edge上使用,因此我希望使用高效的协议,因此我的第一反应是避免使用基于XML的东西,例如XML-RPC或SOAP。我想在服务器上使用PHP和MySQL,并计划在iOS上使用Core Data。

所以我有几个具体问题:

  1. 我应该使用什么方案来提高性能?
  2. 我应该使用什么方案来便于在服务器上使用?
  3. 我应该使用什么方案来便于在iOS上使用?
  4. 考虑整个项目,我应该使用什么方案?
  5. 尽管存在网络开销,使用基于XML的方案是否更好?为什么?

注:XML-RPC与SOAP均为XML协议的一种实现方式,这里译为“基于XML的东西”。

我对这场讨论的结果很感兴趣,因为我很快也会面临同样的情况。 - Ben
2
如果你想避免使用XML,那么你可能需要研究一下JSON。在Objective-C中处理JSON有一些库可供使用,比如json-framework - JoeGaggler
我并不想避免使用XML,事实上,从我已经阅读的内容来看,我喜欢RPC-XML,但我也知道它会增加带宽成本。因此,我很想看看使用XML是否值得以及哪种类型的方案最好或最容易。 - jamone
1
XML不仅比JSON更臃肿,而且在设备上解析时也比JSON更难(占用内存,时间)。 - jbrennan
如果数据量很大,那么 jSon 对象可能会占用设备上大量的内存,而使用一些解析器可以在运行时仅解析 XML 代码的部分块,从而节省设备上的内存。 - Abhishek Bedi
2个回答

39

鉴于您提出了多个问题,您可能已经意识到您使用的最终解决方案将是在竞争目标之间取得平衡的过程。

1:您需要更好地定义“性能”。 我假设您指的是网络传输时间,这意味着保持服务器延迟时间和传输字节数低。 最终的解决方案可能是一种定制的二进制 wire 协议,同时也会进行可压缩性分析,并在适当的位置(例如重复字符串或序列)应用压缩。 这种协议的缺点是,在编写服务器和客户端时,由于无法使用 SDK 支持的标准编码,因此可能更难编写,并且除非经过深思熟虑地设计,否则二进制协议往往会对支持应用程序的未来更改和扩展具有脆弱性。

此外,您还应考虑如何定义协议的事务。 即使采用高效的编码方式,如果您的协议需要多次往返而不是单次往返,则仍然会变慢。

最后,根据您发送的数据大小,编码的开销可能与数据大小相比微不足道。

我建议您坚持使用标准化的编码格式,并且可以使用库支持解析,这将缩小范围,仅有两种主要语法:XML 或 JSON。

2:服务器框架都很好地支持 XML 和 JSON。 在使用 XML 服务时,我建议使用 REST 风格的模式,因为它们通常很容易构建,并且您不必遵循其他人的风格来适应您的应用程序。

我会远离基于 SOAP 的 Web 服务,尽管在 Windows 平台上支持它们的构建(特别是),因为在移动客户端上进行完整的基于 SOAP 的解析的复杂性很高,并且那里的支持不太好。 我认为,通过 WSDL 编译器自动生成对象序列化并不能节省编码时间,通常很容易序列化为 REST 风格的 XML,甚至对于 JSON 更简单。

3: iOS支持内置的SAX风格的XML解析器,并且有许多类库可用于支持具有不同功能和速度级别的内存DOM实现。选择最适合您需求的那个。我个人更喜欢快速、相当轻量且易于编程的TBXML,但由于它不验证模式且是一个内存树,所以在某些情况下并不合适。此处有一份iOS XML库性能对比。

如果在iOS上搜索,会发现有几个JSON库可供选择。或者可以看这个答案

SOAP的支持不太好,可选的类库很少。您始终可以手动解析服务器生成的SOAP响应,但这会导致在服务器端进行合法的SOAP更改(例如不同的命名空间前缀)时变得脆弱,从而可能破坏硬编码的XML解析器。

4: 如果不了解项目的详细信息,则很难回答,但我倾向于使用基于JSON或简单XML的编码,因为:两者通常都很容易在客户端和服务器端进行编程,两者都可以以合理的效率在网络上执行,并且很可能对未来的应用程序迭代进行扩展。

JSON具有解析稍微简单、字节数量较少的优势,并且也可能更容易转换为其他用途,比如基于服务构建Ajax Web客户端。

5: XML vs JSON vs其他编码?我认为这是个人喜好。XML可能比JSON更自我描述,但是可能需要更多工作来解析。JSON在原始字节方面的开销可能较小,易于解析。同样,编码开销可能会因内容大小而显著或可以忽略不计。此外,您可以在任何情况下应用外部压缩。


哇,这是一个非常完整的答案。你不会看到很多做得这么好的答案。谢谢。我认为基于JSON vs XML,我以前在iPhone上做过XML解析,所以我知道那是怎么回事,我想我会尝试一个简单的测试应用程序来比较JSON vs XMl,并将其与我的实际数据进行性能比较。这将给我一个机会尝试使用JSON解析并看看哪个我最喜欢。我意识到自定义二进制格式更小,但我宁愿遵守标准。再次感谢。 - jamone
2
经过一些尝试,我决定使用JSON,并使用来自http://code.google.com/p/json-framework/的JSON固件。它在客户端和服务器端都非常简单易用。 - jamone

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接