본문 바로가기

Javascript/Node.js

Node.js API 구축 방법 기초

반응형

기본 JSON API

API는 한 코드 조각이 또 다른 코드 조각과 통신하는 방식이다.

API는 HTTP 요청을 받아서 JSON 데이터로 응답한다. (주로 JSON을 많이 사용한다.)

- 기본 원리

  요청을 받아서 요청을 분석하고 JSON 개체와 HTTP 상태 코드로 응답한다. 끝.

초간단하게 이해하기 위해서 억지스럽지만 임의의 정수를 반환하는 API를 만든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var express = require("express");
var app = express();
app.get("/random/:min/:max",function(req, res){
    var min = parseInt(req.params.min);
    var max = parseInt(req.params.max);
    if(isNaN(min) || isNaN(max)){
        res.status(400);
        res.json({ error: "Bad request"});
        return;
    }
    var result = Math.round( (Math.random() * (max-min)) + min );
  console.log(result);
    res.json({result:result});
});
app.listen(3000function(){
    console.log("APP started on port 3000");
});
 


[app.js]

예시로 localhost:3000/random/10/100을 입력하면 10~100사이 정수를 JSON형태로 출력한다.

새로고침할 때마다 바뀐다.

* 9번째줄의 return;이 없으면 함수의 나머지 부분이 계속 실행되고 Express에서 에러가 나기 시작한다.


API 에서 구축하는 것은 CRUD가 일반적인 패턴이다.

Create(생성), Read(조회), Update(수정), Delete(삭제)

이것을 API는 HTTP 메서드(기존에 사용했던 get, post 등...)로 구분하여 처리한다.

C = POST, R = GET, U = PUT, D = DELETE

위와 같은 방식으로 요청하면 그것을 분석하여 JSON형식으로 리턴! 하는 기본 원리를 따른다.

간단한 서버 사용 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var express = require("express");
var app = express();
app.get("/",function(req, res){
    res.send("you just send a GET request");
});
app.post("/",function(req, res){
    res.send("Hello POST");
});
app.put("/",function(req, res){
    res.send("PUT request");
});
app.delete("/",function(req, res){
    res.send("oh, delete");
});
app.listen(3000function(){
    console.log("APP started on port 3000");
});
 


늘 사용하던 대로 app.get, app.post, app.put, app.delete 이렇게 라우트를 정해놓으면 해당 요청이 왔을 때 해당 라우트로 가게된다.

위 서버를 켜놓고 테스트를 하려면 post, put, delete 요청은 보내기 어려우니 테스트용으로 Restlet Client 라는 크롬 플러그인을 받아서 테스트해보면 된다.

 https://chrome.google.com/webstore/search/Restlet%20Client << 다운로드 링크

잘 안보이지만 위에 요청하고 싶은 HTTP 메서드를 선택하고 URL을 입력하고 요청을 send해보면 아래에 결과가 나온다.


API 버전관리 하는 법

API를 제공하다가 수정해야할 때, 기존에 사용하던 사람들에게 갑자기 이용불가를 때려버릴순 없다.

따라서 버전을 만들어서 기존 사용자들은 낮은 버전의 api를 사용하고 신규 사용자들은 높은 버전의 api를 사용하게 하면 좋은 해결책이 될 것이다.

1
2
3
4
5
6
7
8
9
var express = require("express");
var api = express.Router();
 
api.get("/timezone",function(req,res){
    res.send("Sample response for /timezone");
});
 
module.exports = api;
 


[api1.js]

1
2
3
4
5
6
7
8
9
var express = require("express");
var api = express.Router();
 
api.get("/timezone",function(req,res){
    res.send("API 2 : super cool new response for /timezone");
});
 
module.exports = api;
 
cs

[api2.js]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var express = require("express");
 
var apiVersion1 = require("./api1.js");
var apiVersion2 = require("./api2.js");
 
var app = express();
 
app.use("/v1",appVersion1);
app.use("/v2",appVersion2);
 
app.listen(3000,function(){
    console.log("App started on port 3000");
});
 


[app.js]

이런식으로 api버전에 맞게 파일을 라우트해서 관리하면 된다.

localhost:3000/v1/timezone 하면 api1.js의 응답이 생기고

localhost:3000/v2/timezone 하면 api2.js의 응답이 생긴다.

반응형