TypeScriptとZodによる型安全なAPIの構築
TypeScriptとZodを組み合わせて、実行時も型安全性を担保したREST APIの実装テクニックを解説します。
はじめに
API開発において、型安全性は非常に重要です。TypeScriptはコンパイル時の型チェックを提供しますが、実行時のデータ検証も必要です。Zodを使用することで、TypeScriptの型安全性と実行時のバリデーションを統合できます。
Zodとは
Zodは、TypeScriptファーストのスキーマバリデーションライブラリです。主な特徴は以下の通りです:
- 型推論: スキーマからTypeScriptの型を自動生成
- 実行時バリデーション: データの検証を実行時に行う
- エラーハンドリング: 詳細なエラーメッセージを提供
基本的な使い方
スキーマの定義
import { z } from 'zod'
const UserSchema = z.object({
id: z.string().uuid(),
email: z.string().email(),
name: z.string().min(1),
age: z.number().int().positive().optional(),
})
type User = z.infer<typeof UserSchema>
バリデーション
function validateUser(data: unknown): User {
return UserSchema.parse(data)
}
APIエンドポイントでの活用
Next.js API Routeでの使用
import { NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
const CreateUserSchema = z.object({
email: z.string().email(),
name: z.string().min(1),
})
export async function POST(request: NextRequest) {
try {
const body = await request.json()
const validatedData = CreateUserSchema.parse(body)
// バリデーション済みのデータを使用
const user = await createUser(validatedData)
return NextResponse.json(user)
} catch (error) {
if (error instanceof z.ZodError) {
return NextResponse.json(
{ error: 'Validation failed', details: error.errors },
{ status: 400 }
)
}
return NextResponse.json(
{ error: 'Internal server error' },
{ status: 500 }
)
}
}
TypeScript×Zodで型安全なAPIを構築する要点
TypeScriptとZodを組み合わせることで、コンパイル時と実行時の両方で型安全性を担保できます。これにより、より堅牢なAPIを構築できます。
関連記事
ご相談・お問い合わせはこちら