Next.js Route Handlers — Building API Endpoints with route.ts
app/api/ folder లోపల, route.ts ఫైల్ create చేస్తే, ఆ path ఒక API endpoint అవుతుంది — page.tsx లాగానే, kani UI బదులు JSON return చేస్తుంది:
import { NextResponse } from "next/server";
export async function GET() {
return NextResponse.json({
courses: ["JavaScript", "React", "Next.js"],
});
}
Ee endpoint /api/courses కి request వస్తే, JSON response return అవుతుంది.
import { NextRequest, NextResponse } from "next/server";
export async function POST(request: NextRequest) {
const body = await request.json();
if (!body.name) {
return NextResponse.json({ error: "Name is required" }, { status: 400 });
}
// ... save to database here
return NextResponse.json({ message: "Course created", course: body }, { status: 201 });
}
await request.json(): Incoming request body ni parse చేస్తుంది.{"{"}status: 400{"}"}: HTTP status code — 400 (Bad Request), 201 (Created) లాంటివి explicitly set చేయవచ్చు.
import { NextRequest, NextResponse } from "next/server";
export async function GET(request: NextRequest) {
const category = request.nextUrl.searchParams.get("category");
return NextResponse.json({ filteredBy: category });
}
URL /api/courses?category=web అయితే, category variable value "web" అవుతుంది.
| Function Name | HTTP Method | Typical Use |
|---|---|---|
GET | GET | Reading/fetching data |
POST | POST | Creating a new resource |
PUT | PUT | Full update of a resource |
PATCH | PATCH | Partial update of a resource |
DELETE | DELETE | Deleting a resource |
Same route.ts file లో, prathi HTTP method కోసం, ఆ method పేరుతో ఒక export function rాస్తే chాలు — Next.js automatic గా correct one call చేస్తుంది.
NextResponse.json() ki status code specify చేయకపోతే, default గా 200 (success) వస్తుంది — even for errors. Client-side code కి error ని correctly identify చేయడానికి, ఎప్పుడూ appropriate status code (400, 401, 404, 500) set చేయాలి.
Create a DELETE route handler for /api/courses/[id] that returns a success message with the deleted id.
import { NextRequest, NextResponse } from "next/server";
export async function DELETE(
request: NextRequest,
{ params }: { params: Promise<{ id: string }> }
) {
const { id } = await params;
// ... delete from database here
return NextResponse.json({ message: `Course ${id} deleted` });
}
Q Route Handlers, Server Actions కంటే ఎప్పుడు better?
External clients (mobile app, third-party webhook, public API) కి access కావాలంటే Route Handlers అవసరం. Internal forms/mutations కోసం matrame అయితే Server Actions simpler.
Q route.ts, page.tsx ఒకే folder లో ఉండొచ్చా?
Ledు — same route segment లో రెండూ ఉండలేవు. ఒక folder ki page.tsx (UI) leda route.ts (API) matrame ఉండాలి, రెండూ కాదు.
Q Route Handler లో database directly access చేయవచ్చా?
Avunు, Server Component లాగానే, Route Handlers ఎప్పుడూ server meedha run అవుతాయి కాబట్టి, database, secret keys safe గా వాడొచ్చు.