본문 바로가기

Node.js공부/예제를 통한 Node.js 공부

Node.js 공부 7 - RESTful API

반응형

REST 는 Representational State Transfer의 약자로서, www와 같은 하이퍼 미디어 시스템을 위한 소프트웨어 아키텍처 중 하나의 형식입니다. REST 서버는 클라이언트가 HTTP 프로토콜을 사용해 서버의 정보에 접근 및 변경을 가능케 하는데, 정보는 text, xml, json 등 형식으로 제공됩니다.


1. HTTP 메소드

1. GET - 조회

2. PUT - 생성 및 업데이트

3. DELETE - 제거

4. POST - 생성

* POST 와 PUT의 차이점: POST 는 클라이언트가 리소스의 위치를 지정하지 않았을 때, 리소스를 생성하기 위해 사용하는 연산이다. 따라서 POST연산을 수행하게 되면 계속해서 다른 곳에 리소스가 생성되는 것이다. 반면, PUT 은 리소스의 위치가 명확히 지정된 다음 사용하는 것으로, PUT을 할 때 마다 같은 곳에 정보를 올리기 때문에 수정이 가능하다. 


2. 데이터베이스 생성

JSON 기반의 사용자 데이터베이스를 만들어보겠습니다.

data 폴더 안에 user.json 파일을 생성해주세요.


{
"first_user":{
"password": "first_pass",
"name": "abet"
},
"second_user":{
"password": "second_pass",
"name": "betty"
}
}


첫번째 API: GET /list

모든 유저 리스트를 출력하는 GET API를 작성해봅시다. 

우선, user.json 파일을 읽기 위해서는, fs 모듈을 사용합니다.



module.exports = function(app,fs)
{
app.get('/', function(req, res){
res.render('index',{
title: "MY HOMEPAGE",
length: 5
})
});

app.get('/list', function(req, res){
fs.readFile(__dirname+"/../data/"+"user.json",'utf-8',function(err, data){
console.log(data);
res.end(data);
});
})
}


두번째 API: GET /getUser/:username

특정 username의 디테일한 정보를 가져오는 GET API를 작성해보도록 하겠습니다.

다음 코드를 router/main.js의 list API 아래에 작성해주세요.


module.exports = function(app,fs)
{
app.get('/', function(req, res){
res.render('index',{
title: "MY HOMEPAGE",
length: 5
})
});

app.get('/list', function(req, res){
fs.readFile(__dirname+"/../data/"+"user.json",'utf-8',function(err, data){
console.log(data);
res.end(data);
});
});

app.get('/getUser/:username', function(req, res){
fs.readFile(__dirname+"/../data/user.json", 'utf8', function(err, data){
var users = JSON.parse(data);
res.json(users[req.params.username]);
});
})
}



fs.readFile()로 파일을 읽으면 텍스트 형태로 읽어지기 때문에 JSON.parse()를 해야합니다.


세번째 API: POST addUser/:username


module.exports = function(app,fs)
{
app.get('/', function(req, res){
res.render('index',{
title: "MY HOMEPAGE",
length: 5
})
});

app.get('/list', function(req, res){
fs.readFile(__dirname+"/../data/"+"user.json",'utf-8',function(err, data){
console.log(data);
res.end(data);
});
});

app.get('/getUser/:username', function(req, res){
fs.readFile(__dirname+"/../data/user.json", 'utf8', function(err, data){
var users = JSON.parse(data);
res.json(users[req.params.username]);
});
})

app.post('/addUser/:username', function(req, res){
var result = { };
var username = req.params.username;

//CHECK REQ VALIDITY
if(!req.body["password"] || !req.body["name"]){
result["success"]=0;
result["error"]="invalid request";
res.json(result);
return;
}

//LOAD DATA & CHECK DUPLICATION
fs.readFile(__dirname + "/../data/user.json",'utf8',function(err, data){
var users = JSON.parse(data);
if(users[username]){
//DUPLICATION FOUND
result["success"]=0;
result["error"]="duplicate";
res.json(result);
return;
}

//ADD TO DATA
users[username]=req.body;

//SAVE DATA
fs.writeFile(__dirname+"/../data/user.json", JSON.stringify(users, null, '\t'), "utf8", function(err, data){
result={"success":1},
res.json(result);
})
})

});
}



JSON 형태가 invalid 하다면 오류를 반환하고, valid 하다면 파일을 열어서 username의 중복성을 확인한 후, JSON 데이터에 추가하여 다시 저장합니다.

stringify(users, null, 2)은 JSON의 pretty-print를 위함입니다.


테스트는 POSTMAN을 사용하였습니다.

POSTMAN을 이용하여 POST 메소드 사용시, Body 설정은 raw + JSON 으로 설정해주셔야 합니다 :)




네번째 API: PUT updateUser/:username

body:{"password":"____", "name": "_____"}

이 API 는 위의 API와 비슷합니다.

PUT API는 몇번 수행하더라도, 같은 결과를 보장해야 합니다!


마지막 API: DELETE deleteUser/:username


app.delete('/deleteUser/:username', function(req, res){
var result = { };
//LOAD DATA
fs.readFile(__dirname +"/.,/data/user.json", "utf8", function(err, data){
var users = JSON.parse(data);

//IF NOT FOUND
if(!users[req.params.username]){
result["success"]=0;
result["error"]="not found";
res.json(result);
return;
}
delete users[req.params.username];
fs.writeFile(__dirname+"/../data/user.json", JSON.stringify(users, null, '\t'), "utf8", function(err, data){
result["success"]=1;
res.json(result);
return;
})
});
});



반응형

'Node.js공부 > 예제를 통한 Node.js 공부' 카테고리의 다른 글

Node.js 공부 8 - express-session  (0) 2019.02.07
Node.js 공부 6 - EJS  (0) 2019.02.05
Node.js 공부 5 - express  (0) 2019.01.31
node.js 공부 4- Callback function  (0) 2019.01.31
Node.js 공부 3 - npm  (0) 2019.01.31