클라이언트와 서버 사이에 이루어지는 요청(Request)과 응답(Response) 데이터를 전송하는 방식을 말한다.
- GET : 리소스 조회
- POST: 요청 데이터 처리, 주로 등록에 사용
- PUT : 리소스를 대체(덮어쓰기), 해당 리소스가 없으면 생성
- DELETE : 리소스 삭제
- PATCH : 리소스 부분 변경 (PUT이 전체 변경, PATCH는 일부 변경)
- HEAD : GET과 동일하지만 메시지 부분(body 부분)을 제외하고, 상태 줄과 헤더만 반환
- OPTIONS : 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명(주로 CORS에서 사용)
- CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
- TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행
- 전달한 데이터 처리/생성 요청 메서드 (Create)
- 메시지 바디(body)를 통해 서버로 요청 데이터 전달하면 서버는 요청 데이터를 처리하여 업데이트
전달된 데이터로 주로 신규 리소스 등록, 프로세스 처리에 사용- 만일 데이터를 GET 하는데 있어, JSON으로 조회 데이터를 넘겨야 하는 애매한 경우 POST를 사용
@RestController
@RequestMapping("/api")
public class PostApiController {
@PostMapping("/post")
public void post(@RequestBody Map<String, Object> requestData) {
requestData.forEach((key, value) -> {
System.out.println("key : " + key);
System.out.println("value : " + value);
});
}

실행결과

PostRequestDto(getter, setter, toString 오버라이딩)를 만들어 테스트
@PostMapping("/post")
public void post(@RequestBody PostRequestDto postRequestDto) {
System.out.println(postRequestDto);
}

- 리소스를 대체(수정)하는 메서드 (Update)
- 만일 요청 메세지에 리소스가 있으면 덮어쓰고, 없으면 새로 생성한다.
- /put/100 데이터가 존재하면 기존에 것을 완전 대체 하고 데이터가 없으면 대체 할게 없으니까 새로 생성한다.
- 데이터를 대체해야 하니, 클라이언트가 리소스의 구체적인 전체 경로를 지정해 보내주어야 한다.
@PutMapping("/put/{userId}")
public PostRequestDto put(@RequestBody PostRequestDto postRequestDto, @PathVariable(name = "userId") Long id) {
return postRequestDto;
}

- 리소스 제거하는 메소드(DELETE)
- 상태코드는 대부분 200을 사용하고 상황에 따라 204를 사용한다.
@RestController
@RequestMapping("/api")
public class DeleteApiController {
@DeleteMapping("/delete/{userId}")
public void delete(@PathVariable String userId, @RequestParam String account) {
System.out.println(userId);
System.out.println(account);
}

