MongoDB、PHP和移动AP之间的中间层

MongoDB、PHP和移动AP之间的中间层,php,node.js,mongodb,database-design,serverside-javascript,Php,Node.js,Mongodb,Database Design,Serverside Javascript,我们计划使用PHP作为web前端和MongoDB作为数据库的web项目(会计软件)。此外,可能会有iPhone和Android的移动AP,可能还有RESTAPI等。我们需要在原始数据库上编写中间层(设计模式MVC或MVP中的“模型”),并尽可能多地共享功能。在这种情况下,编写中间层的明智方法是什么 我们正在考虑的方案: 1) 将中间层编写为PHP库。另外:与PHP前端的连接非常简单,但对于其他用例(移动AP、REST API…)来说并不太好编辑:对于安全性和隔离性也不是很好 2) 将中间层写入M

我们计划使用PHP作为web前端和MongoDB作为数据库的web项目(会计软件)。此外,可能会有iPhone和Android的移动AP,可能还有RESTAPI等。我们需要在原始数据库上编写中间层(设计模式MVC或MVP中的“模型”),并尽可能多地共享功能。在这种情况下,编写中间层的明智方法是什么

我们正在考虑的方案:

1) 将中间层编写为PHP库。另外:与PHP前端的连接非常简单,但对于其他用例(移动AP、REST API…)来说并不太好编辑:对于安全性和隔离性也不是很好

2) 将中间层写入MongoDB服务器。但是它们有太多的限制(db.eval()write lock,仅一个shard),而且似乎不推荐使用此MongoDB功能。我正在寻找可以扩展服务器端代码执行功能的MongoDB扩展,但没有找到

3) 将中间层编写为独立的web服务,例如在PHP、python或Node.js中。我看到的主要问题-MongoDB在BSON中通信。许多中间层函数将执行简单的MondoDB查询。然后,他们将不得不在其他一些序列化标准中对结果进行重新编码(因为BSON是MongoDB特有的),然后将结果发送给客户机——在我看来,这是一种巨大的浪费


除非我们找到更好的解决方案,否则我们可能会选择变体1),但任何建议都将不胜感激。

我写这篇文章是为了回答这个问题,因为评论太长了


关于点1),显然您不知道PHP是如何工作的,否则您会知道:

  • 移动应用是一个流行词。PHP至少从2004年开始为移动设备提供服务
  • RESTAPI。。。。PHP是一种web语言,REST类可以用不到20行代码编写
  • 安全性不取决于您使用什么,而是取决于您如何使用它。使用相同的逻辑,您是不安全的,因为您使用MongDB而不是
    $someOtherDbPackage

我将把答案放在这里,放在谷歌群组上

第二点不是真正的服务器端,而是在MongoDB自带的内置JS引擎中运行。正如你所说的,这将是一种可怕的方式

第三点也没那么糟糕,使用PHP创建一个单点入口,或者使用JSON与之通信,而MongoDB的PHP驱动程序将为您完成艰巨的工作,无需担心BSON。然而,它存在巨大的安全缺陷,其中之一是您需要打开一个直接接受MongoDB查询的接口,因此,即使“安全”,该接口也会立即成为安全黑洞


在我看来,你最好还是坚持第一点,因为这决定了你必须编写自己的库。相反,我会选择像Kohona、Limition或Yii这样的PHP框架。像这样的东西可能是你最好的选择。

是的,我知道PHP可以为移动AP服务,两周前刚刚完成PHP Amf服务器。我确实是用PHP作为web开发人员谋生的。我不是说PHP太不安全,我是说隔离中间层而不仅仅是将其放入库中会更安全。我不希望中间层直接接受MongoDB查询,我同意这会否定安全性。Ad 1)-这并不意味着我不想使用框架或基本库来构建它。只是整个结果都是以库的形式连接到PHP前端。@Stepan“作为库”是什么意思?它只是非常模糊,可以用来解释PHP中许多不同类型的层。那么你所说的中间层是什么意思呢?我可以不停地抛出各种场景,但不知道你在想什么,我无法准确地回答这个问题。