用 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 构建方式,特别适合全栈应用开发。