#1 Data Analytics Program in India
₹2,499₹1,499Enroll Now
5 min read
•Question 16 of 47medium

How to create API routes in Next.js?

Building backend endpoints with Route Handlers.

What You'll Learn

  • Route Handlers
  • HTTP methods
  • Request/Response handling

Basic Route Handler

code.txtTSX
// 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 });
}

Dynamic Routes

code.txtTSX
// app/api/users/[id]/route.ts
export async function GET(
  request: Request,
  { params }: { params: { id: string } }
) {
  const user = await db.user.find(params.id);

  if (!user) {
    return NextResponse.json(
      { error: 'Not found' },
      { status: 404 }
    );
  }

  return NextResponse.json(user);
}

export async function DELETE(
  request: Request,
  { params }: { params: { id: string } }
) {
  await db.user.delete(params.id);
  return new Response(null, { status: 204 });
}

Query Parameters

code.txtTSX
export async function GET(request: Request) {
  const { searchParams } = new URL(request.url);
  const page = searchParams.get('page') || '1';
  const limit = searchParams.get('limit') || '10';

  const users = await db.user.findMany({
    skip: (parseInt(page) - 1) * parseInt(limit),
    take: parseInt(limit),
  });

  return NextResponse.json(users);
}

Headers & Cookies

code.txtTSX
import { cookies, headers } from 'next/headers';

export async function GET() {
  const cookieStore = cookies();
  const token = cookieStore.get('token');

  const headersList = headers();
  const auth = headersList.get('authorization');

  return NextResponse.json({ token, auth });
}