경로 계약
파일 구조가 URL이므로 컬렉션과 단일 리소스 경로를 나눕니다.
/api/users/[id]
app/api/users/route.ts가 동작하는 것에서 멈추지 않고, 입력 검증, 저장소, 인증, 응답 코드, 배포 런타임까지 하나의 API 계약으로 정리합니다.
파일 구조가 URL이므로 컬렉션과 단일 리소스 경로를 나눕니다.
/api/users/[id]
searchParams, params, request.json()의 필수값과 타입을 확인합니다.
400 Bad Request
메모리 배열 대신 Prisma나 DB 쿼리로 영속 데이터를 읽습니다.
db.user.findMany()
세션과 역할이 필요한 API는 핸들러 초반에 차단합니다.
401 / 403
환경 변수, 서버리스 시간 제한, CORS, 스트리밍 응답을 점검합니다.
runtime config
1. 요청 입력 읽기
2. 세션과 필수값 검증
3. DB 조회 또는 변경
4. 상태 코드와 JSON 모양 고정
NextResponse.json(result, { status })