POST API 만들기
POST API는 웹 애플리케이션을 통해 데이터베이스 등의 젖아소에 리소르를 정할 때 사용되는 API입니다.
POST API는 저장하고자 하는 리소스나 값을 HTTP body에 담아 서버에 전달합니다.
그래서 URI가 GET API에 비해 간단합니다.
controller 패키지에 PostController를 만들어줍니다.
현재 방식은 임의의 방식으로 실무에선 API 메서드 별로 컨트롤러를 생성하지 않고 서비스마다 생성해 관리합니다.
@RequestMapping으로 구현하기
POST API에서 @RequestMapping을 사용하는 방법은 GET API와 유사합니다.
package com.springboot.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("api/v1/post-api")
public class PostController {
@RequestMapping(value = "/domain", method = RequestMethod.POST)
public String postExample() {
return "Hello Post API";
}
}
@RequestBody와 Map을 활용한 POST 메서드 구현
위에서 별도의 리소스를 받지않고 단지 POST 요청만 받는 메서드였습니다.
일반적으로 POST는 클라이언트가 서버에 리소스를 저장하는데 사용하기때문에
클라이언트의 요청 트래픽에 값이 포함되어 있습니다.
즉, POST 요청에는 리소스를 담기 위한 HTTP body에 값을 넣어 전송합니다.
어떤 요청이 들어올지 특정하기 어렵다면 아래와 같이 작성할 수 있습니다.
@PostMapping("member")
public String postMember(
@RequestBody Map<String, String> postData
) {
StringBuilder sb = new StringBuilder();
postData.entrySet().forEach(
map -> {
sb.append(map.getKey() + " : " + map.getValue() + "\n");
}
);
return sb.toString();
}
요청 메시지에 들어갈 값이 정해져있다면 아래와 같이 DTO 객체를 매개변수삼아 작성할 수 있습니다.
@PostMapping("member1")
public String postMember1(
@RequestBody MemberDto memberDto
) {
return memberDto.toString();
}
ResponseEntity를 사용하면 아래와도 작성 가능합니다.
@PostMapping("member2")
public ResponseEntity<MemberDto> postMember2(
@RequestBody MemberDto memberDto
) {
return ResponseEntity.ok(memberDto);
}
PUT API 만들기
PUT API는 웹 애플리케이션 서버를 통해 데이터베이스 같은 저장소에 존재하는 리소스 값을 업데이트 하는데 사용합니다.
POST API와 비교하면 요청을 받아 실제 데이터베이스에 반영하는 과정에 차이가 있지만 구현 메서드는 거의 동일합니다.
결국 리소르를 서버에 전달하기 위해 HTTP Body를 이용하기 떼문입니다.
@ReqeustDbody를 활용한 PUT 메서드 구현
package com.springboot.api.controller;
import com.springboot.api.dto.MemberDto;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
@RequestMapping("api/v1/put-api")
public class PutController {
@PutMapping("/member")
public String putMember(
@RequestBody Map<String, String> putData
) {
StringBuilder sb = new StringBuilder();
putData.entrySet().forEach(map -> {
sb.append(map.getKey() + " : " + map.getValue() + "\n");
});
return sb.toString();
}
@PutMapping("/member1")
public String putMemberDto1(
@RequestBody MemberDto memberDto
) {
return memberDto.toString();
}
@PutMapping("/member2")
public MemberDto putMemberDto2(
@RequestBody MemberDto memberDto
) {
return memberDto;
}
}
두번째 member1 요청은 String 반환형식이라 아래 이미지를 보면 text/plain 형식이지만
세번쨔 member2 요청은 MemberDto 타입으로 반환하면서 Json 객체로 응답 결과를 확인할 수 있습니다.
ResponseEntity를 활용한 PUT 메서드 구현
스프링 프레임워크에는 HttpEntity라는 클래스가 있으며
이는 Header와 body로 구성된 HTTP 요청과 응답을 구성하는 역할을 수행합니다.
RequestEntity와 ResponseEntity는 HttpEntity를 상속받아 구현한 클래스로
이 중 ResponseEntity는 서버에 들어온 요청에 대해 응답 데이터를 구성해서 전달할 수 있게 합니다.
이 클래스를 활용하면 응답 코드 변경은 물론 헤더와 바디를 더욱 쉽게 구성할 수 있습니다.
@PutMapping("/member3")
public ResponseEntity<MemberDto> postMember3(
@RequestBody MemberDto dto
) {
return ResponseEntity
.status(HttpStatus.ACCEPTED)
.body(dto);
}
'BACKEND > SPRING' 카테고리의 다른 글
05. 로깅 라이브버리 - Logback (0) | 2023.07.30 |
---|---|
05. API를 작성하는 다양한 방법 - DELETE API 만들기 (0) | 2023.07.30 |
05. API를 작성하는 다양한 방법 - GET API 만들기 (0) | 2023.07.30 |
04. 스프링 부트 애플리케이션 개발하기 - 프로젝트 생성과 Hello World 출력하기 (1) | 2023.07.28 |
트랜잭션과 spring 트랜잭션 알아보기 (0) | 2023.07.27 |