使用像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/).您也可以在更传统的rdbms-es中使用Oracle(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?Web服务器脚本语言(如PHP,ASP.NET,Perl甚至Java)都有非常好的库来处理这些事情.典型的数据库存储过程语言没有.当然,你可以更进一步说,地狱,为什么不在数据库中构建Java或.NET,但这又将问题颠倒过来了 - 数据库的任务是存储和检索数据,并采取良好的态度在存储数据时对其进行处理.处理数据以将其呈现给应用程序不是其中的一部分.如果您将其作为db的工作的一部分来处理这一点,那么您将从整体上消除系统灵活性和可扩展性的重要来源.您可能会觉得它的开销较小,因为需要考虑一个较少的组件(即网络服务器/脚本语言),但实际上,它仍然存在,它只是隐藏在您的数据库软件中,并且吸收了可能用于的资源.存储和检索数据,解析查询等
好吧,烦人的部分将是身份验证.
由于代码完全在客户端运行,因此客户端知道访问数据库服务器的所有身份验证详细信息.
这相当......错误......不安全.这可能是为什么很多人没有开发出直接访问服务器的原因.
如果你真的想要将PHP/Server-Side脚本保持在最低限度,那么建立一个相当强大的PHP代理,而不是正确地逃避所有数据.将配置详细信息保存在单独的受保护的ini文件中,甚至是php.ini文件中,之后您几乎可以忽略服务器端脚本.