REST API 란 REST를 기반으로 만들어진 API를 의미합니다.
REST API를 알기 위해 REST 부터 알아보도록 하겠습니다.
REST
REST(Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것
1. HTTP URI( Uniform Resource Identifier )를 통해 자원을 명시하고
2. HTTP Method( POST, GET, PUT, DELETE, PATCH 등)를 통해
3. 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미합니다.
REST API란 이러한 REST의 원리를 따르는 API를 의미합니다.
오늘 작성한 REST API 프로젝트 코드(app.js) 예제를 통해 자세히 알아보겠습니다.
<package.json>
{
"name": "rest_api_sample",
"version": "1.0.0",
"description": "REST API without DB",
"main": "app.js",
"scripts": {
"dev": "nodemon app.js"
},
"keywords": [],
"author": "MCEA",
"license": "MIT"
}
<app.js>
const express = require("express")
const server = express();
const bodyParser = require('body-parser')
const db = require('./mydb');
server.use(bodyParser.json());
server.use(bodyParser.urlencoded( { extended : true } ));
const PORT = process.env.PORT || 3000;
server.get("/get-all-data", (_, response) => {
// CORS 보안 정책에 대한 허용
response.setHeader('Access-Control-Allow-Origin', 'http://127.0.0.1:5500');
response.json(db)
})
// url 키워드의 값이 변수여야 한다면, 앞에 콜론을 붙이자
// 아래와 같이 하면, id는 url에 포함된 변수(params)이다.
server.get("/get-data/:id", (request, response) => {
const id = request.params.id
const result = db.filter((item) => {
return item.id == id
})
response.json(result)
})
// post 데이터 내용을 토대로 배열에 요소 추가하기
server.post("/set-data", (request, response) => {
db.push({
id: request.body.id,
name: request.body.name,
birth: request.body.birth,
country: request.body.country
})
response.json(db)
});
server.post("/update-data", (request, response) => {
response.json(
db.map(item => {
if(item.id == request.body.id){
return {
id: request.body.id,
name: request.body.name,
birth: request.body.birth,
country: request.body.country
}
}else{
return item
}
})
)
});
server.get("/delete-data/:id", (request,response) => {
response.setHeader('Access-Control-Allow-Origin', 'http://127.0.0.1:5500');
response.json(
db.filter(item => {
return item.id != request.params.id
})
)
});
server.all("/*", (request, response) => {
response.status(404).json({
"status" : 404,
"message" : "BAD REQUEST!!"
})
})
server.listen(PORT, () => {
console.log("Server Listening on PORT :", PORT);
});
/get-all-data
/get-data/:id
/set-data, /update-data
/delete-data/:id
BAD REQUEST화면(url오타)
<mydb.js>
// 실제 db가 아닌 배열을 사용
const mydb = [
{
id: 1,
name: "엘리우드 킵초게",
birth: "1984.11.5",
country: "케냐"
},
{
id: 2,
name: "케네니사 베켈레",
birth: "1982.6.13",
country: "에티오피아"
},
{
id: 3,
name: "가와우치 유키",
birth: "1987.3.5",
country: "일본"
},
]
module.exports = mydb
실제 DB가 아닌 배열을 사용하였기 때문에 영구적인 저장이 되지는 않지만 REST API의 기능들을 알아보는 예제를 살펴봤습니다.