13

yeoro·2021년 11월 29일
0

API 개발 기본

API Package

템플릿 엔진을 사용하는 controller와 API 스타일의 Controller를 분리한다.

공통 예외처리 할 때 패키지 단위나 구성 단위로 한다. 화면은 예외처리시 에러화면이 나가야 하지만, API는 예외처리시 JSON 스펙이 나가야 한다.

회원 등록 API

@ResponseBody(데이터를 JSON으로 보낼 때 사용) + @Controller => @RestController

@ResponseBody

JSON 타입으로 온 body를 객체로 바꿔준다.

@Valid

Body로 온 값에 대한 유효성 검사를 한다.

  • @NotEmpty: 선언된 필드의 값이 null인지 확인한다
  • 단점 : 화면 validation을 위한 logic, Entity 내용을 바꾸면 API 스펙이 변경되어 오류가 날 수도 있다. 따라서 API 요청 스펙에 맞춰 별도의 DTO를 만드는 것이 좋다. ex) 소셜로그인, 일반로그인, ...
  • 파라미터로 Entity를 설정하지 말자. Entity 노출 금지

memberV2

  • API 스펙이 바뀌지 않는다.
  • controller가 엔티티와 파라미터를 중간에서 매핑해주는 역할을 한다.
  • 컴파일 오류
  • DTO를 통해 파라미터로 넘어오는 값을 직관적으로 알 수 있다.

회원 수정 API

DTO

다른 클래스에서 사용하지 않으면 이너 클래스로 만들어도 된다.

service - update

update 메소드의 리턴 타입을 Member로 할 수도 있지만, 영속성이 끊긴 객체이며 커맨드와 쿼리를 분리하는 것이 좋다.

따라서 update에서 void, controller에서 다시 조회하는 것이 유지보수에도 좋다.

회원 조회 API

List 반환

Member 엔티티를 조회하면 원치 않는 orders가 같이 조회된다. 이를 위해서 orders에 @JsonIgnore를 선언하면 조회가 되지는 않지만, 다른 API에서 orders를 조회해야 한다면 문제가 생긴다.

이런 경우 엔티티에 화면을 위한 코드가 작성되고, 의존 관계가 양방향으로 맺어져 수정하기 어려워진다.

제네릭 클래스 반환

List를 바로 반환하면 배열 타입으로 반환되기 때문에 한 번 감싸줘야 유연성이 좋다.

Result 클래스에 count 등 필드를 추가할 수 있다.

0개의 댓글