HTTP method 함수가 반환할 Response 계약을 이해합니다.
실제 Route Handler는 app/api/.../route.ts에서 GET, POST 같은 이름으로 Response를 반환합니다. 예제는 같은 GET 함수를 페이지에서 호출해 status, header, JSON body 계약을 직접 확인합니다.
입력을 검증하고 인증·인가 실패, 찾을 수 없음, 충돌과 서버 오류 상태를 구분합니다.
내부 예외와 비밀 정보를 JSON 응답에 그대로 포함하지 않습니다.
모든 결과를 HTTP 200으로 반환하면 클라이언트와 관측 도구가 실패를 구분하기 어렵습니다.
로컬 프로젝트에서 확인해보세요id가 없을 때 400 Response를 반환하도록 GET에 입력을 추가하세요.
async function GET() {
return Response.json(
{ items: [{ id: 1, title: "Next.js" }] },
{ status: 200, headers: { "cache-control": "no-store" } },
);
}
export default async function Page() {
const response = await GET();
const data = await response.json();
return (
<main>
<h1>응답 상태 {response.status}</h1>
<p>{data.items[0].title}</p>
<code>{response.headers.get("cache-control")}</code>
</main>
);
}