通过Ajax直接访问服务器数据库(不使用PHP或其他一些中间件)

使用像jQuery这样强大的框架,似乎可以在客户端构建一个完整的应用程序逻辑。 这与将客户端应用程序构建为本机程序非常类似。

现在假设此客户端应用程序需要访问远程数据库。 通常的解决方案似乎涉及Ajax / PHP / MySQL层。

在我看来,不再需要PHP层; 所有逻辑和UI都由浏览器应用程序处理。

那么问题是:是否应该存在一个(希望是健壮且安全的)数据库服务器,它只接受HTTP请求,并返回XML结果? 然后可以通过例如客户端上的jQuery轻松解析此结果。

我似乎无法沿着这些方向找到数据库或框架。 有任何想法吗?

你的意思是,是否存在本机支持HTTP协议的数据库? 嗯,还有一些。 您有MonetDB / XQuery( http://monetdb.cwi.nl/XQuery/QuickTour/XRPC/ )和Noch数据库,如CouchDB( http://couchdb.apache.org/ )。 你也可以在像Oracle这样的传统rdbms中使用它(Oracle Application Express依赖于内置的HTTP服务器,也就是APEX服务http://www.oracle.com/technology/products/database/application_express/index.html )和MS SQL(服务架构对象,如http://msdn.microsoft.com/en-us/library/ms190332.aspx和XML视图,请参阅http://msdn.microsoft.com/en-us/library/aa286527 .aspx )

但实际上 – 你应该质疑这是否真的有用。

我的意思是,总会有一个处理HTTP的组件。 你可能觉得拿出webserver / php层会很好,因为你觉得它是额外的,并且位于应用程序和数据库之间。 但实际上,我刚才提到的解决方案并没有那么不同 – 它们被标记在同一块软件之上,但数据仍然需要流经这个额外的层。

您可以想知道这是否真的有益于将它全部集成在一起:使用单独的Web服务器,您可以独立于数据库服务器扩展Web服务器层。 或者,您可以独立于Web服务器层扩展数据库层。 如果它只是一个软件,你就不能。

基本上,通过将http服务器构建到数据库中,您将为数据库服务器增加一项任务,该任务会占用本可用于其他数据库任务的资源。 现在考虑一个常见的情况,您支付了数据库的每处理器许可证。 你是否真的愿意花费这个许可证来处理数据库处理HTTP请求,当你可以使用像apache这样的免费网络服务器完成这项任务时? 即使您使用的是免费的软数据库产品,在许多情况下数据库服务器也是一个瓶颈。 你真的想通过在其中构建一个HTTP服务器来将更多的任务放在它的盘子上吗?

我认为这不是一个好主意的另一个原因。 您提到XML作为数据交换格式。 古蒂。 但是如果你想要JSON呢? 还是YAML? 或者也许普通的CSV? 像PHP,ASP.NET,Perl甚至Java这样的Webserver脚本语言都有非常好的库来处理这些事情。 典型的数据库存储过程语言没有。 当然,你可以更进一步说,地狱,为什么不在数据库中构建Java或.NET,但这又将问题颠倒过来了 – 数据库的任务是存储和检索数据,并采取良好的行动在存储数据时对其进行处理。 处理数据以将其呈现给应用程序不是其中的一部分。 如果您将其作为数据库工作的一部分来处理这一问题,那么您将从整体上消除系统灵活性和可扩展性的重要来源。 您可能会觉得开销较少,因为需要考虑一个较少的组件(即网络服务器/脚本语言),但实际上,它仍然存在,它只是隐藏在您的数据库软件中,并且耗尽了本来可以用于的资源。存储和检索数据,解析查询等

好吧,烦人的部分将是身份validation。

由于代码完全在客户端运行,因此客户端知道访问数据库服务器的所有身份validation详细信息。

这相当……错误……不安全。 这可能是为什么没有多少人开发直接访问服务器的原因。

如果你真的想要将PHP /服务器端脚本保持在最低限度,那么建立一个相当强大的PHP代理,而不是正确地逃避所有数据。 将配置详细信息保存在单独的受保护的ini文件中,甚至是php.ini文件中,之后您几乎可以忽略服务器端脚本。

我想人们可以做到这一点,但PHP对于操作结果集更方便。 此外,传统方法提供了额外的安全级别,因此野外机器无法直接访问数据库,并且可以使用所有常用的Web服务器安全性和访问控制。