2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローカル環境で、SQLite3 と MySQL と PostgreSQL で基本的なCRUD操作を行うREST APIを作成を試みました

Posted at

Something went wrong

NODE-REdの初学者ですが、ローカル環境のWindows10proで、Node-RED + SQLite3 + MySQL + PostgreSQL で基本的なCRUD操作を行うREST APIを作成を試みました

試みて、最初のつまずき、function ノードに INSERT文 UPDATE文 書き方がわかりにくかった。

SQLite3 と MySQL (MariaDBも) では、CRUDがとりあえず、動作したようなので( 正解なのかは、不明ですが )投稿させていただきます。(間違いあれば、ご指摘ください)

PostgreSQL は、インサートとアップデートの方法が、まだ不明です、 Microsoft SQL Server と Firebied用のノードも存在するようなので、ついでに、試してみましたが、今回は、動作に至りませんでしたた( ご存じの方/知見のある方は、補完いただけると幸いです )

テスト環境 サーバー側として

PC : Windows10
Node.js 20.10.0LTS
npm 10.2.3
NODE-Red v3.1.0
node-red-node-sqlite 1.1.0
node-red-node-mysql1.0.3
node-red-contrib-postgresql0.14.0
node-red-contrib-postgres-multi0.2.0 


データベースの共通構造として

データベース名 : test3
テーブル名 : users
テーブル構造 : CREATE TABLE users ( id int, name TEXT);


SQLite3は、DB Browser for SQLiteインストール 
データベースを D:\test3.db としました。
usersと名前でテーブルを作成
CREATE TABLE users ( id int, name TEXT);


MySQLは、8.0.35.0をインストール 
データベースを test3としました。
user を myusr1
パスワード を Passwd123
CREATE TABLE users ( id int, name TEXT(50));


MaridB 11.2.2 をインストール(接続ノードはMySQLで動作確認しました) 権限設定のコマンドは
CREATE Database test3;
use test3;
CREATE TABLE users ( id int, name TEXT);
grant all privileges on . to myusr1 identified by 'Passwd123';
FLUSH PRIVILEGES;
ma01.png

PostgreSQLは、16.1.1をインストール 
データベースを test3としました。
user を postgres
パスワード を Passwd123
CREATE TABLE users ( id int, name TEXT);


Firebird4.0をインストール 
データベースを d:\test3.fdbとしました。
user を sysdba
パスワード を Passwd123
CREATE TABLE users ( id int, name TEXT);


MS-SQLSERVER 2022Expressをインストール 
データベースを test3としました。
user を sa
パスワード を Passwd123
としましたが、認証モードの変更が、うまくできなかったまで、Windows認証ののま動作
CREATE TABLE users ( id int, name nTEXT);


Qiita

RESTAPIクライアント側として

POSTMAN や Insomnia ではなく、 embarcadero Delphi製 の REST Debugger で試してみました。


NODE-Redで SQLite を使用での 作成ルール (メソッドに _sq をつける)

HTTP メソッド URL SQL文の例
GET get_sq SELECT * FROM users order by id;
GET get_sq/:param_no SELECT * FROM users WHERE id = :param_no;
POST post_sq INSERT INTO users (id,name) values (:id ,' :name);
PUT put_sq/:param_no UPDATE users SET id=:id, name = :name WHERE id= :id;
DETETE del_sq/:param_no DELETE FROM users WHERE id = :param_no;

function ノードの記述

get_sq

msg.topic = "SELECT * FROM users order by id;"
console.log(msg.topic);
return msg;

get_sq/:param_no

nn = msg.req.params.param_no;
msg.topic = "SELECT * FROM users" + " WHERE id=" + nn + ";";
console.log(msg.topic);
 return msg;

post_sq

nn = msg.payload.id;    //int
mm = msg.payload.name;  //text
msg.topic = "INSERT INTO users " + " (id,name) values (" + nn +  ",'" +  mm + "');";
console.log(msg.topic);
return msg;

put_sq/:param_no

nn = msg.req.params.param_no;
mm = msg.payload.name;
msg.topic = "UPDATE users SET " + "  id=" + nn + ", name = '" + mm +  "' WHERE id=" + nn + ";";
console.log(msg.topic);
return msg;

del_sq/:param_no

nn = msg.req.params.param_no;
msg.topic = "DELETE FROM users" + " WHERE id=" + nn + ";";
console.log(msg.topic);
return msg;

node-redをデプロイ

node-red-node-sqliteの設定は、こんな感じです
21_node_sqlite.png

node-red_01_SQLite.png


REST DebuggerのContent-Type を application/jsonとします
Headers / Body / Tabular Data のタブを切り替えて、参照できます
post / put のJSON は、Custom body:に記述します

ma07.png

MariaDB上のデータ
ma05.png

SQLite用の実行例
get
 http://192.168.24.103:1880/get_sq
get
 http://192.168.24.103:1880/get_sq/3
put
 http://192.168.24.103:1880/put_sq/3
post
 http://192.168.24.103:1880/post_sq
delete
 http://192.168.24.103:1880/del_sq/5


データの新規追加登録(post)用のJSON

  {
    "id":1,
    "name":"AA"
  }
  {
    "id":2,
    "name":"BB"
  }
{
  "id":3,
  "name":"CC"
}

データの更新録(put)用のJSON

  {
    "name":"DD"
  }

NODE-Redで MySQL を使用での 作成ルール (メソッドに _my をつける)

MySQL-nodeの設定は、こんな感じです
22_node_mysql.png

HTTP メソッド URL SQL
GET get_my SELECT * FROM users order by id;
GET get_my/:param_no SELECT * FROM users WHERE id = :param_no;
POST post_my INSERT INTO users (id,name) values (:id ,' :name);
PUT put_my/:param_no UPDATE users SET id=:id, name = :name WHERE id= :id;
DETETE del_my/:param_no DELETE FROM users WHERE id = :param_no;

function ノードの記述内容はSQLitesと同じ

データの新規追加登録(post)用/更新録(put)用のJSONも同じ

MySQLのノードを追加してnode-redをデプロイ

node-red-node-mysql の設定は、こんな感じです
22_node_mysql.png

node-red_02_MySQL.png

MySQL用の実行例
get
 http://192.168.24.103:1880/get_my
get
 http://192.168.24.103:1880/get_my/3
put
 http://192.168.24.103:1880/put_my/3
post
 http://192.168.24.103:1880/post_my
delete
 http://192.168.24.103:1880/del_my/5


PostgreSQL用の課題

function ノードは何を使用するのがよいか node-red-contrib-postgresql / node-red-contrib-postgres-multi ?
上記例と同様の動作をしたい場合、function ノードに記述するのか?、PostgreSQLのノードに記述するのか?
などが、わからす、ChatGTP3.5にも、『 Node-Redで、PostgreSQLのrest-apiのサンプルJSON 』 などと聞いてみましたが、私は解決できませんでした

node-red_03_PostgreSQL.png

node-red-contrib-postgresql の設定は、こんな感じで、上2つと異なるところは、query を記述する箇所が存在しています
SELECT * FROM users order by id; を node-red-contrib-postgresql に直接記述して、functionノードなしで、動作しました
image.png

SELECT * FROM users WHERE id = :param_no; は
functionノードに
msg.params = [ msg.req.params.param_no ];
return msg;
26_node_pg.png

node-red-contrib-postgresql に
SELECT * FROM users WHERE id =$1;
DELETE FROM users WHERE id =$1; は 動作しました

INSET と UPDATE の 動的パラメータの引き渡し方が、まだ理解できていないので、動作さられなかったようで、サンプルを探したが見つけられませんでした、( ChatGTP3.5にも聞いては見たのですが....)


node-red-contrib-mssql-plus の設定は、こんな感じですか、設定間違いで、接続できていないようです
29_node_ms.png
30_node_ms.png

node-red-contrib-mssql-plus の設定は、こんな感じですか、設定間違いで、接続できていないようです

node-red-contrib-postgres-multi の設定は、こんな感じで、上2つと同様な感じです
24_node_pg.png


node-red-contrib-node-firebird も存在するようで、動作させらませんでしたが、こんな感じです
27_node_fb.png
28_node_fb.png


MS-SQLSERVERは たぶん node-red-contrib-mssql でも動作するような気がしますが、今回は、試せていません
32_ms.png
33_ms.png

ノーコードが大流行の昨今ですが、ノーコードで解決できにくい隙間を埋めるローコードのツールとして、NODE-Redの情報量(サンプルフロー)がふえると、ありがたいと感じています。

個人的にですが、
NODE-RedとRESTAPIの初学者としては、初歩的/基礎的なデータベース用のノードのサンプルが、増えることを願います。
こういった、疑問や質問は、スラックに投稿しても、良いものでしょうか?
あとオフラインの集まりがあれば、参加してみたいです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?