我将为iPhone和iPad创建一个内部应用程序,用于跟踪销售电话,相关报价,照片和这些报价的图纸。我还处于概念设计阶段,我正在尝试阅读我的应用程序和Web服务之间的不同通信方式。显然,因为这将主要用于3G或...边缘我想要一个有效的协议,所以我的直觉反应是远离基于XML的事情,如XML-RPC或SOAP。我想在服务器上使用PHP和MySQL,并计划在iOS上使用Core Data。
所以我有几个具体的问题:
答案 0 :(得分:39)
鉴于您提出多个问题的方式,您可能会意识到您使用的最终解决方案将是竞争目标之间的平衡行为。
1:您需要更好地定义“性能”。我假设你指的是网络传输时间,这意味着保持服务器延迟低和传输的字节数低。最终可能是定制的二进制线协议,其也被分析用于适当的压缩性和压缩(例如重复的串或序列)。这种协议的缺点是在服务器和服务器上编码可能会更加困难。客户端,因为您将无法使用SDK支持标准化编码,除非精心设计的二进制协议易于支持您的应用程序的未来更改和扩展。
此外,您应该考虑如何定义协议的交易,即使您的协议需要多次往返而不是一次往返,您仍然会很慢。
最后,根据您发送的数据的大小,与数据大小相比,编码的开销可能并不重要。
我建议坚持使用标准化编码格式,可以使用库支持进行解析,从而将字段缩小为两个主要语法:XML或JSON。
2:服务器框架中都支持XML和JSON。使用XML服务时,我建议使用REST样式模式,因为它们通常很容易构建,并且您不必将应用程序与其他人的风格相符。
我会远离基于SOAP的Web服务,即使构建它们可能得到很好的支持(特别是在Windows平台上),因为在移动客户端上执行完整的基于SOAP的解析的复杂性很高,并且在那里得不到很好的支持。我没有发现WSDL编译器自动生成的对象序列化在编码时节省了大量的时间,通常很容易序列化为REST样式的XML,或者甚至更简单的JSON。
3:iOS支持内置的SAX样式XML解析器,并且有各种类库可用于支持具有不同功能和速度级别的内存中DOM实现。选择最适合您需求的产品。我个人更喜欢TBXML,它快速,相当轻量级,并且易于编程,但由于它不验证模式并且它是内存中的树,因此在某些情况下它是不合适的。 iOS XML库性能的Here is a shootout。
如果您使用Google,可以使用几种适用于iOS的JSON库。或look in this answer。
SOAP不受支持,库选择有限。您始终可以手工解析服务器生成的SOAP响应,但它对于服务器端更改很脆弱,这些更改是合法的SOAP(例如,不同的名称空间前缀),可能会破坏硬编码的XML解析器。
4:在不了解项目细节的情况下很难回答,但我倾向于使用JSON或简单的基于XML的编码,因为:两者通常很容易在客户端和服务器上编程,两者都可以合理地完成在线上的效率,并且可能是未来应用迭代的可扩展。
JSON具有以下优点:解析起来更简单,可以更少冗长,也可以更容易为其他目的重新执行任务,例如在服务之上构建Ajax Web客户端。
5:XML vs JSON与其他编码?我认为这是个人偏好。 XML可以比JSON更具自我描述性,但可能需要更多解析工作。 JSON可以降低原始字节的开销,并且易于解析。再次,编码开销可能很大,或者可以忽略不计,具体取决于内容的大小。您也可以在任何情况下应用外部压缩。
答案 1 :(得分:7)
更新:iOS5现在包含对新NSJSONSerialization class的内置JSON支持。 您可以在此处阅读有关在iOS5中使用JSON的教程:
http://www.raywenderlich.com/5492/working-with-json-in-ios-5