LoginSignup
63
60

More than 5 years have passed since last update.

MySQL, postgreSQL, SQLiteへのSQLアクセスを5分でAPI化するPHPアプリケーションを作ってみた

Last updated at Posted at 2016-05-02

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;  
63
60
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
63
60