オープンソースのNode.jsフレームワーク LoopBack QuickStart

# LoopBackとは

> 高い機能拡張性を持った、オープンソースの Node.js のフレームワーク

> * ほとんど、あるいは全くコードを書かずに、動的な end-to-end の REST APIs を作成できる。
> * 主要なリレーショナル・データベース、MongoDB、SOAPやREST APIのデータにアクセスできる。
> * モデル・リレーションシップと複雑なAPIへのアクセス制御を統合できる。
> * モバイルアプリのための、プッシュ通知、Geolocation、ファイル管理が扱える。
> * Android、iOS、JavaScript SDK のクライアントアプリを簡単に作ることができる。
> * オンプレミスでもクラウドでも動かすことができる。

# 事前にインストールが必要なもの

[Node.js](https://nodejs.org/ja/)

```sh
% node --version
v10.7.0

% npm --version
6.4.0
```

# インストール

## LoopBack ツールのインストール

LoopBackアプリを作成・編集するために、 **LoopBack コマンドラインインターフェース（CLI）ツール** をインストール

```sh
npm install -g loopback-cli
```

正常にインストールされたかを確認

```sh
% lb --version
4.2.1 (generator-loopback@5.9.4 loopback-workspace@4.5.0)
lb --version  3.43s user 0.99s system 82% cpu 5.337 total
```


# 始める

## 単純なAPIの作成

### アプリケーションの作成

```sh
# 作業用ディレクトリを作成
$ mkdir example-loopback/ && cd example-loopback/
```

**LoopBack ツール** を実行。
フレンドリーなアスキーアート（？）がいくつか質問してくるため、答えていく。

```sh
# ここでは、空のアプリケーション構築をリクエストする
$ lb
? アプリケーションの名前は何ですか? example-loopback
? どのバージョンの LoopBack を使用しますか? 3.x (Active Long Term Support)
? どのようなタイプのアプリケーションにしますか? empty-server (モデルおよびデータ・ソースが構成されていない空の LoopBack API)
.yo-rc.json の生成中


I'm all done. Running npm install for you to install the required dependencies. If this fails, try running the command yourself.


   create .editorconfig
   create .eslintignore
   create .eslintrc
   create server/boot/root.js
   create server/middleware.development.json
   create server/middleware.json
   create server/server.js
   create .gitignore
   create client/README.md
npm WARN deprecated swagger-ui@2.2.10: No longer maintained, please upgrade to swagger-ui@3.
npm notice created a lockfile as package-lock.json. You should commit this file.
added 439 packages from 454 contributors and audited 2292 packages in 11.529s
found 0 vulnerabilities



次のステップ:

  アプリケーションでモデルを作成します
    $ lb model

  アプリケーションを実行します
    $ node .

IBM の API Connect チームは、API Connect の中核を成す LoopBack の開発、
サポート、および保守を今後も継続します。
 ご使用の API に堅固な管理およびセキュリティー・オプションが必要な場合は、
http://ibm.biz/tryAPIC をご確認ください


```

ファイルが自動生成される

```
.
├── client
│   └── README.md
├── package-lock.json
├── package.json
└── server
     ├── boot
     │   └── root.js
     ├── component-config.json
     ├── config.json
     ├── datasources.json
     ├── middleware.development.json
     ├── middleware.json
     ├── model-config.json
     └── server.js
```

### データソースの追加

LoopBackの **QuickStart** 通りに進めると、いきなり **モデルの作成** に作業が進むが、データソースが設定されていない場合はそこから先に進めない（エラーとなる）。

したがって事前にデータソースを作成しておく。

練習用にオンメモリDBを利用.

```sh
$ cat <<EOF > server/datasources.json
{
  "db": {
    "name": "db",
    "connector": "memory",
    "file": "mydata.json"
  }
}
EOF

```


### モデルの作成


* モデルに使用する基本クラスを尋ねます。**PersistedModel** を選択
    * データベースにある永続的なデータソースにこのモデルを接続する場合に使用
* **REST API** でモデルを公開
* サーバー上でのみ公開
* `Book` というモデルを作成。
    * `title` プロパティのみを保持。


```sh
$ lb model
? モデル名を入力してください: Book
? Book を付加するデータ・ソースを選択してください: db (memory)
? モデルの基本クラスを選択します PersistedModel
? REST API を介して Book を公開しますか? Yes
? カスタム複数形 (REST URL の作成に使用します):
? 共通モデルですか、あるいはサーバー専用ですか? サーバー
では、Book プロパティーをいくつか追加しましょう。

完了したら、空のプロパティー名を入力してください。
? プロパティー名: title
   invoke   loopback:property
? プロパティー・タイプ: string
? 必須 Yes
? デフォルト値 [なしの場合は空白のまま]:

別の Book プロパティーを追加しましょう。
完了したら、空のプロパティー名を入力してください。
? プロパティー名:
```

### アプリケーションの実行

以下のコマンドを実行し、メッセージの通りブラウザで `http://localhost:3000` にアクセス。

```sh
$ node .
Web server listening at: http://localhost:3000
Browse your REST API at http://localhost:3000/explorer
```

**LoopBack API Explorer** ( `http://localhost:3000/explorer` ) にアクセスすれば、サービスとして提供されている **REST API** が一覧で見える。

![](https://monosnap.com/file/Z6xFP22r598xyIlG5dCoKjV4KBrv32)

### 動作確認

**LoopBack API Explorer** ( `http://localhost:3000/explorer` ) を使って、動作確認をしてみる。

ブラウザからボタン一つでリクエストを投げられるようになっているので、試してみる。

![](https://doc-10-68-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/cng92n1aq1d469l85861mtb2l239el8s/1541203200000/03634766059793639639/*/12rJCBvm40vOLkLEkV59W5OL9PyXBTmNl?e=view)


はじめは0件なのでよくわからない。
`PUT` リクエストを投げればデータの新規登録が可能。


# 参考資料

[LoopBack 3.x | LoopBack Documentation](https://loopback.io/doc/ja/lb3/)