-
[강의 정리] Node.js에서 API 서버 만들기 by 개발자의 품격공부 기록/JavaScript 2023. 2. 6. 20:55728x90
* Reference Video: https://www.youtube.com/watch?v=8XpVJaEWesM
node.js 기반으로 API 서버 만들기, REST API으로 구현
express을 기반으로 웹 서버 구축
*express는 node.js 기반으로 웹 서버를 구축해주는 하나의 모듈이다.
ㄴ 참고: https://naraewool.tistory.com/314
특정 url path로 서버로 호출했을 때 시스템에 있는 데이터를 사용자에게 전달해주는 프로그램을 짜보자.
터미널에서 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 에 들어오는 값을 파라미터로 받을 수 있음
다시 코드를 이렇게 수정해보서 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); } })
path만 입력하면 다 호출할 수 있으므로 보안을 위해 API 키가 있는 클라이언트만 요청을 허용하도록 해보자.
https://www.npmjs.com/package/uuid-apikey 을 참고하여 설치(npm install uuid-apikey)
생성하는 메서드 호출 시, key &uuid가 만들어짐. 웹서비스할 때는 이 값들을 DB에 저장하면됨
공부할때는 코드 내에 변수로 관리하기로
파라미터에서 apikey 받아올 수 있도록 변수로 선언. 올바른 apikey를 통해 path에 접근한 호출만 허용하도록 url도 수정.
isAPIKey() or check() 이용하여 API Key 검증(문서에 각 method 설명과 샘플 있음)
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); }; }; });
'공부 기록 > JavaScript' 카테고리의 다른 글
바닐라JS 챌린지 시작 (3/20~) (0) 2023.03.20 [강의 정리] Node.js웹 서버에 Swagger UI 입혀보기 by 동빈나 (0) 2023.02.09 [강의 정리] Node.js로 간단한 API 구현 및 정적 파일 제공해보기 by 동빈나 (0) 2023.02.08 [강의 정리] 한시간만에 끝내는 Node.js by 개발자의 품격 (0) 2023.02.05 [강의 정리] 자바스크립트의 역사와 현재 그리고 미래 by 드림코더 (0) 2023.02.03