JPA활용2-회원조회 API

언젠간·2022년 9월 20일

회원조회 API v1

  • 서버측 수신
	@GetMapping("/api/v1/members")
	public List<Member> membersV1(){
		return memberService.findMembers();
	}
  • Return
	[
      {
          "id": 1,
          "name": "new-hello",
          "address": null,
          "orders": []
      },
      {
          "id": 2,
          "name": "member1",
          "address": {
              "city": "서울",
              "street": "test",
              "zipcode": "11111"
          },
          "orders": []
      },
      {
          "id": 3,
          "name": "member2",
          "address": {
              "city": "경주",
              "street": "1234",
              "zipcode": "1234"
          },
          "orders": []
      }
	]
  • 단점
    • 엔티티의 모든 값이 노출됨 - > @JsonIgnore로 막아야 함
    • 해당 정보를 필요로 하는 API도 있기 때문에 막을 수 없음
    • API 스펙이 바뀔 수 있음

회원조회 API v2

  • 서버측 수신
	@GetMapping("/api/v2/members")
	public Result membersV2(){
		
		List<Member> findMembers = memberService.findMembers();
		
		List<MemberDto> collect = findMembers.stream()
			.map(m -> new MemberDto(m.getName()))
			.collect(Collectors.toList());
		
		return new Result(collect);
	}
	
	@Data
	@AllArgsConstructor
	static class Result<T>{
		private T data;
	}
	
	@Data
	@AllArgsConstructor
	static class MemberDto{
		private String name;
	}
  • Return
	{
        "data": [
            {
                "name": "new-hello"
            },
            {
                "name": "member1"
            },
            {
                "name": "member2"
            }
        ]
	}
  • 장점
    • Entity를 DTO 로 변환하여 반환
    • 필요한 정보만 노출 시킬 수 있음(Entity를 노출시키지 않음)
    • 유지보수 용이함(유연하다)
    • API 스펙이 변하지 않음
profile
코딩왕이될사나이

0개의 댓글