Next.js API 만들기 (1) API 라우팅

LeeKyungwon·2024년 6월 5일
0

프론트엔드 

목록 보기
44/56
post-custom-banner

API 라우팅

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

리퀘스트 다루기

리퀘스트 객체는 리퀘스트 정보를 가져올때 사용한다.

다이나믹 라우트의 params, 쿼리스트링 값을 가져올 수 있음 (같은 객체에 담겨있음)

export default function handler(request, response) {
  response.send(request.query);
}

리퀘스트의 body 값도 보낼 수 있다.

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()

리스폰스로 보낼 바디를 전달
send 메소드는 문자열이나 객체를 보낼 수 있는 메소드

status()

리스폰스로 보낼 HTTP 상태 코드 지정
상태 코드를 지정하려면 status() 함수를 사용하면 된다.

API 라우트 만들기 예시

/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;
  }
}

그 외의 다양한 프로퍼티와 메소드

API Routes - Request Helpers

API Routes - Response Helpers

post-custom-banner

0개의 댓글