5
3

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.

Nest.js + OpenAPI(Swagger)を試してみる

Last updated at Posted at 2019-07-16

前回、前々回でサーバーサイドのTypescript化およびDBアクセスまでできるようになりました。

前々回:Nest.js を使ってみる
前回:Nest.jsでSequelizeを使ってみる

今回はクライアントサイドからアクセスする部分を作ります。
Nest.jsデフォルトでも良いのですが、RestAPI標準規格(になると噂)のOpenAPI(旧Swagger)を導入したいと思います。

(2019/12/11追記)
最新のnestjs/swaggerではOpenAPI(Swagger3.0)に対応しているため、このページの内容は古くなっています。
nestjs/swagger4系についての記事も書いていますので、そちらを参照ください。
nestjs/swagger 3系(Swagger2.0)⇒4系(Swagger3.0(OpenAPI))へのバージョンアップ

OpenAPI(Swagger)とは

OpenAPI - Swagger:https://swagger.io/docs/specification/about/

これを導入すると、API仕様書を出力してくれるだけではなく、APIのテストができたりとかなり便利なツールです!
さらにopenapi-generatorを使うことでクライアントサイドからアクセスするためのAPIクライアントも自動生成できる(Angular用のコード出力もできます)ため、開発工数をぐっと減らすことができます:grin:

導入

Nest.js公式に導入方法が書いてありますので、それに従います。

@nestjs/swaggerのインストール

npm install --save @nestjs/swagger swagger-ui-express

main.tsでSwaggerのセットアップ

src/main.ts
import { NestFactory } from '@nestjs/core';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { ApplicationModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(ApplicationModule);

  const options = new DocumentBuilder()
    .setTitle('Cats example')
    .setDescription('The cats API description')
    .setVersion('1.0')
    .addTag('cats')
    .build();
  const document = SwaggerModule.createDocument(app, options);
  SwaggerModule.setup('api', app, document);

  await app.listen(3000);
}
bootstrap();

準備はこれだけです!

起動してみる

docker-compose upで起動し、ブラウザで/apiにアクセスしてみます。

image.png

めちゃくちゃ簡単です!!!

JSON形式で出力

/api-jsonにアクセスすると、JSON形式で出力することもできます。

image.png

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?