我有一个新项目,涉及为远足俱乐部的网站构建 Android 应用程序。该网站具有登录功能,之后用户可以浏览可用的徒步旅行、订阅徒步旅行、查看其他订阅者、联系组织者等。原始网站基于 MySQL 数据库,前端为 .asp 页面。大多数数据作为查询字符串上的 GET 参数通过页面传递。
刚接触 Android 开发,有些事情真的让我很困惑,即使在阅读了几篇教程之后。我正在考虑建立一个基于 REST Web 服务的架构,但是有几个障碍需要克服和选择。
除了使用 REST,还有一些其他选项可用:
从应用程序调用原始 .asp 页面,而不是构建专用的 Web 服务。这使我可以编写更少的代码,可以使用原始业务逻辑(查询 ea)以及登录系统(使用基于 cookie 的“记住我”功能)。缺点是响应中的 (X)HTML 代码需要解析以显示在应用程序 GUI 中,其中大部分响应代码是无用的镇流器代码。此外,从架构的角度来看,感觉也不是很好。
使用基于 SOAP 的 Web 服务。我对 SOAP 完全不熟悉,它对于移动设备来说似乎太重了。
使用 REST 服务。我倾向于这个选项,并且已经使用 SLIM 框架提供了一些已经工作的服务。但也有一些问题。首先,REST 根据定义是无状态的,似乎不支持会话。但是第一次登录后应用程序需要“记住我”选项,用户无需再次登录,除非他明确退出。
但是我们怎样才能做到这一点呢?
第一种选择是设计一些完全客户端站点登录/注销系统,该系统将凭据保存在本地,直到用户注销。并将每个请求的凭据作为 POST 参数发送到 Web 服务,或者以某种方式在 HTTP 授权请求标头中发送,尽管我对此并不熟悉。
第二种选择是稍微偏离 REST 原则并使用会话机制。将凭据发送到 Web 服务后,会创建一个 cookie 并将其发送到客户端应用程序。dartabase 无法扩展,因此无法在用户表中保存令牌。也许用户名/密码可以加密并作为 cookie 发送到应用程序,并在每个后续请求时解密?
我对此有点迷茫,期待认真的建议!