5.2 POST API 만들기

김찬미·2024년 6월 8일
0
post-thumbnail

POST API란?

POST API는 웹 애플리케이션을 통해 데이터베이스 등의 저장소에 리소스를 저장할 때 사용되는 API이다. 앞에서 살펴본 GET API에서는 URL의 경로나 파라미터에 변수를 넣어 요청을 보냈지만 POST API에서는 저장하고자 하는 리소스나 값을 HTTP body에 담아 서버에 전달한다. 그래서 URI가 GET API에 비해 간단하다.

1) RequestMapping으로 구현하기

이 방법은 GET API와 크게 다르지 않다. 요청 처리 메서드를 설정할 때에 예제처럼 method 요소를 RequestMethod.POST로 설정하는 부분을 제외하면 GET API와 동일하다.

@RestController
@RequestMapping("/api/v1/post-api")
public class PostController {
    
    // 1) RequestMapping으로 구현하기
    @RequestMapping(value = "/domain", method = RequestMethod.POST)
    public String postExample() {
        return "Hello Post API";
    }
    
}

2) RequestBody를 활용한 POST 메서드 구현

일반적으로 POST 형식의 요청은 클라이언트가 서버에 리소스를 저장하는 데 사용한다. 그러므로 크라이언트의 요청 트래픽에 값이 포함되어 있다. 즉, POST 요청에서는 리소스를 담기 위해 HTTP Body에 값을 넣어 전송한다. 아래와 같이 Body 영역에 직접 값을 입력할 수 있다.

Body 영역에 작성되는 값은 일정한 형태를 취한다. 일반적으로 JSON(JavaScript Object Notation) 형식으로 전송된다. 이렇게 서버에 들어온 요청은 아래와 같이 처리할 수 있다.

JSON이란? JSON은 'JavaScript Object Notation'의 약자로 자바스크립트의 객체 문법을 따르는 문자 기반의 데이터 포맷 이다. 현재는 자바스크립트 외에도 다수의 프로그래밍 환경에서 사용한다. 대체로 네트워크를 통해 데이터를 전달할 때 사용하며, 문자열 형태로 작성되기 때문에 파싱하기 쉽다는 장점이 있다.

    // 2) RequestBody를 활용한 POST 메서드 구현
    @PostMapping(value = "/member")
    public String postMember(@RequestBody Map<String, Object> postData) {
        StringBuilder sb = new StringBuilder();
        
        postData.entrySet().forEach(map -> {
            sb.append(map.getKey() + " : " + map.getValue() + "\n");
        });
        
        return sb.toString();
    }

@PostMapping을 사용하면 method 요소를 따로 정의하지 않아도 된다. 그리고 @RequestBody 어노테이션을 사용했는데, 이는 HTTP의 Body 내용을 해당 어노테이션이 지정된 객체에 매핑하는 역할을 한다.

Map 객체는 요청을 통해 어떤 값이 들어오게 될지 특정하기 어려울 때 사용한다. 요청 메세지에 들어갈 값이 정해져 있다면 아래와 같이 DTO 객체를 매개변수로 삼아 작성할 수도 있다.

    // 2-2) DTO 객체를 이용한 POST 메서드 구현
    @PostMapping(value = "/request3")
    public String postMemberDto(@RequestBody MemberDto memberDto) {
        return memberDto.toString();
    }

위와 같이 작성하면 MemberDto의 멤버 변수를 요청 메시지의 키와 매핑해 값을 가져온다.

profile
백엔드 개발자

0개의 댓글

관련 채용 정보