序
フロントエンドの実験中や、開発の初期の初期、PoCの段階などで、DBを使いたいんだけどバックエンドを書くのめんどくさいってこと、ないでしょうか。私は割とあります。
そこで、SQLiteのDBを即席WebAPIにする開発用ツールを作りました。
npm
GitHub
Usage
-
npxで一撃です。
npx apifi-sqlite ./hoge.db 3000
- このコマンドを実行すると、
hoge.dbのテーブルごとに、http://localhost:3000/以下にエンドポイントが生えます。 - ポートは省略可能で、デフォルトは
3000です。 -
http://localhost:3000/にアクセスすると、APIのリストが雑に出ます。- ほんとはSwaggerみたいに出せればよかったのですが、そこまでするモチベーションがなかった。
サンプルDBをAPI化してみる。
- なんでもいいですが、私がよく使うSQLiteのサンプルDBはこれ。
npx apifi-sqlite ./chinook.db
するとこんな感じでAPIが生えます。
Server is running on http://localhost:3000
- GET : http://localhost:3000/albums
- DELETE : http://localhost:3000/albums
- POST : http://localhost:3000/albums
- PUT : http://localhost:3000/albums
- GET : http://localhost:3000/sqlite_sequence
- DELETE : http://localhost:3000/sqlite_sequence
- POST : http://localhost:3000/sqlite_sequence
- PUT : http://localhost:3000/sqlite_sequence
- GET : http://localhost:3000/artists
- DELETE : http://localhost:3000/artists
- POST : http://localhost:3000/artists
- PUT : http://localhost:3000/artists
- GET : http://localhost:3000/customers
- DELETE : http://localhost:3000/customers
- POST : http://localhost:3000/customers
- PUT : http://localhost:3000/customers
- GET : http://localhost:3000/employees
- DELETE : http://localhost:3000/employees
- POST : http://localhost:3000/employees
- PUT : http://localhost:3000/employees
- GET : http://localhost:3000/genres
- DELETE : http://localhost:3000/genres
- POST : http://localhost:3000/genres
- PUT : http://localhost:3000/genres
- GET : http://localhost:3000/invoices
- DELETE : http://localhost:3000/invoices
- POST : http://localhost:3000/invoices
- PUT : http://localhost:3000/invoices
- GET : http://localhost:3000/invoice_items
- DELETE : http://localhost:3000/invoice_items
- POST : http://localhost:3000/invoice_items
- PUT : http://localhost:3000/invoice_items
- GET : http://localhost:3000/media_types
- DELETE : http://localhost:3000/media_types
- POST : http://localhost:3000/media_types
- PUT : http://localhost:3000/media_types
- GET : http://localhost:3000/playlists
- DELETE : http://localhost:3000/playlists
- POST : http://localhost:3000/playlists
- PUT : http://localhost:3000/playlists
- GET : http://localhost:3000/playlist_track
- DELETE : http://localhost:3000/playlist_track
- POST : http://localhost:3000/playlist_track
- PUT : http://localhost:3000/playlist_track
- GET : http://localhost:3000/tracks
- DELETE : http://localhost:3000/tracks
- POST : http://localhost:3000/tracks
- PUT : http://localhost:3000/tracks
- GET : http://localhost:3000/sqlite_stat1
- DELETE : http://localhost:3000/sqlite_stat1
- POST : http://localhost:3000/sqlite_stat1
- PUT : http://localhost:3000/sqlite_stat1
GET
- 生えたエンドポイントをGETで叩くと、そのテーブルの中身をJSON配列で返します。
-
Where句での絞り込みは、クエリ文字列で渡します。
- クエリ文字列は、
?{field},{operator}={value}&...の形式で指定します。- 条件は複数使えますが、全て
andになります。-
orに対応しようとするとガチャガチャするかなと思って、一旦割り切りました。
-
- 条件は複数使えますが、全て
- 演算子は
eq(equals)、ne(not equals)、in、notin、like、notlike、gt(greater than)、ge(greater equal)、lt(lesser than)、le(lesser equal)が指定できます。- README.md#Operatorsも参照されたい。
POST
- 生えたエンドポイントをPOSTで叩くと、そのテーブルに
INSERTを流します。 - リクエストbodyに
{field: value}のようなJSON形式で、データを渡してあげます。
PUT
- 生えたエンドポイントをPUTで叩くと、そのテーブルに
UPDATEを流します。 - これも、リクエストbodyに
{field: value}の形で、データを渡してあげます。 - ちゃんとクエリ文字列で
Where句を書いてあげないと、全部上書きするので注意が必要。
DELETE
- 生えたエンドポイントをDELETEで叩くと、そのテーブルに
DELETEを流します。 - ちゃんとクエリ文字列で
Where句を書いてあげないと、全部消しますので注意。
おわりに
- フロントエンドの実験をする時に、めんどくさくてGitHubのAPI叩いたりしてたのですが、もうちょっと実態に即したデータで試したいなぁ、ということで作りました。
- 機能が限定的だったり、エラーハンドリングが雑でなんのエラーだかわからなかったり、まだまだ改善の余地はありますが、自分の開発用ツールとしてはまずまず便利に使えるものができました。
- 「欲しいものはある程度自分で作れる」のがプログラマーという職業のいいところです。