2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

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

最近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が備わっているフレームワークになっています。
興味がある方はそのへんも調べてみてはいかがでしょうか。

参考資料

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
2
Help us understand the problem. What are the problem?