Spring Boot를 이용한 RESTful Web Services 개발 #14 HTTP Status Code 제어
HTTP Status Code 제어
명확한 HTTP Status Code 사용의 중요성
보통 REST API를 구성할 때, 범하는 실수가 요청이 성공했을 때 단순 HTTP 응답에서 상태 코드로 200 OK
만 반환하는 것이다.
200 OK
로 물론 해당 요청이 성공했음을 알 수는 있지만, 정확히 어떠한 결과를 낳았는지 알기 어려울 때가 있다.
2xx 코드의 종류
2xx
코드의 종류는 아래와 같다.
201 Created
(새로운 리소스가 생성됨)- 요청 성공 후에 새로운 리소스가 생성된 경우이다.
- 보통 생성된 리소스는 응답의
Location
헤더 필드로 식별한다.
202 Accepted
(요청 접수가 완료됐지만, 예약된 시간에 실행될 것임)- 즉시 어떠한 행동을 하지 않고 스케쥴링된 시간에 행위를 하겠다는 의미이다.
- 이를테면 1시간 뒤에 배치 처리를 하겠다는 명령이 될 수 있다.
204 No Content
(서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음)- 요청에 대한 응답은 성공적이지만, 딱히 성공으로 인해 생성된 데이터 등을 보낼 이유가 없을 때이다.
- 이를테면 사용자 정보 수정 페이지에서 사용자 정보가 수정되었을 때, 화면에 이미 수정된 사용자 정보가 나와있다면, 굳이 반환해줄 이유가 없다.
물론 실제 개발 환경에서는 모든 개발팀이 규약을 정하고 정해진 규칙대로 코드를 사용하는 것이 가장 이상적이다.
UserController 소스코드 수정하기
addUser()
@PostMapping("")
// @RequestBody: HTTP 요청 Body 영역에 User 객체가 올 것이다.
public ResponseEntity<User> addUser(@RequestBody User user) {
User savedUser = service.save(user);
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/{id}")
.buildAndExpand(savedUser.getId())
.toUri();
return ResponseEntity.created(location).build();
}
기존에는 단순히 User
를 생성만 했다면, 이번에는 동작이 조금 바뀌었다.
- 유저 생성
ServletUriComponentBuilder
로location
에 사용될 URI 생성ResponseEntity
객체를 통해 HTTP Status code 201(created()
)로 응답하고 어떤 리소스가 생성되었는지location
도 헤더를 통해 올바르게 반환하였다.
결과 살펴보기
올바르게 201 Created
로 응답이 오고, location
에 우리가 생성한 리소스에 접근하는 경로까지 출력해준다.
ResponseEntity 메소드 살펴보기
ResponseEntity
객체에서는 created(201)
뿐만 아니라, accepted(202)
, noContent(204)
, badRequest(400)
, internalServerError(500)
, notFound(404)
등 자주 쓰이는 상태코드를 가독성 좋은 메소드로 제공한다.
Author And Source
이 문제에 관하여(Spring Boot를 이용한 RESTful Web Services 개발 #14 HTTP Status Code 제어), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jakeseo_me/Spring-Boot를-이용한-RESTful-Web-Services-개발-14-HTTP-Status-Code-제어저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)