본문 바로가기
[ JAVA ]/JAVA RESTful API

[ RESTful API ] 사용자 수정/삭제를 위한 API 구현 - PUT/DELETE HTTP Method

by 환이s 2023. 7. 28.


오늘은 이전 포스팅에 이어서 수정/삭제 기능을 추가해 보겠습니다.

이번 포스팅까지 마무리로 RESTful API 기반으로 CRUD 기능은 모두 끝날 거 같습니다.

 

 

RESTful API 기반으로 기능 구현 알아보시는 분들은 아래 포스팅도 참고해 보시면 좋을 거 같습니다.

 

[ RESTful API ] 사용자 목록 조회를 위한 API 구현 - GET HTTP Method

오늘은 RESTful API 기반으로 사용자 목록 조회를 위한 API 구현을 해보겠습니다. 먼저 간단하게 개념에 대해 알아보고 코드 진행 해보겠습니다. RESTful API 란? RESTful API은 Representational State Transfer API

drg2524.tistory.com

 

 

[ RESTful API ] 사용자 등록을 위한 API 구현 - POST HTTP Method

이전 포스팅으로 GET HTTP Method에 대해 알아봤습니다. 오늘은 사용자 등록을 위한 POST HTTP Method에 대해 포스팅해보겠습니다. POST HTTP Method 예제 코드로는 이전 포스팅에 구현한 사용자 목록 조회에

drg2524.tistory.com

 


Controller

 

UserController에  업데이트/수정을 위한 두 개의 컨트롤러 메서드를 생성합니다.

 

@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable int id){
    User user = service.deleteMyId(id);

    if (user == null){
        throw new UserNotFoundException(String.format("ID[%s] not found",id));
    }
}
@PutMapping("/users/{id}")
public User putUser(@PathVariable int id ,@RequestBody User user){
    service.putMyid(id,user);
    return user;
}

 

'deleteUser' 메서드는 "/users/{id}" 경로를 엔드포인트로 매핑합니다. 삭제할 사용자의 ID 값을 매개 변수로 받아서 service단에 요청을 보내주고 요청받은 ID 값이 사용자가 없는 경우 UserNotFoundException을 발생시킵니다. 이는 사용자가 요청한 ID에 해당하는 리소스가 없을 때 클라이언트에게 알리는 용도로 사용됩니다.

 

'putUser' 메서드는 업데이트할 사용자의. ID와 업데이트할 사용자 정보 'User' 매개 변수로 받습니다.

이전 POST HTTP Method에서 설명드렸던 @PathVariable 어노테이션을 사용하여 URL 경로에서 추출한 id 변수에 매핑하고 @RequestBody 어노테이션을 통해 클라이언트에서 보낸 JSON 형태의 데이터가 User 객체로 자동으로 매핑되도록 설정됩니다.

 

service단을 통해 받은 'id' 값과 'user' 객체를 사용하여 해당 ID에 사용자 정보를 업데이트를 하고 user 객체를 리턴합니다.

 

다음으로 Service 단 코드를 보겠습니다.


 

Service

 

public User deleteMyId(int id){
    Iterator<User> iterator = users.iterator();

    while (iterator.hasNext()){//순차적으로
        User user = iterator.next();

        if (user.getId() == id){ // 동일한 id가 있다면 remove(삭제)
            iterator.remove();
            return user;
        }
    }
    return null;
}


public User putMyid(int id, User user) {
    users.stream()
            .forEach(userid -> {
                if (userid.getId() == id){
                    userid.setName(user.getName());
                    userid.setJoinDate(user.getJoinDate());
                }
            });
    return user;
}

 

순차적으로 Delete 메서드를 먼저 보자면, 'users' 리스트에 저장된 사용자 정보를 순차적으로 검사하며, 'Iterator'를 사용하여 요소에 접근합니다.

 

이전 포스팅에서 Iterator의 개념에 대해 알아봤습니다. 아래글을 참고해 보시면 좋을 거 같습니다.

 

[ JAVA ] Iterator 개념 및 예제

Restful API 기반 프로젝트를 진행하던 중 데이터 찾는 과정에서 Iterator를 사용해서 기능 구현을 했는데, 프레임워크인 건 알지만 정확한 개념에 대해 알아보기 위해 포스팅을 해보겠습니다. Iterator

drg2524.tistory.com

 

각 사용자의 ID와 주어진 'id'를 비교하여 동일한 ID를 찾으면 해당 사용자를 'users' 리스트에서 삭제하고 삭제된 사용자 객체를 반환합니다. 만약 사용자를 찾지 못하면 null 값을 반환합니다.

 

다음으로는 사용자의 정보를 업데이트하는 putMyid 메서드입니다.

 

먼저 users 리스트를 스트림으로 변환하고, forEach를 사용하여 각 사용자에 접근하는 방식으로 코드 구현을 했습니다.

각 사용자의 ID와 주어진 'id'를 비교하여 동일한 ID를 찾으면, 해당 사용자의 이름과 가입일을 주어진 'user'객체의 이름과 가입일로 업데이트합니다.

 

 

 

이러한 방식으로 'deleteMyId' 메서드는 주어진 ID를 가진 사용자를 삭제하고, 'putMyid' 메서드는 주어진 ID를 가진 사용자의 정보를 업데이트합니다. 두 메서드 모두 'User' 객체를 반환하여 업데이트 또는 삭제된 사용자 정보를 확인할 수 있습니다.

 


마치며

 

오늘까지 간단한 RESTful API CRUD 기능 구현에 대해 알아봤습니다.

다음 포스팅은 위 코드 기반으로 JPA ORM 연동해서 진행해 보겠습니다.

 

728x90