Node.jsのAPIフレームワーク「LoopBack」を試してみる
Node.js のAPIフレームワークである「LoopBack」を試してみました。
はじめに
Google Sign-In を組み込もうとしていて、バックエンドサーバーは当初、Spring Boot で実装しようとしていましたが、学習コストが高そうなのでやめました。
「Authenticate with a backend server」によると、Google Sign-In のライブラリー(正確には Google API Client library)が使えるプログラミング言語は現状、Java、Node.js、PHP、Python しかないようです。
Java以外では、個人的にPHPはあまり好きでないのと、Pythonはフレームワークが少なそうなので、Node.js にすることにしました。
Node.js のフレームワークはいくつかあり、最初は、名前だけ知っていた Express にしようかと思い調べ始めましたが、Express 上に作られた LoopBack というフレームワークがあることを知り、ざっと情報を調べてみたところ、なかなか良さそうだったので使ってみることにしました。
Ref. LoopBack - Compare with other frameworks
環境
- Node.js 6.11.1
- LoopBack 3.9.0
- macOS 10.12.3
LoopBackのインストール
まずLoopBackのコマンドラインツールをインストールします:
npm install -g loopback-cli
Ref. Installation | LoopBack Documentation
サンプルアプリを生成
v3からは lb
コマンドで行います:
$ lb ? アプリケーションの名前は何ですか? lbnotes ? プロジェクトを格納するディレクトリーの名前を入力してください: lbnotes create lbnotes/ info 作業ディレクトリーを lbnotes に変更します ? どのバージョンの LoopBack を使用しますか? 3.x (current) ? どのようなタイプのアプリケーションにしますか? notes (A project containing a basic working example, including a memory database) .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. .....
今は日本語になってるんですね。
アプリのタイプですが、以下のような選択肢があります:
? どのようなタイプのアプリケーションにしますか? (Use arrow keys) ❯ api-server (A LoopBack API server with local User auth) empty-server (An empty LoopBack API, without any configured models or datasources) hello-world (A project containing a controller, including a single vanilla Message and a single remote method) notes (A project containing a basic working example, including a memory database)
今回はお試しなので、最後の「notes」を選んでみました。
基本的な操作
実行
$ node .
API一覧の表示
LoopBackでは、作成したモデルに対してREST APIのエンドポイントが自動的に割り当てられます。
デフォルトでは、以下のページにアクセスすると、各APIを操作できます:
http://localhost:3000/explorer/
Ref. Use API Explorer | LoopBack Documentation
ユーザー登録
POST /Users
設定項目は、username
, email
, password
のみです。
ログイン
/Users/login
username
, password
を指定します。
レスポンスの id
がアクセストークンなので、画面の一番上の欄にセットすると、/Users の他のAPIも使用できるようになります。(個人のアクセスが許可されていないものは除く。)
Ref. Introduction to User model authentication | LoopBack Documentation
Notesにアクセス制限をかける
いろいろいじってみると、ログインしていなくても /Notes にアクセスできることがわかりました。
Note が User に紐付いていると自動的にアクセス制限がかかるようですが、生成されたものは単独なので、誰でもアクセスできるようです。
そこで、ログインユーザーのみがアクセスできるようにしてみます。
まず、全ユーザーに対してアクセスを禁止するACLを設定します:
$ lb acl ? ACL エントリーを適用するモデルを選択します: Note ? ACL スコープを選択します: すべてのメソッドおよびプロパティー ? アクセス・タイプを選択します: All (match all types) ? ロールを選択します All users ? 適用する許可を選択します Explicitly deny access
その後、ログインユーザーだけに許可するACLを設定します:
$ lb acl ? ACL エントリーを適用するモデルを選択します: Note ? ACL スコープを選択します: すべてのメソッドおよびプロパティー ? アクセス・タイプを選択します: All (match all types) ? ロールを選択します Any authenticated user ? 適用する許可を選択します Explicitly grant access
これで、ログインしないと /Notes にアクセスできなくなりました。
インターラクティブなコマンドがあると、設定も簡単ですね。
Ref. Controlling data access | LoopBack Documentation
あとがき
今回はサンプルプロジェクトをセットアップして、アクセス権をいじってみただけですが、第一印象はいい感じです。