什么types的web服务最适合iOS?

我将为iPhone和iPad创build一个内部应用程序,以便跟踪销售电话,相关报价,照片和这些报价的图纸。 我仍然处于概念devise阶段,我正在尝试阅读我的应用程序和web服务之间的不同沟通方式。 显然,因为这将主要用于3G或…边缘我想要一个有效的协议,所以我的直觉反应是远离基于XML的东西,如XML-RPC或SOAP。 我想在服务器上使用PHP和MySQL,并计划在iOS上使用Core Data。

所以我有几个具体的问题:

  1. 我应该用什么scheme来performance?
  2. 我应该在服务器上使用哪种scheme以方便使用?
  3. 我应该使用什么scheme来简化在iOS上的工作?
  4. 考虑到整个项目,我应该使用什么scheme?
  5. 尽pipe存在networking开销,是否更好地使用基于XML的scheme? 为什么?

考虑到您提出多个问题的方式,您可能会意识到,您使用的最终解决scheme将是相互竞争目标之间的平衡。

1:你需要更好地定义“性能”。 我假设你指的是networking传输时间,这意味着保持服务器延迟低,传输字节数低。 最终可能是一个自定义二进制线协议,也适用于压缩和压缩(如重复的string或序列)分析。 这样一个协议的缺点是,在服务器和客户端上编码可能会更困难,因为你不能使用SDK支持标准化的编码,除非经过精心devise的二进制协议往往是脆弱的,以支持未来的变化和扩展到您的应用程序。

你也应该考虑如何定义你的协议的事务,即使是一个高效的编码,如果你的协议需要很多次往返,而单次往返你仍然会很慢。

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

我build议坚持一种标准化的编码格式,这个格式可以通过库支持进行parsing,这个格式将字段缩小为两个主要的语法:XML或者JSON。

2:XML和JSON在服务器框架中都得到很好的支持。 在使用XML服务时,我build议使用REST样式模式,因为它们通常很容易构build,而且不必将应用程序与其他人的样式相匹配。

我将远离基于SOAP的Web服务,即使构build它们可能会得到很好的支持(特别是在Windows平台上),因为在移动客户端上完成基于SOAP的parsing的复杂性很高,并且在那里得不到很好的支持。 我没有发现WSDL编译器自动生成的对象序列化在编码时节省了大量的时间,通常很容易序列化为REST风格的XML,或者通常更简单的JSON。

3:iOS支持内置的SAX风格的XMLparsing器,并且提供了多种可用的类库,支持具有不同特性和速度级别的内存DOM实现。 select一个最适合您的需求。 我个人更喜欢TBXML,它快速,相当轻量级,易于编程,但是因为它不validation模式,而且它是内存树,所以在某些情况下是不合适的。 这里是一个 iOS XML库性能的枪战 。

如果你有Google的话,有几个JSON库可用于iOS。 或者看看这个答案 。

SOAP没有得到很好的支持,并且只有有限的库select。 您总是可以手动parsing由服务器生成的SOAP响应,但是对于可能破坏硬编码的XMLparsing器的合法SOAP(例如,不同的名称空间前缀)的服务器端更改来说是脆弱的。

4:如果不知道更多关于项目细节的信息,很难回答,但是我会倾向于使用JSON或者简单的基于XML的编码,因为:两者通常都易于在客户端和服务器上编程,两者都可以在合理的效率并且可能对将来的应用迭代是可扩展的。

JSON的优点是分析起来更简单一些,可以不那么罗嗦,也可能更容易重新执行其他用途,例如在您的服务之上构build一个Ajax Web客户端。

5:XML与JSON与其他编码? 我认为这是个人喜好。 XML可以比JSON更自我描述,但可能是更多的工作来parsing。 JSON可以降低原始字节的开销,并且易于parsing。 再次,编码开销可能是重要的,或者可以忽略不计,取决于您的内容的大小。 您也可以在任何情况下应用外部压缩。

更新:iOS5现在包含新的NSJSONSerialization类的内置JSON支持。 您可以在这里阅读有关在iOS5上使用JSON的教程:

http://www.raywenderlich.com/5492/working-with-json-in-ios-5