Node.js
loopback

Loopbackで簡単なRESTサービスを作ってみる

More than 3 years have passed since last update.

Loopback 2.17.1を使って、さくっとRESTfulなWebサービスを作ってみました。

loopbackの導入

コマンド一発。


% npm install loopback

loopbackを配布元サイトでは下記のように指定しています。


% npm install -g strongloop

試してこそいませんが、loopbackを配布しているStrongLoopがアプリケーション管理に使えるツールを付加しているんだと思います。
たとえば、slcコマンドとか。(slcコマンドについてはこちらが参考になるかと。)

基本構成を作成する

Yoemanで基本構成を作成する

Yeomanで基本構成を作ります。所要時間は5分もかからない程度です。


% yo loopback

     _-----_
    |       |    .--------------------------.
    |--(o)--|    |  Let's create a LoopBack |
   `---------´   |       application!       |
    ( _´U`_ )    '--------------------------'
    /___A___\
     |  ~  |
   __'.___.'__
 ´   `  |° ´ Y `

? What's the name of your application? (xxxx) sample[Enter]

【中略】

Next steps:

  Create a model in your app
    $ yo loopback:model

  Optional: Enable StrongOps monitoring
    $ slc strongops

  Run the app
    $ node .

ここまでくれば、とりあえず形ができています。

構成の概要

おおまかに概要を。詳しくはこちら

  • server :Nodeアプリケーションのスクリプト本体・設定ファイルを保存
    • server.js :アプリケーションのメインプログラム
    • config.json :アプリケーション設定ファイル
    • datasources.json :データソース設定ファイル(データの保持方法などを指定)
    • middleware.json :RESTアクセスがあった場合の挙動を変える機能の指定などの設定
    • model-config.json :モデルとデータソースのBindに関する設定ファイル
    • boot :Node起動時に使用するスクリプトを格納するディレクトリ
  • client :クライアント向けアプリケーション用のファイルを格納するディレクトリ
  • common :Nodeアプリ・クライアントアプリ双方の共有ディレクトリ
    • model :カスタムで作成したモデルのファイルや機能のスクリプトを格納するディレクトリ
  • node_modules :Nodeおなじみ
  • package.json :Nodeおなじみ(npm管理用)
  • README.md :一般的におなじみのREADMEを記載するファイル

モデルを作る

Next Stepsに書いてあった通り、Loopback内で使うモデルを作成する。Yeomanで1~2分でできます。


% yo loopback:model

モデルの名前を指定する

上記では、まずは名前を指定します。任意です。
ここでは、「SampleModel」という名前にします。


? Enter the model name: SampleModel [Enter]

モデルの保持方法の指定

次はモデルの保持方法。
DBに値を保存する等をここで選びますが、DBに保存するために必要なパッケージは
まだ入れていない状態なので、選べるものは限られます。
ここでは、Nodeが起動している間はメモリ内で保持されるdb (memory)を指定します。


? Select the data-source to attach SampleModel to: db (memory) [Enter] 

親クラスの指定

モデルのベースとなる親クラスを指定します。
もっともシンプルな親クラスとしてはModelですが、
これをExtendしてCRUDサポートを持っているPersistedModelを指定します。


? Select model's base class: PersistedModel [Enter] 

その他の設定

REST APIで使用するか、RESTで使用するURLはどうするかが聞かれます。

ここでは、RESTとして使用するので、1問目はYesを指定し、
REST URLは特に気にしないので、2問目は何もいれずにEnterします。


? Expose SampleModel via the REST API? Yes [Enter]
? Custom plural form (used to build REST URL): [Enter]

これらが終わると、モデルの大枠を作ってくれます。

プロパティを指定する。


Let's add some SampleModel properties now.

これが出ると、プロパティを指定する準備ができた状態になります。

とりあえず、「prop1」という名前のStringを扱う必須プロパティを作成します。


Enter an empty property name when done.
? Property name: prop1[Enter]
   invoke   loopback:property
? Property type: string[Enter]
? Required? Yes[Enter]
Let's add another SampleModel property.

これが出ると、1つ目のプロパティ定義は完了です。
さらにプロパティを増やす場合はこれを繰り返し続けます。
終わる場合は、プロパティ名を指定せず、単純にEnterを押すと抜けれます。


Enter an empty property name when done.
? Property name: [Enter]

これでモデルが出来上がりました。

内容の確認

モデルを格納する「common/models」配下に下記のファイルがあればOKです。

sample-model.json
{
  "name": "SampleModel",
  "base": "PersistedModel",
  "idInjection": true,
  "properties": {
    "prop1": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {},
  "acls": [],
  "methods": []
}
sample-model.js
module.exports = function(SampleModel) {

};

nodeの起動

作ったやつらが動くかどうかを確認してみます。

% node .

動いたところで、「 http://localhost:3000/explorer 」にブラウザからアクセスします。
Expressのインターフェースが表示されます。

SampleModelsの下にずらずらと並んでいる分がデフォルトで提供されているRESTサービスです。

rest-list.png

たとえば、データを作ってみる。(POST)

こんな感じのサンプルデータを登録してみる。(dataの部分)

POST-input.png

「Try it out!」ボタンを押すと、登録される。

POST-result.png

登録したデータを確認する(GET)

登録したデータを参照する。
GET-input.png

条件は特にないので、そのまま「Try it out!」ボタンを押すと、参照結果が表示される。

GET-result.png

1時間くらいでそれなりに使えるものができて、ありがたいですに。