php - 哪种类型的 Web 服务最适合 iOS?

标签 php iphone web-services ipad ios

我将为 iPhone 和 iPad 创建一个内部应用程序,用于跟踪销售电话、相关报价、照片和这些报价的图纸。我仍处于概念设计阶段,我正在尝试了解在我的应用程序和网络服务之间进行通信的不同方式。显然,因为这将主要用于 3G 或 ... Edge 我想要一个高效的协议(protocol),所以我的直觉 react 是远离基于 XML 的东西,如 XML-RPC 或 SOAP。我想在服务器上使用 PHP 和 MySQL,并计划在 iOS 上使用 Core Data。

所以我有几个具体问题:

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

最佳答案

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

1:您需要更好地定义“性能”。我假设您指的是网络传输时间,这意味着保持服务器延迟低和传输的字节数低。最终可能是一个自定义的二进制有线协议(protocol),它也被分析了可压缩性,并在适当的地方应用了压缩(例如重复的字符串或序列)。这种协议(protocol)的缺点是在服务器和客户端上编码可能会更加困难,因为您将无法使用 SDK 支持标准化编码,除非经过精心设计的二进制协议(protocol)往往难以支持 future 的变化和应用程序的扩展。

您还应该考虑如何定义协议(protocol)的事务,即使使用有效的编码,如果您的协议(protocol)需要多次往返而不是单次往返,您仍然会很慢。

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

我建议坚持使用可以通过库支持进行解析的标准化编码格式,这会将领域缩小到两种主要语法:XML 或 JSON。

2:XML 和 JSON 都在服务器框架中得到很好的支持。在使用 XML 服务时,我推荐使用 REST 样式模式,因为它们通常很容易构建,而且您不必使您的应用程序符合其他人的样式。

我会远离基于 SOAP 的 Web 服务,即使构建它们可能会得到很好的支持(尤其是在 Windows 平台上),因为在移动客户端上进行完整的基于 SOAP 的解析的复杂性很高,并且在那里没有得到很好的支持.我发现 WSDL 编译器自动生成的对象序列化对于节省编码时间并没有那么大的好处,通常很容易序列化为 REST 样式的 XML,或者对于 JSON 更简单。

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

如果您使用 Google 搜索,有几个适用于 iOS 的 JSON 库。或 look in this answer .

SOAP 没有得到很好的支持,并且库选择有限。您始终可以手动解析服务器生成的 SOAP 响应,但对于可能破坏硬编码 XML 解析器的合法 SOAP(例如不同的命名空间前缀)的服务器端更改来说,它是脆弱的。

4:如果不了解项目的更多细节,很难回答,但我倾向于 JSON 或简单的基于 XML 的编码,因为:两者通常都很容易在客户端和服务器上编程,两者都可以通过合理的方式完成在线上的效率,并且很可能可以为 future 的应用迭代进行扩展。

JSON 的优点是解析更简单,可以不那么冗长,并且可能更容易为其他目的重新分配任务,例如在您的服务之上构建 Ajax Web 客户端。

5: XML vs JSON vs. 其他编码?我认为这是个人喜好。 XML 可以比 JSON 更具 self 描述性,但解析工作可能更多。 JSON 可以降低原始字节的开销并且易于解析。同样,编码开销可能很大,也可能可以忽略不计,具体取决于内容的大小。您也可以在任何情况下应用外部压缩。

关于php - 哪种类型的 Web 服务最适合 iOS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3152700/

相关文章:

jquery - JSONP 响应被截断

php - 测试 Laravel Controller - 伪造 Illuminate\Http\Request

php - 生成和读取条形码

ios - UIButton 高度增加大小使用 AutoLayout 与不同的设备

wcf - 调用接收一长串对象的 Web 引用服务时出错

php - REST API 中的用户注册

javascript - 如何异步加载facebook sdk

php - UUID Cassandra 排序?

ios - 在 Swift 中记录 CLLocationPoints 时不准确

iphone - 按钮圆角上的 UIImage