ohataです
今年もいよいよあと数日で終わりですね。 平成最後の紅白とか、平成最後ネタが盛り上がりそうですね。 個人的には年号変わる瞬間にJUMPして、[●!●!JUMP!]を狙う人が増えるといいなと思っています。 そんなわけで、平成最後の12/28ブログです
LoopBackについて
Express ベースのREST APIのフレームワークです
StrongLoop というものを、IBMが買収して提供しています。 Expressベースなので抵抗感がだいぶないです
インストール
LoopBackのGetting started とほぼ一緒ですがインストールをしていきます
$ npm install -g loopback-cli
プロジェクトの作成
$ lb
コマンドを叩くと、対話形式で必要な情報を聞かれるので、答えていきます
(日本語で聞かれると何か、子供扱いされているような気もしますが。。。)
|? アプリケーションの名前は何ですか? sample-api |? プロジェクトを格納するディレクトリーの名前を入力してください: sample-api |? どのバージョンの LoopBack を使用しますか? 3.x (Active Long Term Support) |? どのようなタイプのアプリケーションにしますか? api-server (ローカル・ユーザー認証を持つ LoopBack API サーバー)
対話が終了したら、プロジェクトディレクトが作成されるので、そちらに移動します
$ cd sample-api/
modelの作成
提供したい情報をmodel で管理するために modelを作成します。
モデル名とテーブル名が一致していた方が楽ですが、model : personで作成するとテーブルもpersonと関連するので、そこの定義がちょっと違和感あるかもしれません (people テーブルと関連させたい)
$ lb model
こちらも対話形式で作っていきます
|? モデル名を入力してください: person |? person を付加するデータ・ソースを選択してください: db (memory) #とりあえずmemory |? モデルの基本クラスを選択します PersistedModel |? REST API を介して person を公開しますか? Yes |? カスタム複数形 (REST URL の作成に使用します): |? 共通モデルですか、あるいはサーバー専用ですか? 共通 では、person プロパティーをいくつか追加しましょう。 完了したら、空のプロパティー名を入力してください。 |? プロパティー名: name |? プロパティー・タイプ: string |? 必須 Yes |? デフォルト値 [なしの場合は空白のまま]:
これでperson 情報にAPIでアクセスする準備が出来ました。
画面での確認
サービスを起動します
node .
開発モードではswaggerで確認できるので、確認も楽です
http://localhost:3000/explorer/
データの登録
まだ何も登録されていない状態なので、データ登録を行います せっかくなので swaggerから [POST] で作成します
データの確認
ブラウザからアクセスすると、登録したデータがJSONで返ってきました。
mysqlに変更
ただ、このままだとメモリーに状態が乗っているだけなので、 サーバーを落とすとデータが消えてしまいます。
そこで、情報自体をmysqlに保存していきます。
DBの準備
migration機能もあるが今回は動作確認のみなので、また後日 m(__)m データベースと[person]テーブルを作成します
$ mysql -uroot mysql> create database sample_api; mysql> use sample_api; mysql> create table person (id integer NOT NULL AUTO_INCREMENT, name text NOT NULL, email text NOT NULL, PRIMARY KEY(id));
datasourceの追加
mysqlの設定情報を追加します。
$ lb datasource
server/datasources.json に設定が追加されます
{ "db": { "name": "db", "connector": "memory" }, "sample-api": { "host": "localhost", "port": 3306, "url": "", "database": "sample_api", "password": "", "name": "sample-api", "user": "root", "connector": "mysql" } }
person モデルをmysqlと紐づける
server/model-config.json の dataSourceを[sample-api]に変更します
"person": { "dataSource": "sample-api", "public": true }
ここまで準備が出来たら、サーバーを再起動して、先ほどと同じように POST処理を行います。
DBに登録されているか確認します
$ mysql -uroot sample_api mysql> select * from person; +----+------+------------------+ | id | name | email | +----+------+------------------+ | 1 | hoge | hoge@example.com | +----+------+------------------+
mysqlで接続出来ない事象がでたら
検証中に 以下のようなエラーが出ました (他のマシンでは出なかった)
接続失敗: Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
上記エラーが出た場合は、こちらを使ってみてください
(高速らしいので、初めからこちらでも良いと思います)
npm i --save mysql2
server/datasources.jsonのconnectorを書き換える
"sample-api": { ・・・ "connector": "mysql2" }
まとめ
すごい初歩歴なところですが、既存データをモックで使いたい時など簡単に設定できるので楽だと思います。 もちろん実務レベルで使うにも使いやすく、DBのrelationsはもちろん、AccessTokenの処理も簡単に設定(これできるのは有難い)できるのでとても便利です。 (次回機会があれば投稿しようと思います) Expressベースなので、学習コストが低いのも嬉しい!
それでは、良いお年を!!