← NestJS コース
10. DTO — リクエストの形を定義する
DTO(Data Transfer Object)は、リクエストボディの形を表す専用クラスです。CreateUserDto のように「操作名 + Dto」という名前でクラスを作り、@Body() の型注釈に使います。インラインの型注釈と違い、ボディの形に名前が付いて再利用できるようになります。
実務では「1つの書き込み系エンドポイントに1つの DTO」を作るのが定番です。フロントエンドとの仕様のすり合わせも「この DTO の形で送ってください」と1ファイル見せれば済むため、API の入力仕様書としても機能します。
interface ではなく class で定義するのがポイントです。interface はコンパイル後に消えてしまいますが、class は実行時にも残るため、次のレッスンで学ぶ検証の仕組みが DTO を利用できるようになります。
サンプルコード(フレームワーク環境が必要なため表示のみ)
import { Body, Controller, Post } from "@nestjs/common";
// リクエストボディの形を表す専用クラス(= DTO)
export class CreateUserDto {
name: string;
age: number;
}
@Controller("users")
export class UsersController {
@Post()
create(@Body() dto: CreateUserDto) {
// ボディの形が名前付きで明示される
return { created: true, user: dto };
}
}