将REST和Play框架集成到正在开发的LAMP系统中


Integrating REST and Play Framework into LAMP system under development

我正在开发一个庞大的系统,该系统正在开发一个标准的LAMP堆栈。长话短说,犯了太多的错误,我们目前的发展载体变得不可持续。总结一下我们遇到的问题:

  • 正在使用自定义和非常基本的PHP MVC框架,它不强制执行任何结构。
  • 不使用ORM,允许开发人员提出自己的系统。
  • 前端由 Smarty 渲染,除此之外,所有的动态交互都是用 jQuery 完成的。
  • 我们在PHP失败/非常慢的系统部分进行了一些繁重的处理。
  • 不使用单元测试
  • REST 仅用于外部系统的某些 API
  • PHP 框架不支持依赖注入

我不会提到导致系统变得一团糟的其他问题,我认为这些问题是主要的。

我想通过引入类似于 Twitter 使用的东西来将系统的开发转向不同的方向 - 系统拆分为与 REST 连接的模块(如果我的假设是正确的(。这些是我想介绍的事情:

  • Play Framework (Java/Scala(
  • 通过 REST 将 Play 与现有 LAMP 堆栈连接
  • 将 Apache 切换到 Nginx
  • (最有可能(使用Angular.js作为前端。
  • 从长远来看,将整个现有的LAMP转换为播放

我面临的主要问题是,并希望得到任何建议:

    我将
  • 如何维护/传递状态,记住 REST 是无状态的?我们目前的 LAMP 显然为此使用 PHP 会话。

也欢迎对这一特殊情况提出任何其他意见。

你想分享什么状态? 当前登录的用户? 别的东西? 您想与什么分享它? 在不同的播放节点之间? 在游戏和你的 LAMP 堆栈之间?

如果状态量很小,并且它不敏感(即当前用户可以看到该状态(,则可以使用 Play 的会话。 游戏会话是完全无状态的,它们将状态存储在 cookie 中,并对 cookie 进行签名以防止篡改。 更多信息在这里:

http://www.playframework.com/documentation/2.2.x/ScalaSessionFlash

如果对每个 Play 模块使用相同的应用程序机密(应用程序机密是用于对会话 Cookie 进行签名/验证的模块(,则它们都可以使用该机制共享状态。 您甚至可以与现有的 LAMP 堆栈共享该状态,您只需要在 PHP 中实现 Play cookie 签名算法即可。

如果状态更大,例如你用它来缓存东西,或者如果你想存储可能敏感的状态,那么像memcached这样的东西可能适合你。