NyanQL(にゃんくる)は、SQL を実行して JSON を返す API サービスです。
内部に保存された SQL ファイルや JavaScript ファイルを API 設定により選択し、実行結果を JSON 形式で返します。さらに、Push 機能を利用すると、ある API の実行結果を WebSocket 経由で別のクライアントに自動配信できます。
NyanQL には以下の機能があります:
- SQL 実行:動的パラメータ置換、条件分岐ブロック対応
- JavaScript スクリプト実行(
script
):自由に JSON を生成 - リクエスト検証(
check
):入力パラメータの事前検証 - WebSocket Push:別 API へのリアルタイム配信
関連プロジェクト:
- Nyan8(にゃんぱち):JavaScript 実行で JSON 生成
- NyanPUI(にゃんぷい):HTML 生成
- 対応データベース
- インストールと実行
- 設定ファイル
- SQL テンプレート構文
- JavaScript Script / Check
- ファイル操作ユーティリティ
- サーバ情報取得エンドポイント
- レスポンス形式
- アクセス方法
- JSON-RPC サポート
- 予約語
- MySQL
- PostgreSQL
- SQLite
- DuckDB
- GitHub Releases からホスト OS に合わせた ZIP をダウンロード
config.json
とapi.json
を編集- ターミナル または ダブルクリックで実行
NyanQL サーバの全体設定を記述します。
{
"name": "API サーバ名",
"profile": "サーバの概要説明",
"version": "v1.0.0",
"Port": 8080,
"CertPath": "./cert.pem",
"KeyPath": "./key.pem",
"DBType": "postgres",
"DBUser": "user",
"DBPassword": "pass",
"DBName": "dbname",
"DBHost": "localhost",
"DBPort": "5432",
"MaxOpenConnections": 10,
"MaxIdleConnections": 5,
"ConnMaxLifetimeSeconds": 300,
"BasicAuth": {
"Username": "admin",
"Password": "secret"
},
"log": {
"Filename": "./logs/nyanql.log",
"MaxSize": 5,
"MaxBackups": 3,
"MaxAge": 7,
"Compress": true,
"EnableLogging": true
},
"javascript_include": [
"./javascript/lib/nyanRequestCheck.js",
"./javascript/common.js"
]
}
- Port: HTTP/HTTPS ポート
- CertPath/KeyPath: SSL 証明書(HTTPS 有効化)
- DBType:
mysql
|postgres
|sqlite
|duckdb
- 接続プール:
MaxOpenConnections
/MaxIdleConnections
/ConnMaxLifetimeSeconds
- BasicAuth: ベーシック認証の設定
- javascript_include:
check
やscript
実行前に読み込む JS
ログ設定項目の説明
- Filename – 出力先ファイルパス
- MaxSize – 1 ファイルの上限サイズ(MB)
- MaxBackups – 保持世代数
- MaxAge – 保持日数
- Compress – 過去ファイルを gzip 圧縮
- EnableLogging – false で標準出力のみ
各 API エンドポイントごとに実行する SQL/スクリプトを定義します。
{
"list": {
"sql": ["./sql/sqlite/list.sql"],
"description": "当月の一覧を表示します。"
},
"check": {
"check": "./javascript/check.js",
"sql": ["./sql/sqlite/checkDay.sql"],
"description": "パラメータ検証と検索を同時に行います。"
},
"stamp": {
"sql": ["./sql/sqlite/insert_stamp.sql"],
"description": "本日のスタンプを記録します。",
"push": "list"
}
}
SELECT count(id) AS this_days_count
FROM stamps
WHERE date = /*date*/'2025-02-15';
リクエスト ?date=2024-02-15
で動的に置換されます。
SELECT id, date FROM stamps
/*BEGIN*/
WHERE
/*IF id != null*/ id = /*id*/1 /*END*/
/*IF date != null*/ AND date = /*date*/'2024-06-25' /*END*/
/*END*/;
条件に応じて WHERE 部分が自動展開されます。
- check: 入力検証用の JS。失敗時に
{ success:false, status:400, error:{ message: ... }}
を返す。 - script: 自由に JSON を生成。
nyanRunSQL
やnyanAllParams
が利用可能。 - nyan_mode=checkOnly: HTTP リクエストまたは JSON-RPC で
nyan_mode=checkOnly
パラメータを指定すると、check
スクリプトのみを実行し、その結果を返します。script
や SQL の実行は行われません。
文字列を Base64 エンコードして返します。
Base64 をデコードして元の文字列を返します。
エンコード済み Base64 をデコードし、destPath
にファイル保存します。
const raw = "こんにちは! にゃんくる";
const b64 = nyanBase64Encode(raw);
nyanSaveFile(b64, "./storage/hello.txt");
サーバの基本情報と利用可能な API 一覧を取得します。
レスポンス例
{
"name": "API サーバ名",
"profile": "サーバの概要説明",
"version": "v1.0.0",
"apis": {
"list": { "description": "当月の一覧を表示します。" },
"stamp": { "description": "本日のスタンプを記録します。" }
}
}
指定した API の詳細情報(説明、受け入れ可能パラメータ、出力カラム)を取得します。
レスポンス例
{
"api": "list",
"description": "当月の一覧を表示します。",
"nyanAcceptedParams": { "date": "2024-06-25" },
7B4F
"nyanOutputColumns": ["id", "date"]
}
{
"success": true,
"status": 200,
"result": [...]
}
{
"success": false,
"status": 500,
"error": { "message": "..." }
}
- HTTP:
http://localhost:{Port}/?api=API名
- HTTPS:
https://localhost:{Port}/?api=API名
- エンドポイント形式:
/API名
も同様
- エンドポイント:
/nyan-rpc
- JSON-RPC 2.0 準拠(batchは未実装)
api
、nyan
から始まる名前は予約語です。パラメータに使用しないでください。