Javascript на стороне клиента для вызова хранимой процедуры Postgresql - PullRequest
2 голосов
/ 09 ноября 2011

У меня есть настольное приложение с Postgresql в качестве базы данных. Бизнес-логика в основном в хранимых процедурах. Таким образом, хранимые процедуры действуют как API для настольного приложения.

Теперь я хочу создать веб-версию подмножества приложения, чтобы пользователи могли запускать его на мобильных устройствах. Но клиентский javascript не может напрямую обращаться к базе данных, поэтому мне нужно разработать веб-сервис HTTP. Поскольку это приложение для локальной сети, я думаю, что разработка «нормального» веб-API, который будет использоваться максимум 5 пользователями, является излишним. Поэтому я думаю о создании веб-службы, которая просто анализирует строки хранимых процедур, отправленные через HTTP из javascript, и возвращает таблицы в формате JSON.

Вот как это будет работать: веб-браузер + Javascript -> веб-сервис -> БД + хранимые процедуры

JavaScript-код на стороне клиента будет передаваться в строку веб-службы в следующем формате:

storproc_name; dbtype1, arg1; dbtype2, arg2; dbtype3, arg3; ... and so on

веб-сервис разбирает строку на:

storproc_name(arg1, arg2, arg3, ...)

и возвращает сообщение json:

{
    {
        { column_name: value}
        { column_name: value}
        { ... }
    }
    {
        ...
    }
}

пример:

fn_login; varchar(32), admin; varchar(50), password;

разобран веб-службой в:

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" }
    }
    {
        ...
    }
}

Я знаю, что это нестандартная практика. Я не вижу никакой очевидной ошибки в этом подходе. Но любой вклад будет принят с благодарностью.

1 Ответ

1 голос
/ 09 ноября 2011

Посмотрите на https://github.com/brianc/node-postgres.git

- изменить -

это сторона сервера, но вы действительно не хотите, чтобы ваши учетные данные подключались к клиенту, даже если это приложение для локальной сети. С чем-то вроде node-Postgres (есть множество других, на которые можно посмотреть), ваш клиент просто должен сделать http запросы на ваш db-сервер. Это избавит вас от необходимости разбирать строки хранимых процедур и вручную пытаться все настроить. Я играл с чем-то похожим несколько месяцев назад и работал над проверкой концепции: https://github.com/OrlandoPg/listen-notify. это не совсем то, что вы хотите сделать, но используя это в качестве отправной точки, вы могли бы очень быстро достичь своей цели.

1) Установите Node и зависимости на сервере БД или в пуле соединений, который подключается к вашей БД 2) Настройте службу вашего узла для прокси всех ваших вызовов SP. 3) Запрос от клиента и результаты процесса.

Node и socket.io позаботятся обо всем, что вам нужно, включая аутентификацию, если вы этого хотите. В вашем случае вместо того, чтобы выдавать один запрос на прослушивание, как я, вы можете выполнять свои хранимые процедуры, например, на основе имени события. Я думаю, что такой подход позволил бы сделать намного более легкий код на стороне клиента, а также снизить риски безопасности, чем делать все на клиенте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...