3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LoopBack4の概要 & Examples validation-appを動かしてみる

Last updated at Posted at 2020-06-03

最近LoopBack4を使ってAPIを作っているので、LoopBack4の概要をお伝えしたいです。

LoopBack4の概要

Node.js TypeScript/ES2017で実装された主にAPI向けのWEBフレームワークです。
IBMが買収したStrongLoopの開発しているOSSで、MITライセンスで公開されています。

TypeScriptのDecorator(アノテーション)でDependency Injectionの定義を行ったり、Modelのプロパティに付与することでOpenAPIのドキュメントを生成することが可能です。

self-hostedのREST API Explorerがあり、Modelを書いたらすぐに参照できるので、コードとドキュメントが必ず一致します。

また、CLIが用意されており、基本的なコードを生成したり、Exampleをインストールすることが可能です。

https://loopback.io/index.html
https://github.com/strongloop/loopback-next

環境の前提条件

  • macOS Catalina 10.15.5
  • Node.js v14.1.0
  • npm v6.14.5

LoopBack4 CLIのインストール

$ npm i -g @loopback/cli

Examplesのvalidation-app

Modelに定義した@property Decoratorや、Interceptorを利用したValidationのサンプルプロジェクトです。

インストール

$ lb4 example validation-app

起動

$ cd loopback4-example-validation-app
$ npm runn start

> @loopback/example-validation-app@1.5.0 prestart /Users/tomiyan/dev/loopback4-example-validation-app
> npm run build


> @loopback/example-validation-app@1.5.0 build /Users/tomiyan/dev/loopback4-example-validation-app
> lb-tsc


> @loopback/example-validation-app@1.5.0 start /Users/tomiyan/dev/loopback4-example-validation-app
> node -r source-map-support/register .

Server is running at http://[::1]:3000

REST API Explorer

ブラウザで
http://localhost:3000/explorer/
を開いてみてください。
下記のようなREST API Explorerが閲覧可能できるはずです。

これは、Controller@get@post@patch@put@del@param@requestBodyModel@propertyを元に自動的に生成されます。

スクリーンショット 2020-06-03 16.52.01.png

Validationの動作確認

POST /coffee-shopsのValidationを試してみましょう

Controller@postでModelのSchemaを参照するように定義されています。

また、Controller@interceptでinterceptorが実行されるように定義されています。

Modelでは@propertyで下記のようなjsonSchemaが定義されています。

  • city string
    • maxLength 10
    • minLength 1
  • phoneNum string
    • pattern \\d{3}-\\d{3}-\\d{4}
  • capacity number
  • maximum 100
  • minimum 1

Interceptorでは、cityが'toronto'の場合、phoneNumのprefixが'416'か'647'でなければならないという実装がされています。

正常系

RequestBody
{
  "city": "tokyo",
  "phoneNum": "031-234-5678",
  "capacity": 1
}

Status Codeは200が返ってきます。

ResponseBody
{
  "shopId": "1",
  "city": "tokyo",
  "phoneNum": "031-234-5678",
  "capacity": 1
}

※shopIdはインメモリデータベースで連番が振られます

スクリーンショット 2020-06-03 17.45.05.png

cityのmaxLengthを超えてみる

RequestBody
{
  "city": "kasumigaura",
  "phoneNum": "031-234-5678",
  "capacity": 1
}

Status Codeは422が返ってきます。

ResponseBody
{
  "statusCode": 422,
  "message": "My customized validation error message",
  "resolution": "Contact your admin for troubleshooting.",
  "code": "VALIDATION_FAILED"
}

cityがtorontoでphoneNumのprefixを'416'か'647'以外にしてみる

RequestBody
{
  "city": "toronto",
  "phoneNum": "031-234-5678",
  "capacity": 1
}

Status Codeは400が返ってきます。

ResponseBody
{
  "error": {
    "statusCode": 400,
    "name": "Error",
    "message": "Area code and city do not match"
  }
}

まとめ

LoopBack4でのOpenAPIの定義やValidationの動きなどのさわりについて説明しました。
その他にも、Dependency InjectionやORMが備わっているフレームワークになっています。
興味がある方はそのへんも調べてみてはいかがでしょうか。

参考資料

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?