NestJS の OpenAPI 定義で `required: false` なクエリパラメータを指定する方法

Published at: 2021/09/05

問題

NestJS は、デコレーターベースで自身の openapi 仕様を定義できるが、@Query を付与したパラメータは、そのままだと required: true になってしまう。

解決

https://github.com/nestjs/swagger/issues/30#issuecomment-382376812

を見ていると、 @ApiImplicitQuery のメソッドデコレーターを利用する必要があることが分かり、また、

https://docs.nestjs.com/openapi/migration-guide

を見ると、このデコレーターは、今現在は @ApiQuery であることが分かる。

なので、

@Controller("transactions")
export class TransactionsController {

	@ApiQuery({
		name: "limit",
		description: "The maximum number of transactions to return",
		required: false,
		type: Number
	})
	@Get("recent")
	getRecentTransactions(@Query("limit", new ParseIntPipe()) limit: Number = 10) {
		...
	}
}

が、 required: false なクエリパラメータの定義方法。

tags: nestjsopenapi