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

Java 将REST和Play框架集成到正在开发的LAMP系统中,java,php,scala,rest,playframework-2.0,Java,Php,Scala,Rest,Playframework 2.0,我正在一个巨大的系统上工作,这个系统正在开发一个标准的灯组。长话短说,我们犯了太多错误,我们目前的发展方向变得不可持续。总结我们存在的问题: 正在使用定制的、非常基本的PHP MVC框架,它不强制任何结构 没有使用ORM,允许开发人员各自开发自己的系统 前端由Smarty呈现,除此之外,所有的动态交互都是通过jQuery完成的 我们在系统的某些部分有一些繁重的处理,其中PHP出现故障/速度非常慢 没有使用单元测试 REST仅用于外部系统的某些API PHP框架不支持依赖项注入 我不会提及其他

我正在一个巨大的系统上工作,这个系统正在开发一个标准的灯组。长话短说,我们犯了太多错误,我们目前的发展方向变得不可持续。总结我们存在的问题:

  • 正在使用定制的、非常基本的PHP MVC框架,它不强制任何结构
  • 没有使用ORM,允许开发人员各自开发自己的系统
  • 前端由Smarty呈现,除此之外,所有的动态交互都是通过jQuery完成的
  • 我们在系统的某些部分有一些繁重的处理,其中PHP出现故障/速度非常慢
  • 没有使用单元测试
  • REST仅用于外部系统的某些API
  • PHP框架不支持依赖项注入
我不会提及其他导致系统混乱的问题,我认为这些是主要的问题。 我想通过引入类似于Twitter使用的东西,将系统的开发转向另一个方向——将系统拆分为与REST相连的模块(如果我的假设正确的话)。以下是我想介绍的内容:

  • 播放框架(Java/Scala)
  • 通过REST连接现有的灯组
  • 将Apache切换到Nginx
  • (很可能)前端使用Angular.js
  • 从长远来看,将整个现有的灯具转换为游戏
我面临的主要问题是,如有任何建议,我将不胜感激:

  • 考虑到REST是无状态的,我如何维持/通过状态?我们当前的LAMP显然为此使用PHP会话

也欢迎对这种特殊情况发表任何其他意见。

您想分享什么状态?当前登录的用户?还有别的吗?你想和谁分享?在不同的播放节点之间?在游戏和你的灯堆之间

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

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


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

您可以对现有的灯堆栈进行更改吗?例如,从PHP会话转移到memcached、redis或其他密钥库数据库?@ViniciusMiana问题是,当前的LAMP堆栈正在走向毁灭,由于我们必须重做大量代码,我宁愿选择一个更高级的堆栈。要通过REST将X与现有LAMP堆栈连接,您需要在现有堆栈上创建此REST API。一种方法是将状态从Php转移到Php消失后的状态。您的api将是无状态的,但会将一个键传递到存储在该存储中的状态,该状态可以通过使用Scala/Java或其他语言编写的新函数直接更新。。。