Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9409

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

$
0
0

最近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のサンプルプロジェクトです。

https://github.com/strongloop/loopback-next/tree/master/examples/validation-app

インストール

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

参考資料


Viewing all articles
Browse latest Browse all 9409

Trending Articles