Node.js발행일 2022. 12. 1.원본 https://blog.naver.com/jword_/222942799469 ↗

[AI스쿨] express js RESTful API 설계하기 (GET)

[AI스쿨] express js RESTful API 설계하기 (GET) — #AI스쿨 #expressjs #expressapi #RESTfulapi AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용...

#Node js#Naver Blog

#AI스쿨 #expressjs #expressapi #RESTfulapi

​

AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다

학습법 이론

학습을 하기 이전, 명심해야할 학습법이 있다.

​

1.이해가지 않는다고 뒤돌아가 다시 보지 말 것

2.외우지 말라

=> 자주 봐서 외워짐을 당하라

=> 크롬을 통해 copy and paste하라

  1. 이해하는게 중요하다

=> 왜 생겨났는지?

=> 왜 사용하는지?

===> 응용이 가능해진다.

4.새로운 지식을 넣을땐 뇌를 비우자

Express RESTful API 설계하기

이미지

Express JS

node js의 express모듈을 활용하여 누구나 간편하게 서버를 만들 수 있습니다. 이전글에서 MySQL을 express와 연동시키는 방법에 대해 다뤄보았는데요. 디테일한 설명없이 간략하게만 다뤘기에 이번글에 좀 더 내용을 정리해 보겠습니다.

Express 실행해보기

node JS를 다운받으신분들은 npm을 활용하여 express를 다운받아주세요.

npm​ install express

이제 모듈을 불러오고 실행하여 보겠습니다.

const express = require("express"); // express 모듈을 불러온다.const app = express(); //express 실행을 app으로 받아온다(중요)const port = 4000; //사용할 port를 정한다. (localhost:4000)​app.listen(port); //listen매서드를 활용하여 port를 연결 후 실행한다.
node app.js

이미지

localhost:4000

위 주소로 들어가면 Cannot Get / 이라는 메세지가 뜹니다.

이는 GET router로 설정된 / 주소에 아무 데이터도 넘기지 않았기 때문인데요.

'/' 주소로 문자열 데이터를 넘겨보겠습니다.

​

Express 데이터 넘기기

app.get은 REST에서 HTTP GET 매서드를 담당합니다. 지정된 경로를 설정합니다. req는클라이언트 파라미터, res는 파라미터로 이해하면 될 것 같습니다.

app.get("/", (req, res) => { res.send("hello"); });

이미지

res.send를 통해 문자열을 보낼 수 있습니다.

const fruits = \["banana", "apple"\];​app.get("/", (req, res) => { res.send(fruits); });

이미지

res.send를 통해 배열도 보낼 수 있습니다.

const product = { name: "pencil", price: 500,};​app.get("/", (req, res) => { res.send(product); });

이미지

res.send를 통해 객체도 보낼 수 있습니다.

Express req 살펴보기

req와 res를 클라이언트/ 서버가 받는 파라미터로 이해하면 된다고 했지만 이해가잘 되지 않습니다.

활용사례는 서버에 저장된 데이터는 res를 통해서 출력이 가능하고 req는 클라이언트측에서 변수로 보낼 수 있습니다.

이미지

req를 console로 찍어보면 객체형태임을 알 수 있고 수많은 key:value값이 들어가있습니다. 여기서 주의깊게 볼것은 params와 query입니다. 사용자가 서버로 부터 요청을 보낼때 parms와 query안으로 데이터를 넣어 서버로 api요청을 보낼 수 있습니다.

​

GET요청 이해하기

GET

REST에서 Read에 해당하는 http 매서드는 GET이라고 언급한바 있습니다. express에서는 app.get을 활용하여 http GET매서드를 사용할 수 있습니다.

API가 정상적으로 작동하는지 확인하는 방법중에 GET은 url을 통해서도 가능합니다. 나머지 요청은 postman과 같은 툴을 활용하여 손쉽게 작동여부 판별을 할 수 있습니다.

app.get("/", (req, res) => { res.send("hello"); });

위의 예제에서 다룬 이부분도 GET요청을 구현해 놓은 것입니다. 클라이언트는 localhost:4000url을 입력하는 것만으로도 서버에서 보내는 "hello" 문자열 데이터를 받아볼 수 있습니다.

​

GET + URI parameter

GET요청을 통해 서버에 저장된 데이터를 Read할 수 있다고 말씀드렸습니다.클라이언트가 서버에 API를 호출할때 어떤규칙을 통해서 호출할 수 있도록 만들때 URI parameter를 사용하면됩니다.

const products = \[ { id: 1, name: "pencil", price: 500 }, { id: 2, name: "book", price: 15000 },\];​app.get("/products/:id", (req, res) => { // 경로: /products/:id let { id } = req.params; //req.params의 key 값을 변수로 지정 if (id == 1) { res.send(products\[0\]); } else if (id == 2) { res.send(products\[1\]); } else { res.send("데이터가 없습니다"); }});

여러 상품에 관한 정보가 담긴 products 데이터가 있다고 가정하고 products데이터의 id 값에따라 데이터를 추출하고 싶다면 위와 같은 방법을 사용할 수 있습니다.

​

경로에 /:id는 id를 변수로 사용하겠다는 의미입니다.

​

let {id} = req.params의 의미는 let id = req.params.id와 동일힙니다. 아까위에서 req를 console로 출력했을대 params에는 아무값도 들어있지 않은 객체 데이터였습니다. 이 객체데이터에 id를 추가함과 동시에 id를 변수로 바로 받아버린 부분입니다. (Ecm6 구조화할당)

이미지

이미지

이제 경로에 id값을 입력하면 서버로 지정된 데이터가 출력됩니다.

​

아직 개념이 잘 안잡힐 수 있으나, 중요한점은 client가 입력하는 값을 변수로 지정해 서버와 연동할 수 있다는 부분과, API서버를 구축할 때 클라이언트 변수를 어떻게 처리할지 고민해야하는 부분입니다.

​

​

GET + query parameter

Query Parameter

query parameter는 URI parameter와 유사한 점이 많습니다. URI parameter형식을 query형식으로만 변경하여 표현했다고 생각해도 괜찮을 것 같습니다.

​

위와 동일한 product 데이터의 예시로 설명을 하겠습니다.

const products = \[ { id: 1, name: "pencil", price: 500 }, { id: 2, name: "book", price: 15000 },\];​app.get("/products", (req, res) => { const { name } = req.query; //const name = req.query.name ​ if (name == "pencil") { res.send(products\[0\]); } else if (name == "book") { res.send(products\[1\]); } else { res.send("존재하지 않는 제품입니다."); }});

name을 req.query객체의 key로 저장하고 데이터를 호출합니다. 이걸 URI 파라미터로 표현했다면 아래와 같이 표현할 수 있습니다.

app.get("/products/:name", (req, res) => { let { name } = req.params;});

query 파라미터는 url에 ?key=value&key=value&...형태로 데이터를 전송할 수 있습니다.

이미지

이미지

url에 ?key=value형태로 데이터를 전송하면 서버에서 설계한 대로 해당데이터가 출력되는것을 볼 수 있습니다.