api 폴더 이름은 반드시 api로 해줘야 한다.
next.js에서 페이지 경로를 정했던 것처럼 파일의 경로가 앤드포인트의 경로가 된다.
/api/short-links
export default function handler(request, response) {
response.send("hello api");
}
VSCode REST client로 GET 리퀘스트를 보낸다.
request.http
GET http://localhost:3000/api/short-links
페이지와 마찬가지로 다이나믹 라우팅도 가능하다.
/api/short-links/index.js
GET http://localhost:3000/api/short-links
/api/short-links/[id].js
GET http://localhost:3000/api/short-links/123
리퀘스트 객체는 리퀘스트 정보를 가져올때 사용한다.
export default function handler(request, response) {
response.send(request.query);
}
export default function handler(request, response) {
response.send(request.body);
}
export default function handler(request, response) {
response.send(request.cookies);
}
export default function handler(request, response) {
response.send(request.method);
}
메소드마다 다르게 처리하고 싶으면 switch문 활용
함수를 메소드 체이닝이라는 방식으로 사용한다.
메소드 체이닝 : 점 표기법으로 줄줄이 이어서 사용하는 것
res.status(404).send()
리스폰스로 보낼 바디를 전달
send 메소드는 문자열이나 객체를 보낼 수 있는 메소드
리스폰스로 보낼 HTTP 상태 코드 지정
상태 코드를 지정하려면 status()
함수를 사용하면 된다.
/pages/api/qrcodes/index.js
export default async function handler(req, res) {
switch (req.method) {
case 'POST':
res.status(201).send(req.body);
break;
case 'GET':
res.send([
{
id: 'abc',
title: '위키피디아 Next.js',
url: 'https://en.wikipedia.org/wiki/Next.js',
},
{
id: 'def',
title: '코드잇 자유게시판',
url: 'https://codeit.kr/community/general',
},
{
id: 'ghi',
title: '코드잇 질문답변',
url: 'https://www.codeit.kr/community/questions',
},
]);
break;
default:
res.status(404).send();
break;
}
}
/pages/api/qrcodes/[id].js
export default async function handler(req, res) {
const { id } = req.query;
switch (req.method) {
case 'GET':
res.send(id);
break;
case 'PATCH':
res.send({
...req.body,
id,
});
break;
case 'DELETE':
res.status(204).send();
break;
default:
res.status(404).send();
break;
}
}