Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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;  
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away