java - 将REST和Play Framework集成到正在开发的LAMP系统中

标签 java php scala rest playframework-2.0

我正在开发一个巨大的系统,该系统正在标准 LAMP 堆栈上开发。长话短说,我们已经犯了太多错误,我们目前的发展方向正在变得不可持续。我们总结的问题:

  • 正在使用自定义且非常基本的 PHP MVC 框架,该框架不强制执行任何结构。
  • 不使用 ORM,允许开发者开发自己的系统。
  • 前端由 Smarty 渲染,此外所有动态交互均通过 jQuery 完成。
  • 我们在系统的某些部分进行了繁重的处理,导致 PHP 失败/速度非常慢。
  • 未使用单元测试
  • REST 仅用于外部系统的某些 API
  • PHP 框架不支持依赖注入(inject)

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

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

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

我面临的主要问题是:

  • 考虑到 REST 是无状态的,我将如何维护/传递状态?我们当前的 LAMP 显然为此使用 PHP session 。

也欢迎有关此特定情况的任何其他评论。

最佳答案

您想分享什么状态?当前登录的用户?还要别的吗?你想分享什么?不同Play节点之间?在 Play 和您的 LAMP 堆栈之间?

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

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

如果您为每个 Play 模块使用相同的应用程序 key (应用程序 key 用于签署/验证 session cookie),那么它们都将能够使用该机制共享状态。您甚至可以与现有的 LAMP 堆栈共享该状态,只需在 PHP 中实现 Play cookie 签名算法即可。

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

关于java - 将REST和Play Framework集成到正在开发的LAMP系统中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19102779/

相关文章:

java - Java 中的 Diamond Generic 和 Legacy

php - 在 composer.json 中放入多个需求

scala - 如何解决传递依赖版本冲突(scala/sbt)

php - 如果没有选择文件,则返回 false,但不起作用

scala - 如何在Scala中解决歧义方法引用

scala - Scala是否可以在下面的例子中自动传递参数?

java - Android Marshmallow 6.0.1 打破了我的连续语音识别

java - 其余搜索参数验证

java - 返回后用结果进行单元测试断言;

php - 将 Metatag 字符串插入 mysql 表