ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [강의 정리] Node.js에서 API 서버 만들기 by 개발자의 품격
    공부 기록/JavaScript 2023. 2. 6. 20:55
    728x90

    * Reference Video: https://www.youtube.com/watch?v=8XpVJaEWesM

    node.js 기반으로 API 서버 만들기, REST API으로 구현

    (03:54)

    express을 기반으로 웹 서버 구축

    *express는 node.js 기반으로 웹 서버를 구축해주는 하나의 모듈이다.

    ㄴ 참고: https://naraewool.tistory.com/314

    특정 url path로 서버로 호출했을 때 시스템에 있는 데이터를 사용자에게 전달해주는 프로그램을 짜보자.

    (04:41)

    터미널에서 node api.js 입력하면 서버 연결됨!

    다음과 같이 get()을 정의하고 수정한 값 반영되도록 서버 다시 띄우기!

    const express = require('express');
    const app = express();
    
    const server = app.listen(3001, () =>{
      console.log('Start server : localhost:3001');
    }); // 포트가 3001인 서버 띄우기
    
    app.get('/api/user/:type', async (req,res)=>{ // url path, async (요청, 응답)
      res.send('connect.'); // 성공 시 보여지는 응답
    })

    포스트맨을 이용하여 localhost:3001/api/user/1로 GET 요청을 보내면, 지정한 메시지 나옴(connect.)

    :type은 무엇이냐? :type 에 들어오는 값을 파라미터로 받을 수 있음

    (06:23)

    다시 코드를 이렇게 수정해보서 postman을 이용하여 요청을 보내보면,

    app.get('/api/user/:type', async (req, res)=>{
      // res.send('connect.');
      let {type} = req.params;
    
      console.log(type);
      res.send('ok');
    })

    성공 시 'ok'를 보여주고, 요청 시에 :type 위치에 지정한 파라미터(1) 값이 콘솔 로그에 출력된다.

    배운 걸 이용하여 다음과 같은 코드를 짜볼 수 있다.

    const express = require('express');
    const app = express();
    
    const server = app.listen(3001, () =>{
      console.log('Start server : localhost:3001');
    });
    
    app.get('/api/user/:type', async (req, res)=>{
      // res.send('connect.');
      let {type} = req.params;
    
      if (type=='seoul'){
        let data = [{
          name: "홍길동",
          city: "seoul"
        },
        {
          name: "김철수",
          city: "seoul"
        },
        ];
        res.send(data);
      } else if (type == 'jeju'){
        let data = [{
          name: "박지성",
          city: "jeju"
        },
        {
          name: "손흥민",
          city: "jeju"
        },
        ];
        res.send(data); 
      } else{
      res.send(data);
      }
    })

    (12:31)

    path만 입력하면 다 호출할 수 있으므로 보안을 위해 API 키가 있는 클라이언트만 요청을 허용하도록 해보자.

    (13:45)

    https://www.npmjs.com/package/uuid-apikey 을 참고하여 설치(npm install uuid-apikey)

    생성하는 메서드 호출 시, key &uuid가 만들어짐. 웹서비스할 때는 이 값들을 DB에 저장하면됨

    (15:36)

    공부할때는 코드 내에 변수로 관리하기로

    파라미터에서 apikey 받아올 수 있도록 변수로 선언. 올바른 apikey를 통해 path에 접근한 호출만 허용하도록 url도 수정.

    (16:27)

    isAPIKey() or check() 이용하여 API Key 검증(문서에 각 method 설명과 샘플 있음)

    (19:41)

    const express = require('express');
    const app = express();
    const uuidAPIKey = require('uuid-apikey');
    
    const server = app.listen(3001, () =>{
      console.log('Start server : localhost:3001');
    });
    
    //console.log(uuidAPIKey.create()); // API 키 생성하는 메서드
    
    
    //발급받은 키와 uuid. 실제 서비스엔 별도의 DB로 관리
    const key = {
      apiKey: '08R9NZG-60R40KA-Q1K2421-AKYC7E2',
      uuid: '02309afe-3030-404d-b866-220854fcc3b8'
    };
    
    
    app.get('/api/user/:apikey/:type', async (req, res)=>{
      let {
        apikey,
        type} = req.params;
    
      //API키가 아니거나 할당된 키가 아닐 경우 에러 메시지 띄우기
      if(!uuidAPIKey.isAPIKey(apikey) || !uuidAPIKey.check(apikey, key.uuid)){ 
        req.send('apikey is not valid.');
      } else { //그렇지 않으면, 즉 검증된 API 키라면 다음 데이터 반환
      if (type=='seoul'){
        let data = [{
          name: "홍길동",
          city: "seoul"
        },
        {
          name: "김철수",
          city: "seoul"
        },
        ];
        res.send(data);
      } else if (type == 'jeju'){
        let data = [{
          name: "박지성",
          city: "jeju"
        },
        {
          name: "손흥민",
          city: "jeju"
        },
        ];
        res.send(data); 
      } else{
      res.send(data);
      };
    };
    });

     

    댓글

Designed by Tistory.