2011-04-21 46 views
4

我正在为客户端开发iPhone应用程序的开发过程。除此之外,该应用程序将允许用户浏览特定(有形)产品并下订单。替代为iPhone应用程序构建正确的Web服务消费

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

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

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

除了页面更改(我们可以管理)和我可能不得不下载和解析相对较大的HTML响应的可能性之外,这个解决方案是否还有其他任何缺点,并且还有其他什么可能会丢失?

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

回答

12

您可以创建一个将与客户端服务器通信的中间服务器,并在其上使用JSON(小的开销,易于处理),将通过iPhone应用程序所消耗的反应暴露了一些REST Web服务。

+3

此外,一旦您发布iOS应用程序,它将永远存在,用户不需要更新,甚至在可能的协议更改后更新客户端...不要以为它就像一个网页,一切都会刷新一旦部署...(!!!) – lithium 2011-04-29 09:57:32

+0

感谢您指出我在正确的方向。如果您有兴趣,我决定使用Rails代理服务器。 – Rog 2011-04-29 13:43:44

1

HTML是最糟糕的,因为解析(每页1-2secs),内存和更改,但你已经知道了。请提前检查您需要的所有数据是否暴露在HTML中。

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

1

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

我更喜欢JSON over XML,但每个人都有自己的偏好。您应该看看几个非常好的库,这些库专门用于解析XML和JSON。

对于XML,我推荐使用内置的libxml解析器。尽管如此,这有时会被认为很难使用。一个简单的Google搜索会产生一堆结果,这些结果与应该使用哪个解析器有关,具体取决于要完成的任务。

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

如果您需要连接到RESTful Web服务的好方法,则应该尝试LRResty

+1

如果您看一下反序列化XML和JSON的性能,JSON会赢得很大的影响。 – 2011-04-24 02:07:21

+0

JSON一直赢得。移动开发和速度需求的一个主要因素。用户不想等待,他们希望快速。 – 2011-04-24 02:10:43

6

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

你的问题是两个部分:

  1. 我是否认为这是一个奇迹是一个可接受的解决方案?我不。
  2. 我是否认为除了需要奇迹之外,还有其他什么缺点?没有我能想到的。

你没有问,但这是一个可怕的行为。两点建议。

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

  2. 您必须向客户推销构建中介Web服务。为了至少减轻第三方平台上可能对您的应用程序造成的损害,我建议您构建并运行代理,以接收来自您的应用程序的请求,并将它们代理到第三方平台。您应该在此客户机 - 服务器协议中构建一种返回“我们处于维护模式,离开”消息到应用程序的方式,因为第三方服务器更改会破坏您的应用程序的某个不可避免的一天(他们将计费和运输例如地址页面),并且您必须通过苹果公司进行更新来处理它。

该代理可以用更灵活和易于使用的东西编写,例如PHP,Python,Perl或Ruby。它可以在微型实例中在亚马逊举办。

p.s.此问题被不恰当地标记为目标C.

+0

这不是我描述的场景。我不需要基于HTML解析来制定POST请求,我需要解析对POST请求的HTML响应,以查看结果是什么。不过,您对平台锁定是正确的!我不明白的是,在这种情况下,中介Web服务将如何发挥作用(除了iPhone端的效率),因为我只能用不同的编程语言来处理相同的潜在问题?或者我错过了你的观点? – Rog 2011-04-27 23:13:02

+0

没关系,我看到你的观点:通过App Store等更新应用程序,而不是我控制的东西。 – Rog 2011-04-27 23:14:29

0

如果客户端是开放的,您可以考虑paypal API

1

不要去在iPhone上解析方案有四个原因:

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

关于交通,如果应用程序将不会有巨大的流量,你可以在需要的主持您的代理。或者您可以找到一些提供商为您托管它。我猜你不需要超过几兆字节的存储空间,但可能会有流量。低于100欧元/年,您可以找到一些无限流量(如OVH Pro计划或Infomaniak)。但是如果你想去Java看看Google App Engine:只有当你的流量很重要,并且你的应用程序产生了很多CPU周期时,你才需要付费。如果不是,你不必支付。它托管在Google服务器上:可靠。