Rest API
일반 Controller와 RestController의 차이?
Controller는 view 템플릿 페이지를 return
RestController는 데이터를 return (문자열, JSON)
일반 Controller에서도 @ResponseBody 어노테이션을 사용하여 JSON 형태의 데이터를 반환할 수 있다.
Get 요청
ArticleApiController 클래스에서 ArticleRepository 객체를 직접 생성하지 않고, 외부에서 받아오는 의존성 주입을 사용하였다.
이를 통해 ArticleApiController 클래스와 ArticleRepository 클래스 간의 결합도를 낮추고, 후에 ArticleRepository 클래스의 구현체를 변경해도 ArticleApiController 클래스의 수정 없이 사용할 수 있다.
되도록 생성자 주입방식으로 작성하자.
postman을 통해 해당 URL에 GET 요청을 보내보자.
예쁘게 잘 나온다. 저 응답 코드의 초록색이 마음을 참 안정시켜 준다.
Post 요청
새로운 데이터를 등록하는 post 요청이다.
@RequestBody를 통해 얻은 DTO를 다시 Entity로 변환해 준 후 Repository를 통해 DB에 저장한다.
@RequestBody
이 어노테이션은 스프링 부트에서 HTTP 요청의 Body를 자바 객체로 매핑할 때 사용된다. 클라이언트에서 전송한 데이터를 서버에서 처리하기 위해 필요한 정보를 담은 객체(DTO)로 변환해 주는 역할을 한다.
클라이언트에서 JSON 형식으로 데이터를 전송하고, 서버에서는 이를 처리하기 위해 자바 객체로 변환하여 사용하는데, 이때 @RequestBody 어노테이션을 사용하면 스프링 부트는 자동으로 전송된 JSON 데이터를 자바 객체로 매핑해 준다.
해당 URL로 POST 요청을 보내보자.
데이터를 확인해 보면 id 5번에 잘 들어가 있다.
Patch 요청
저장되어 있는 데이터를 수정하는 Patch 요청이다.
return 값이 ResponseEntity인 것을 주의 깊게 살펴보자.
해당 클래스는 요청에 성공과 실패에 따라 응답 코드를 return 한다.
만약 요청한 데이터 target이 없거나, id가 다른 경우에는 잘못된 요청을 의미하는 400을 리턴해준다.
그렇지 않다면 Repository를 통해 update 된 데이터를 DB에 저장하고 성공 코드를 리턴해주자.
일부러 실패한 요청을 보내보자.
ID 값이 맞지 않아 400 Bad Request가 출력됐다.
잘못 보낸 요청을 수정한 후에 보내보자.
마음을 안정시켜 주는 예쁜 초록색 성공 코드가 나왔다!
Patch 개선
만약 수정할 때 Json에 필드 값을 모두 적지 않고 하나만 적어 보내면 어떻게 될까?
내 생각에 아마 오류코드가 뜨지 않을까 생각했지만 해당 필드는 null이 된 채로 요청에 성공했다. 이미 있는 데이터를 null로 바꿔 버린 것이다.
만약 id와 password가 있다고 했을 때 사용자는 password만 변경하고 싶어 변경할 password값만 실어 보냈는데 결과는 애꿎은 id값도 null이 되어 버리는 것이다. 이러한 불상사를 방지해 보자.
Article Entity에 patch 메서드를 만들어 주자.
해당 메서드는 Entity의 어느 한 필드라도 null 되어 있으면 자기 자신의 기존 값을 유지하도록 한다.
RestController에서 patch메서드를 호출한 후 DB에 저장해 주자.
Delete 요청
저장되어 있는 데이터를 지워주는 Delete 요청이다.
위의 다른 요청들과 매우 비슷하다. 요청받은 id를 통해 대상을 찾고 잘못된 요청이라면 오류 코드를, 유효하다면 대상을 삭제해 주고 성공 코드를 리턴해준다.
'Spring Boot' 카테고리의 다른 글
[Spring Boot] Transaction (0) | 2023.03.17 |
---|---|
[Spring Boot] Service (0) | 2023.03.17 |
[Spring Boot] 데이터 삭제하기 (0) | 2023.03.15 |
[Spring Boot] 데이터 수정하기 (0) | 2023.03.14 |
[Spring Boot] 웹 페이지에서 데이터 조회하기 (0) | 2023.03.12 |