[Spring-MVC-2] API CRUD와 HTTP Status

2 분 소요

1. CRUD API

CRUD는 대부분의 소프트웨어가 가지는 기본적인 데이터 처리 기능으로, Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 의미하는 말입니다.
리소스를 관리하는 일반적인 API를 만들 때 역시 CRUD 기능을 구현합니다.

2. create

리소스 생성을 요청하는 API입니다.
서버에 데이터를 제출하기 위해 POST 메서드를 사용합니다.
리소스 생성 시 필요한 데이터를 json 형태로 body에 담아 요청을 보냅니다.

POST /members HTTP/1.1
content-type: application/json

{
    "name": "브라운",
    "age": 20
}

요청에 성공하면 201 응답코드를 응답 받습니다.
그리고 Location 헤더에 생성된 리소스의 위치를 담아 응답을 받습니다.
생성된 리소스를 확인할 수 있도록 body에 생성된 리소스를 담아 응답할 수 있습니다.

HTTP/1.1 201
Location: /members/1
Content-Type: application/json

{
    "id": 1,
    "name": "브라운",
    "age": 20
}


  • 200(성공): 서버가 요청을 제대로 처리했다는 뜻이다. 이는 주로 서버가 요청한 페이지를 제공했다는 의미로 쓰인다.
  • 201(작성됨): 성공적으로 요청되었으며 서버가 새 리소스를 작성했다.
  • 204(콘텐츠 없음): 서버가 요청을 성공적으로 처리했지만 콘텐츠를 제공하지 않는다.

출처: https://ko.wikipedia.org/wiki/HTTP_상태_코드

학습 테스트

  • 테스트 메서드: cholog.CRUDTest.create
  • 수행 방법
    • cholog.MemberController.create 을 이용하여 학습 테스트를 성공시키세요.


public ResponseEntity<Void> create(@RequestBody Member member) {}
  • @RequestBody 어노테이션을 사용하면 HTTP 요청 본문의 JSON 데이터가 자동으로 Member 객체로 변환
return ResponseEntity.created(URI.create("/members/" + newMember.getId())).build();
  • "/members/" + newMember.getId() == /members/1
  • ResponseEntity.created(location).build();
    • 201 응답코드
    • Create a new builder with a CREATED status and a location header set to the given URI.


참조

3. read

리소스 조회를 요청하는 API입니다.
서버에 리소스의 정보를 검색하기 위해 GET 메서드를 사용합니다.

GET /members HTTP/1.1

요청에 성공하면 200 응답코드를 응답 받습니다.
조회된 정보를 body에 담아 응답할 수 있습니다.

HTTP/1.1 200
Content-Type: application/json

[
    {
        "id": 1,
        "name": "브라운",
        "age": 20
    },
    {
        "id": 2,
        "name": "브리",
        "age": 10
    }
]

학습 테스트

  • 테스트 메서드: cholog.CRUDTest.read
  • 수행 방법
    • cholog.MemberController.read 을 이용하여 학습 테스트를 성공시키세요.


return ResponseEntity.ok().body(members);
return ResponseEntity.ok(members);
  • ok() : HTTP 상태 코드 200(OK)

4. update

리소스 수정을 요청하는 API입니다.
리소스를 대체하기 위해 PUT 메서드를 사용합니다.
PATCH를 이용할 수 있으나 전체 리소스를 대체하기 위해 PUT을 사용합니다.
수정할 리소스의 식별자를 url path에 포함해서 요청을 보냅니다.
body 값에는 수정할 정보를 담아서 보냅니다.


PUT /members/1 HTTP/1.1

{
    "name": "브라운",
    "age": 30
}

요청에 성공하면 200 응답코드를 응답 받습니다.

HTTP/1.1 200

학습 테스트

  • 테스트 메서드: cholog.CRUDTest.update
  • 수행 방법
    • cholog.MemberController.update 메서드를 작성하여 학습 테스트를 성공시키세요.


@PutMapping("/members/{id}")
public ResponseEntity<Void> update(@PathVariable Long id, @RequestBody Member info) {}
  • @PathVariable("id") == @PathVariable(name = "id") Long id == @PathVariable Long id
    • {id} ⇒ id
    • URL 경로에서 변수 값을 추출하여 매개변수에 할당한다.
  • ResponseEntity.*ok*().build()
    • Void → .build()!

참조

5. delete

리소스 삭제를 요청하는 API입니다.
리소스를 삭제하기 위해 DELETE 메서드를 사용합니다.
삭제할 리소스의 식별자를 url path에 포함해서 요청을 보냅니다.

DELETE /members/1 HTTP/1.1

요청에 성공하면 204 응답코드를 응답 받습니다.

HTTP/1.1 204

학습 테스트

  • 테스트 메서드: cholog.CRUDTest.delete
  • 수행 방법
    • cholog.MemberController.delete 메서드를 작성하여 학습 테스트를 성공시키세요.


return ResponseEntity.noContent().build();
  • 204 응답코드