조금 더 짜임새 있는 Restful API를 구현하려 하다 보니 신경쓸 부분이 생각보다 많다는 것을 알았다.
그 중 요청에 따른 반환되는 상태코드가 적절해야한다는 부분이 있어 정리해본다.
하나를 알면 열개를 배워야 되는...
HTTP Status Code 제어
일반적으로 클라이언트의 요청에 따른 결과값은 200 OK Status Code을 반환 받게 된다.
이는 정상적인 처리가 되었다는 의미이다.
그렇지만 Restful 하게 코드를 작성한다면 GET, POST의 용도가 다르기 때문에 반환되는 상태코드도 나누어주면
조금더 짜임새있는 코드를 작성할 수 있다.
기존코드
@PostMapping("/user")
public void setUser(@RequestBody User user){
User resultUser = service.save(user);
}
정상적으로 유저정보가 등록되면 200 OK Status Code를 반환하는 기존 소스이다.
여기에 ResponseEntity를 이용해서 상태코드를 담아 반환 시켜보자.
수정된 코드
@PostMapping("/user")
public void setUser(@RequestBody User user){
User resultUser = service.save(user);
URI uri = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/{id}")
.builderAndExpand(resultUser.getId())
.toUri();
return ResponseEntity.created(uri).build();
}
ServletUrilComponetsBuilder = 사용자의 요청 URL을 얻기 위함
.fromCurrentRequest() = 사용자의 요청 URL
.path() = url 추가
.builderAndExpand = 추가된 url 변수에 값 바인딩
수정된 코드를 PostMan으로 확인해보면 해당 post 요청시 201 created status code 와 함께
Header 부분에 추가된 리소스로 접근할 수 있는 Url이 명시되어 있음을 확인할 수 있다.
Header 부분에 추가된 리소스로 접근할 수 있는 Url이 명시되어 있다는 것은 큰 의미를 가지고 있는데,
만약 리소스를 추가한 후 바로 해당 리소스에 접근하려 하면 Header에 명시되어 있는 url로 바로
접근이 가능하기 때문에 서버 트래픽을 줄일 수 있다.
인프런 Spring Boot를 이용한 RESTful Web Services 개발 참조
'Spring' 카테고리의 다른 글
[JPA] 연관관계 조회 방식별(Fetch, Lazy) 성능 차이 테스트 (0) | 2023.07.25 |
---|---|
[Spring] MapStruct 사용 주의 사항 (0) | 2023.07.25 |
[Spring] Redis Template과 Redis Repository 특징과 장단점 (0) | 2023.07.24 |
[JPA]Spring Data JPA 시작 (0) | 2020.09.16 |
[Spring] Spring Security와 JWT 사용 (0) | 2020.09.11 |