-
[스프링부트/웹 애플리케이션 개발]API 개발 기본Spring&SpringBoot 2023. 1. 11. 14:13
- 포스트맨 설치
( https://www.getpostman.com )
회원 등록 API / MemberApiController - V1
package jpabook.jpashop.api; import jpabook.jpashop.domain.Member; import jpabook.jpashop.service.MemberService; import lombok.Data; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; @RestController @RequiredArgsConstructor public class MemberApiController { private final MemberService memberService; @PostMapping("/api/v1/members") public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member) { Long id = memberService.join(member); return new CreateMemberResponse(id); } @Data static class CreateMemberResponse { private Long id; public CreateMemberResponse(Long id) { this.id = id; } } }1) 포스트맨 - 헤더 설정

2) 포스트맨 - 바디(raw, JSON) 입력

3) 포스트맨 - send

4) insert 확인

- @Controller + @ResponseBody > @RestController
- @RequestBody : json으로 넘어온 바디를 member에 맵핑해서 넣어준다
- @Valid > javax.validation 검증한다
v1(Member 엔티티를 Request Body에 직접 매핑) 문제점
- 엔티티에 프레젠테이션 계층을 위한 로직이 추가된다
- 엔티티에 API 검증을 위한 로직(@NotEmpty)이 들어간다
- 엔티티가 변경되면 API 스펙이 변한다.
>> API 요청 스펙에 맞추어 별도의 DTO를 파라미터로 받는다.
회원 등록 API / MemberApiController - V2
@PostMapping("/api/v2/members") public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request) { Member member = new Member(); member.setName(request.getName()); Long id = memberService.join(member); return new CreateMemberResponse(id); } @Data static class CreateMemberRequest { //@NotEmpty > valid 추가할 수 있음 private String name; }>> CreateMemberRequest를 Member 엔티티 대신에 RequestBody와 매핑
- 엔티티와 프레젠테이션 계층을 위한 로직을 분리할 수 있다
- 엔티티와 API 스펙 분리
- 엔티티가 변해도 API 스펙이 변하지는 않는다.
728x90'Spring&SpringBoot' 카테고리의 다른 글
[스프링부트/웹 애플리케이션 개발]API 개발 고급-1 (1) 2023.01.11 [스프링부트/웹 애플리케이션 개발]회원 조회 API (0) 2023.01.11 [스프링부트/웹 애플리케이션 개발] 상품 주문 (0) 2023.01.06 [스프링부트/웹 애플리케이션 개발]변경 감지와 병합(merge) (0) 2023.01.05 [스프링부트/웹 애플리케이션 개발]회원 목록 조회, 상품 등록, 상품 목록, 상품 수정 (0) 2023.01.05