用 Next.js 构建 RESTful API

··

Next.js Route Handlers

Next.js 13+ 引入了 Route Handlers,让你在同一个项目中即可构建前端页面,也可构建后端 API。

基础路由

// app/api/users/route.ts
import { NextResponse } from 'next/server';

export async function GET() {
  const users = await db.user.findMany();
  return NextResponse.json(users);
}

export async function POST(request: Request) {
  const body = await request.json();
  const user = await db.user.create({ data: body });
  return NextResponse.json(user, { status: 201 });
}

动态路由

// app/api/users/[id]/route.ts
export async function GET(
  request: Request,
  { params }: { params: { id: string } }
) {
  const user = await db.user.findUnique({
    where: { id: params.id },
  });
  
  if (!user) {
    return NextResponse.json(
      { error: 'User not found' },
      { status: 404 }
    );
  }
  
  return NextResponse.json(user);
}

中间件与认证

import { NextRequest, NextResponse } from 'next/server';

export function middleware(request: NextRequest) {
  const token = request.cookies.get('token');
  
  if (!token) {
    return NextResponse.redirect(
      new URL('/login', request.url)
    );
  }
  
  return NextResponse.next();
}

错误处理

良好的错误处理是 API 设计的关键部分。

export async function GET() {
  try {
    const data = await fetchData();
    return NextResponse.json(data);
  } catch (error) {
    console.error('API Error:', error);
    return NextResponse.json(
      { error: 'Internal Server Error' },
      { status: 500 }
    );
  }
}

最佳实践

1. 输入验证:使用 Zod 等库验证请求数据

2. 速率限制:防止 API 滥用

3. 版本控制:在 URL 中包含 API 版本

4. 文档:使用 Swagger/OpenAPI 自动生成文档

总结

Next.js Route Handlers 提供了简洁而强大的 API 构建方式,特别适合全栈应用开发。