我有一个Postgresql作为数据库的桌面应用程序。业务逻辑主要在存储过程中。因此,存储过程充当桌面应用程序的API。
现在,我想创建一个基于Web的应用程序子集版本,以便用户能够在移动设备上运行它。但客户端javascript无法直接访问数据库,因此我必须开发HTTP Web服务。因为这是一个局域网应用程序,我认为开发一个“正常”的Web API最多被5个用户使用是一种矫枉过正。所以我正在考虑创建一个Web服务,它只是解析通过HTTP从javascript发送的存储过程字符串,并返回格式化为JSON的表。
以下是它的工作原理:Web浏览器+ Javascript - >网络服务 - > DB +存储过程
客户端javascript将以这种格式传递给Web服务字符串:
storproc_name; dbtype1, arg1; dbtype2, arg2; dbtype3, arg3; ... and so on
Web服务将字符串解析为:
storproc_name(arg1, arg2, arg3, ...)
并返回一条json消息:
{
{
{ column_name: value}
{ column_name: value}
{ ... }
}
{
...
}
}
示例:
fn_login; varchar(32), admin; varchar(50), password;
由Web服务解析为:
fn_login('admin', 'password')
并返回:
{
{
{ code: 1 }
{ session_token: 'theusertokenusedtoaccessotherstoredprocedures' }
}
}
然后用户可以使用会话令牌执行其他操作
fn_list_products_by_category_id; varchar(50), theusertokenusedtoaccessotherstoredprocedures; integer, 2;
fn_list_products_by_category_id('theusertokenusedtoaccessotherstoredprocedures', 2)
{
{
{ product_id: 101 }
{ product_name: "book" }
}
{
...
}
}
我知道这是一种非标准的做法。我看不出这种方法有任何明显的缺陷。但任何意见都将受到高度赞赏。
答案 0 :(得分:1)
查看https://github.com/brianc/node-postgres.git
- 编辑 -
它是服务器端,但即使是LAN应用程序,您实际上也不希望在客户端上使用连接凭据。有了像node-Postgres这样的东西(还有很多其他的东西要看),你的客户端只需要向你的数据库服务器发出http请求。这将为您省去“解析存储过程字符串”并手动尝试设置所有内容的麻烦。几个月前,我正在玩类似的东西并合作进行概念验证:https://github.com/OrlandoPg/listen-notify。它不完全是你想要做的,但以它作为起点,你可以很快完成你的目标。
1)在数据库服务器或连接到数据库的连接池上安装节点和依赖项 2)设置节点服务以代理所有SP呼叫。 3)从客户端查询和处理结果。
Node和socket.io会为您处理所有管道,包括身份验证(如果您需要)。在您的情况下,您可以像我一样发出单个侦听查询,例如,您可以根据事件名称执行存储过程。我认为像这样的方法可以使客户端代码更轻,并且比在客户端中执行所有操作的安全风险更小。