MySQL, postgreSQL, SQLiteへのSQLアクセスを簡単にAPI経由でできるようにするPHPアプリケーションを作ったので、公開してみました。
https://github.com/harasho2016/simple-API-Maker
このアプリケーションをサーバーに設置して、設定ファイルにDBへのアクセス情報を設定すれば、SelectとかDeleteとかInsertとかUpdateとかそういうよくある操作であれば、特に何の設定もなくAPI経由で操作できるようになります。
たぶん似たようなものがあるかもしれないですが、とりあえず試しで作ってみました。使っていただけると幸いです。あと改良点とか似たもの知っているよとかいう人がいれば、どんどん指摘してくれると嬉しいです。
Simple API Maker
https://github.com/harasho2016/simple-API-Maker
A). 目的
DBへの負荷軽減/高速化
- 想定① アプリケーションレベルでゴリゴリ実装
- 想定② Squid、リバースプロキシと併用
開発速度の向上
- SPA開発における高速開発化(javascriptからまるでDBを直接操作できるかのように)
車輪の再開発(再発明)を防ぐ
- データのCRUDを行うだけの単純なAPIなら、これ一つで十分としたい
B). 設定方法
0. 前提条件
a. MySQL/PostgreSQL/SQLiteが入っていること
b. DB,TABLEが存在していること
1. ドキュメントルートに設置
e.g /var/www/html
2. DB接続先を記述
設定ファイル置き場所: ./sys/var_{pf_type}.php
※ pf_typeは./sys_preference.iniに記述
設定箇所: DBの接続先, UserId, Pass
3. 設定完了!
使い方は、下記の「使い方」参考にしてください
C). 使い方
呼び出し方
/{VersionInfo}/{DBName}/{TableName}?{columnName}=val&set_{columnName}=val&{FunctionName}=val
Version Info
- 定義されていればどんな値でも可能
- e.g. v0.1~v999.99
DBName
- 設定ファイル(var.php)に記述している値を優先
- その場合、URLにはどんな値を埋め込んでも良い
- 記述がない場合は、URLに埋め込まれている値を参照する
TableName
- DBに存在するテーブル名
QueryMethod(All)
- MethodName = Select, Insert, Update, Delete
- メソッド名
- {columnName}
if SELECT, UPDATE, DELETE
- "Where" Selecter
else if insert
- "Insert" Target
QueryMethod(only UPDATE Method)
- set_{columnName}
- "UPDATE(SET)" Target
QueryMethod(only SELECT Method)
- numCountBool=true, false(default)
- trueの場合Select count(*) from {tableName}
- defaultはfalse
- orderBy=RAND, DESC, ASC
- ソート順
- DESCとASCを指定した場合はorderByTarget={columnName}を指定する必要アリ
- defaultは無指定
- limit=1
- 返却数
- 無指定の場合は50が
D). 値例
SELECT
http://127.0.0.1/{VersionInfo}/{DBName}/{TableName}
=> SELECT * FROM DBName.TableName LIMIT 50
http://127.0.0.1/{VersionInfo}/{DBName}/{TableName}?{colName1}=val1&{colName2}=val2&OrderBy=DESC&OrderByTarget={colName1}&MethodName=SELECT&qm_limit=15
=> SELECT * FROM DBName.TableName WHERE {colName1}=val1 AND {colName2}=val2 Order by {colName1} DESC LIMIT 15
INSERT
http://127.0.0.1/{VersionInfo}/{DBName}/{TableName}?qm_methodName=INSERT&{colName1}=val1&{colName2}=val2
=> INSERT DBName.TableName (colName1, colName2) VALUE('val1', 'val2');
UPDATE
http://127.0.0.1/{VersionInfo}/{DBName}/{TableName}?{colName1}=val1&{colName2}=val2&methodName=UPDATE&set_{colName1}=val3
=> UPDATE DBName.TableName SET {colName1}=val3 WHERE {colName1}=val1 AND {colName2}=val2 LIMIT 10
DELETE
http://127.0.0.1/{VersionInfo}/{DBName}/{TableName}?{colName1}=val1&MethodName=DELETE
=> DELETE FROM DBName.TableName WHERE {colName1}=val1;