일단 시작해보는 블로그

[Node.js] RESTful API 본문

개발/Node.js

[Node.js] RESTful API

Selina Park 2019. 8. 25. 15:50

REST는 Representational State Transfer의 약자로서, 월드와이드웹(www)와 같은 하이퍼 미디어 시스템을 위한 소프트웨어 아키텍쳐 중 하나의 형식이다.

 

REST 서버는 클라이언트로 하여금 HTTP 프로토콜을 사용해 서버의 정보에 접근 및 변경을 가능케 한다.

여기서 정보는 text, xml, json 등 형식으로 제공되지만 요즘 트렌드는 json이다.!.!

 

 

HTTP메소드

HTTP/1.1에서 제공되는 메소드는 여러개가 있지만 REST 기반 아키텍쳐에서 자주 사용되는 4가지 메소드는 다음과 같다.

1. GET : 조회

2. PUT : 생성 및 업데이트

3. DELETE : 제거

4. POST : 생성

 

 

다음은 user.json을 기반으로 restful api를 작성한 router.js파일이다.

 

//user.json
{
	"first_user": {
		"password": "first_pass",
		"name": "abet"
	},
	"second_user": {
		"password": "second_pass",
		"name": "betty"
	},
	"newuser": {
		"password": "second_pass",
		"name": "jinsun"
	}
}

 

 

// router.js
module.exports = function(app, fs){
    app.get('/', function(req, res){
        //render함수의 두번째 인자로 json데이터를 전달함으로써 페이지에서 데이터를 사용가능하게 된다.
        res.render('index', {
            title : "MY HOMEPAGE",
            length : 5
        });
    });

    app.get('/list', function(req, res){
        fs.readFile(__dirname + "/../data/" + "user.json", 'utf8', 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);
                })
        })
    })

    app.put('/updateUser/: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
        fs.readFile( __dirname + "/../data/user.json", 'utf8',  function(err, data){
            var users = JSON.parse(data);
            // ADD/MODIFY 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);
                })
        })
    });


    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 FROM DATA
            delete users[req.params.username];

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

    })


}

 

전체 코드 : https://github.com/ilikeu7246/nodeJS_study/tree/master/express_tutorial_ejs

'개발 > Node.js' 카테고리의 다른 글

[Node.js] 모듈과 미들웨어 개념  (0) 2019.08.25
[NodeJS] Express.js에 대하여  (0) 2019.08.16
[Node.js] About NodeJS  (0) 2019.08.08
Comments