API 설계 시 주의점
- API 파라미터 받을때나 보낼때는 절대로 엔티티를 사용하면 안된다.
- 항상 DTO를 만들어서 필요한 정보만 내보내도록 해야한다! 필수!
import java.util.List;
import java.util.stream.Collectors;
@RestController
@RequiredArgsConstructor
public class MemberApiController {
private final MemberService memberService;
/**
* 멤버 조회
* 문제점 : 엔티티 모든것이 노출 등
* @return
*/
@GetMapping("/api/v1/members")
public List<Member> membersV1() {
return memberService.findMembers();
}
@GetMapping("/api/v2/members")
public Result memberV2() {
List<Member> findMembers = memberService.findMembers();
List<MemberDto> collect = findMembers.stream()
.map(m -> new MemberDto(m.getName()))
.collect(Collectors.toList());
// API 파라미터 받을때나 보낼때 엔티티를 사용하지 말아라.
// DTO를 만들어서 필요한 정보만 노출해야 한다.
// Result로 감싸서 보내기 때문에 유연성이 생긴다.
return new Result(collect.size(), collect);
}
@Data
@AllArgsConstructor
static class Result<T>{
private int count;
private T data;
}
@Data
@AllArgsConstructor
static class MemberDto {
private String name;
}
}