이전 API 설계는 GET method 기능 구현까지 진행을 완료했다
이번 설계에서는 Post 와 Delete 기능을 추가하여 진행할 계획이다
Post Method는 새로운 리소스를 생성할 때 주로 사용한다
그러나 GET Method와 달리 URL로 POST 로 요청한 리소스 값이 잘 입력되었는지 확인하는 것이 불가능하다
예를 들어 유저 ID와 PW를 입력받고 로그인이 진행되는 상황을 가정해보자
개인정보를 조회하고자 할 때 URL 주소에 개인 정보를 직접적으로 유출시키고 해당 페이지에 접속한다면 개인 정보 유출이라는 큰 문제가 발생할 수 있다
따라서 Post Method는 URL을 통해서 데이터를 입력받지 않고 내부 Body를 통해 데이터를 입력받는다
따라서 Post Method가 Body에 잘 입력되었는지 확인하기 위해서는 다른 API 테스트 도구가 필요하다
postman은 API 테스트에 사용되는 도구이다
다음 링크를 통해 다운이 가능하다
다운로드 후 실행하면 다음과 같은 화면을 만나볼 수 있다

이 화면에서와 같이 HTTP Method를 직접 클릭하고 URL을 입력하여 Postman을 활용할 수 있다
Postman을 통해 이전에 설계한 API에서 GET Method을 실행해보자
아이템 전체 조회 (localhost:1234/items)

3번 아이템 개별 조회 (localhost:1234/items/3)
// 새로운 아이템 정보 받는 기능 구현
app.use(express.json()); // http 외 모듈 '미들웨어' : json 설정
app.post('/items', (req,res) => {
// 새로 등록하는 아이템 map에 입력
db.set(id++,req.body);
// 아이템 등록 시 문구 출력
res.json({
message : `${db.get(id-1).name} 아이템 등록이 정상적으로 완료되었습니다`
});
res.json(req.body);
})
URL 주소는 변경하지 않고 map에 새로 Body에 입력되는 리소스를 추가하도록 구현했다
그리고 아이템이 등록되면 잘 등록되었음을 확인하기 위해 message를 추가했다
Postman을 통해 확인하면 다음과 같다

다음 전체 조회를 하면 6번 아이템도 정상적으로 출력된다

// 기본 데이터 생성
let db = new Map();
let id = 1;
// 객체 db 에 삽입
db.set(id++,item1);
db.set(id++,item2);
db.set(id++,item3);
db.set(id++,item4);
db.set(id++,item5);
다음과 같이 map에 아이템을 입력할 때 id 기본 값을 1로 설정한 후에 ++ 연산자를 통해 아이템을 추가할 때마다 1씩 증가하도록 하여 인덱스 값을 설정해주었다
다음 기능을 통해 몇 번째 아이템이 등록되었는지 확인할 수 있게 되었다
이번에는 Delete Method 기능을 추가해보자
개별 아이템 삭제 기능과 전체 아이템 삭제 기능을 따로 다음과 같이 구현했다
개별 아이템 삭제의 경우 해당 ID의 URL을 받아온 후에 삭제를 진행한다
// 아이템 정보 개별 삭제 기능 구현
app.delete('/items/:id', (req,res) => {
let {id} = req.params;
id = parseInt(id);
let items = db.get(id);
// 해당하는 id가 없는 경우 error 메세지 출력
if(items==undefined){
res.json({
message : `요청하신 ${id}번 아이템이 존재하지 않습니다`
});
} else {
const name = items.name;
db.delete(id);
// 아이템 삭제 시 문구 출력
res.json({
message : `${name} 아이템이 정상적으로 삭제되었습니다`
});
}
});
입력받은 아이템의 아이디가 존재하지 않는 경우 삭제하고자 하는 아이템이 없기 때문에 메세지를 출력한다
삭제하고자 하는 아이템이 존재한다면 삭제를 진행하고 아이템이 정상적으로 삭제되었다는 메세지를 출력한다

//아이템 정보 전체 삭제 기능 구현
app.delete('/items', (req,res) => {
var msg = '';
//db 값이 1개 이상이면 전체 삭제
if(db.size>=1){
db.clear();
msg = '전체 아이템 삭제가 완료되었습니다'
} // db 값이 존재하지 않으면 삭제하지 않음
else {
msg = `삭제할 아이템이 없습니다`
};
res.json({
message : msg
});
});
전체 삭제 기능의 경우 map에 아이템이 남아있다면 전체 삭제를 진행하고 메세지를 출력한다
그러나 아이템이 하나도 남아있지 않다면 삭제할 아이템이 존재하지 않는다는 메세지를 출력한다



// 전체 아이템 정보 조회 기능 구현
app.get('/items', (req,res) => {
// db가 비어있다면 아이템 미출력
if(db.size==0){
res.json({
message : '아이템이 존재하지 않습니다'
});
}
// db에 아이템이 존재한다면 아이템 출력
else {
let items={};
db.forEach(function(value,key) {
items[key]=value;
})
res.json(items);
}
});