노알못 Node.js 정리: 초간단 RESTful API 서버 만들기

Table of Content

REST(REpresentational State Transfer) API

  • 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법
  • REST API를 사용한 주소 체계를 RESTful하다고 표현함
  • 주소와 HTTP 요청 메서드(GET, POST, PUT, PATCH, DELETE) 사용
    • GET: 서버 자원 가져오기
    • POST: 서버에 자원 등록
    • PUT: 서버 자원 치환
    • PATCH: 서버 자원 일부 치환
    • DELETE: 서버 자원 삭제
  • 예: GET 메서드의 /user 주소로 요청을 보내면 사용자 정보를 가져오는 요청임을 알 수 있음

준비

Express 서버 프로젝트 생성

Express 서버에 관한 설명은 노알못 Node.js 정리: Express 서버 참고

  1. express-generator 설치: npm i -g express-generator
  2. 프로젝트 생성: express PROJECT_NAME --view=pug
  3. Express 서버 관련 패키지 설치 PROJECT_NAME 폴더로 이동 후 npm i 명령어 실행

Postman 설치

Postman은 REST API 작동 테스트를 위한 프로그램. 이 프로그램을 사용하여 서버에 GET, POST, PUT, DELETE 요청을 보냄.

라우팅

위에서처럼 프로젝트를 생성하면 app.js 파일에 기본적으로 //users 주소에 대한 라우팅이 설정되어 있음.

/*** app.js ***/

// ...

// 라우터 객체
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

// ...

// 라우팅
app.use('/', indexRouter);
app.use('/users', usersRouter);

라우팅이 어떻게 작동하는지는 routes/index.jsroutes/users.js 파일에 구현되어 있음.

GET

/*** routes/users.js ***/

var express = require('express');
var router = express.Router();

const users = [
  { id: 1, name: 'Node.js' },
  { id: 2, name: 'npm' },
  { id: 3, name: 'Pengsu' },
]

// 모든 유저 정보를 제공하는 라우팅
router.get('/', function (req, res, next) {
  res.json(users);
});

// 경로 매개변수를 사용한 라우팅: 특정 유저 정보 제공
router.get('/:id', function (req, res, next) {
  user = users.find(u => u.id === parseInt(req.params.id))
  res.send(user);
});

module.exports = router;

작동 테스트 방법: 웹 브라우저에서 http://localhost:3000/users 또는 http://localhost:3000/users/1 접속 확인

POST

/*** routes/users.js ***/

var express = require('express');
var router = express.Router();

const users = [
  { id: 1, name: 'Node.js' },
  { id: 2, name: 'npm' },
  { id: 3, name: 'Pengsu' },
]

router.post('/', function (req, res, next) {
  const user = {
    id: users.length + 1,
    name: req.body.name
  }
  users.push(user);
  res.send(user);
});

module.exports = router;

작동 테스트 방법: Postman 사용

  • Request 종류: Post
  • 접속 주소: localhost:3000/users
  • Body 탭에서 종류는 raw, JSON 선택 후 다음과 같이 입력
    {
    "name": "Postman"
    }
  • Send 버튼을 클릭하여 Body 내용에 id와 name이 요청대로 들어있는지 확인

PUT

var express = require('express');
var router = express.Router();

const users = [
  { id: 1, name: 'Node.js' },
  { id: 2, name: 'npm' },
  { id: 3, name: 'Pengsu' },
]

router.put('/:id', function (req, res, next) {
  const user = users.find(u => u.id === parseInt(req.params.id));
  if (!user) { return res.status(404).send('ID was not found.'); }

  user.name = req.body.name; // users 값도 바뀌네? 왜죠...
  res.send(user);
  console.log(users);
});

module.exports = router;

작동 테스트 방법: Postman 사용

  • Request 종류: PUT
  • 접속 주소: localhost:3000/users/1
  • Body 탭에서 종류는 raw, JSON 선택 후 다음과 같이 입력
    {
    "name": "Postman"
    }
  • Send 버튼을 클릭하여 Body 내용에 name이 요청대로 수정되었는지 확인

DELETE

var express = require('express');
var router = express.Router();

const users = [
  { id: 1, name: 'Node.js' },
  { id: 2, name: 'npm' },
  { id: 3, name: 'Pengsu' },
]

router.delete('/:id', function (req, res, next) {
  const user = users.find(u => u.id === parseInt(req.params.id));
  if (!user) { return res.status(404).send('ID was not found.'); }

  const index = users.indexOf(user);
  users.splice(index, 1);

  res.send(user);
  console.log(users);
});

module.exports = router;

작동 테스트 방법: Postman 사용

  • Request 종류: DELETE
  • 접속 주소: localhost:3000/users/1
  • Body 탭의 종류는 none으로 설정
  • Send 버튼을 클릭하여 Body 내용에 삭제된 user 정보가 맞는지 확인

댓글 남기기