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 서버 참고
- express-generator 설치:
npm i -g express-generator
- 프로젝트 생성:
express PROJECT_NAME --view=pug
- 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.js
및 routes/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 정보가 맞는지 확인