2013-02-09 268 views
0

我有一个涉及为徒步旅行俱乐部网站构建Android应用程序的新项目。该网站具有登录功能,之后用户可以浏览可用的远足,订阅远足,查看其他订阅者,联系组织者等。 原始网站基于MySQL数据库,前端为.asp页面。大多数数据作为查询字符串上的GET参数传递给页面。使用Android应用程序扩展现有的Web应用程序

新的Android开发,有些东西真的让我困惑,即使阅读了几个教程。我正在考虑使用REST Web服务构建一个架构,但是有几个障碍需要克服和选择。

除了使用REST,其他一些选项:

  1. 呼叫从应用程序而不是建立一个专门的Web服务原来的.asp页。这为我留下了更少的代码来编写,原始的业务逻辑(查询e.a.)以及登录系统都可以使用(基于cookie的“记住我”功能)。缺点是响应中的(X)HTML代码需要解析以显示在应用程序GUI中,其中大部分响应代码都是无用的镇流器代码。另外,从档案的角度来看,它感觉不太好。

  2. 使用基于SOAP的web服务。我完全不熟悉SOAP,它对移动设备来说似乎太重量级了。

  3. 使用REST服务。我正在倾向于这个选项,并且已经使得一些已经使用SLIM框架的服务正在运行。但有 是一些问题。首先,REST根据定义是无状态的,并且 似乎不支持会话。但第一次登录后,应用程序需要“记住我”选项 ,除非明确注销,否则用户 不需要再次登录。

但是我们该怎么做到呢?

第一种选择是设计一些完全客户端站点登录/注销系统,它在本地保存凭证,直到用户注销。并将每个请求的凭证作为POST参数发送到Web服务,或者以某种方式在HTTP Authorization请求头中发送,尽管我对此并不熟悉。

第二种选择是偏离RESt原则,并使用会话机制。将凭据发送到Web服务后,会创建一个cookie并发送到客户端应用程序。 dartabase不能被扩展,所以没有选项可以在用户表中保存一个标记。也许用户名/密码可以加密并作为cookie发送到应用程序,并在每个后续请求中解密?

我有点迷失在这,期待认真的建议!

回答

2

我相信从长远的角度来看,重要的是你要倾向于REST接口。虽然JSoup和/或WebView方法肯定会起作用,但重要的是要有灵活性来重新定义/设计移动应用程序,而这些方式完全不受Server端的影响。 REST会帮助你,并且你不需要跟上服务器端,每次他们改变HTML页面等等。

去REST也将有助于未来编写额外的移动应用程序,甚至在不同的平台上iOS,如果你的路线图包含。

+0

谢谢,我打算遵循这个策略。我通过将每个用户特定请求的用户名/密码凭证作为GET参数传递给数据提取操作来扩展Web服务。现在这种方法很有效,虽然它不是很安全。这留下了大多数业务规则必须重新编写的问题,因为这些现在隐藏在.asp页面后面。如果这些业务规则可以放在一个普通的地方,那将是非常好的,但是我认为现有的Web应用程序必须在这种情况下重写... – klausch 2013-02-10 00:26:24

+0

旧的线程,但是您是否用建议的方法解决了这个问题?我正在做类似的事情,但是为了坚持ASP会议而与Google的Volley苦苦挣扎 – Jammo 2016-01-30 14:15:42

0

您可以使用jsoup解析您的Android应用程序中的html页面,并重新组织网页信息,该选项将使您能够快速开发应用程序,稍后您可能会考虑将REST接口添加到您的网站并在json中填充数据。 如果您不想分析html页面,您还可以使用WebView来放置您的网页。

+0

感谢您的回答,实际上这就是我在选项#3中所描述的,并且我已经阅读了关于Jsoup的最佳工具。我保留这作为后备选项,但仍希望找到一种方法来处理REST在未来几天的登录/会话问题。 – klausch 2013-02-09 20:57:02

+0

对不起,我的意思是选项#1 – klausch 2013-02-10 00:28:21

0

我建议你使用REST架构,如你所说。您可以使用Android的休息客户端库RESTDroid,查看指南,因为有一个实现示例,其中使用了特定Web服务所需的特殊标头(本例中为Parse.com)。