鉴于您提出了多个问题,您可能已经意识到您使用的最终解决方案将是在竞争目标之间取得平衡的过程。
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在原始字节方面的开销可能较小,易于解析。同样,编码开销可能会因内容大小而显著或可以忽略不计。此外,您可以在任何情况下应用外部压缩。