替代为iPhone应用程序构建适当的Web服务以供使用

时间:2011-04-21 07:17:25

标签: iphone web-services html-parsing

我正在为客户开发一款iPhone应用程序。除此之外,该应用程序将允许用户浏览和下订单特定(有形)产品。

客户有一个目前做类似事情的网站,由于预算有限以及网站运行在他们无法控制的第三方专有平台上,我们正在研究构建网络的可能替代方案服务。

在网站上,用户注册和身份验证以及通过安全HTTP通过POST请求完成订单。响应始终是格式化的HTML页面,其中包含指示请求是否成功的字符串,以及是否存在错误,错误是什么等。

因此,我可以在手机上复制POST请求,并解析HTML响应以读取每个请求的结果,您认为这是构建Web服务来处理此问题的可接受替代方案吗?

除了页面更改的可能性(我们可以管理)以及我可能必须下载并解析相对较大的HTML响应这一事实,这个解决方案还有其他任何缺点,还有什么我可能不见了?

非常感谢您的想法。 干杯, ROG

6 个答案:

答案 0 :(得分:12)

您可以创建一个与客户端服务器通信的中间服务器,并在其上公开一些REST Web服务,其中包含将由iPhone应用程序使用的json(开销小且易于处理)响应。

答案 1 :(得分:6)

因此,您将解析HTML并在第三方服务器上制定POST,并祈祷它们甚至不会重命名表单字段。

您的问题分为两部分:

  1. 我认为奇迹是可接受的解决方案吗?我没有。
  2. 我认为除了需要奇迹之外,还有其他缺点吗?没有我能想到的。
  3. 你没有问,但这是一个可怕的行动方案。两个建议。

    1. 我假设第三方平台的提供商不想通过提供API来启用第三方应用程序。他们有一个非常好的商业原因,这是它促进平台锁定。联系他们的支持部门并与他们进行交谈。

    2. 您必须在建立中间网络服务时出售客户。为了至少尝试减轻此第三方平台上的更改可能对您的应用造成的损害,我建议您构建并运行一个代理,该代理接收来自您的应用程序的请求,并将它们代理到第三方平台。您应该在此客户端 - 服务器协议中构建一种方法,用于返回“我们处于维护模式,离开”消息到应用程序,这是第三方服务器更改破坏您的应用程序的某个不可避免的日子(​​他们交换了计费和运输)例如,地址页面,你必须通过Apple匆忙通过更新来处理它。

    3. 代理可以用更灵活,更容易打包的东西编写,例如PHP,Python,Perl或Ruby。它可以在微实例中托管在亚马逊上。

      P.S。这个问题被不恰当地标记为目标C.

答案 2 :(得分:1)

HTML是最糟糕的,因为解析(每页1-2秒),内存和更改,但你已经知道了。请事先检查所需的所有数据是否在HTML上公开。

如果您使用中间服务器,您正在其他地方转移工作,并且您需要维护另一台服务器。我只会这样做,如果内存是一个问题。检查How To Choose The Best XML Parser for Your iPhone Project以获取内存/性能/ xpath支持。 libxml2是一个不错的选择,但这取决于您的需求。也许您在使用SDK之前需要检查ASIHTTPRequest功能。

答案 3 :(得分:1)

我认为使用JSON的Web语言将有助于缩短解析时间。通过构建一个REST服务,当发送GET请求时,返回正确的信息以便于排序,然后您可以比解析直接HTML快得多地显示输出。

我更喜欢JSON而非XML,但每个人都有自己的个人偏好。您应该看一些专门为解析XML和JSON而构建的非常好的库。

对于XML,我建议使用内置的libxml解析器。尽管如此,这有时会被认为非常难以使用。一个简单的谷歌搜索将带来一堆结果,这些结果与应该使用什么样的解析器有关,具体取决于要完成的任务。

对于JSON解析器,我建议使用SBJSON。我目前正在使用它,这是我承担的最大项目之一,它绝对适合我的使用。

如果您需要一种连接RESTful网络服务的好方法,请尝试使用LRResty

答案 4 :(得分:1)

不要在iPhone上寻找解析解决方案,原因有四个:

  • 服务器可以更改其设计并破坏您的应用程序(AppStore submition很长)+他们还可以检测到基于用户代理从应用程序发送请求,您必须更新应用程序才能更改它。
  • 有些请求可能是通过Javascript进行的,因此您不仅需要解析(X)HTML而且还要解析Javascript请求(可以采用XMLHttpRequest的形式,但不必)
  • 移动市场的长期演变:也许您的客户想要(或将要)Android,Blackberry,Bada OS(三星),Symbian(诺基亚/ OVIStore),Java Mobile或Windows Phone 7的应用程序?
  • 当然网络流量,解析HTML所需的内存和CPU(查看浏览器执行此操作所需的时间?)

关于流量,如果应用程序没有巨大的流量,您可以在家中托管您的代理。或者您可以找到一些提供商来为您托管它。我想你不需要超过几兆字节的存储空间,但可能需要流量。每年不到100欧元,您可以找到一些无限流量(如OVH Pro计划或Infomaniak)。但是,如果你想去Java看看谷歌应用引擎:只有你的流量很重要,并且你的应用程序生成许多CPU周期,你才需要付费。如果没有:你不需要付钱。它托管在Google服务器上:可靠。

答案 5 :(得分:0)

如果客户端已打开,您可以考虑paypal API