[Spring] API, API Version management

홍정완·2022년 3월 30일
0

Spring

목록 보기
10/32
post-thumbnail
post-custom-banner

REST API 설계 or application 구조 변경 시 👉 버전 변경

사용자 👉 API의 버전 명시



Versioning


  • URI Versioning - (Twitter) 일반 브라우저에서 실행 가능

  • Request Parameter Versioning - (Amazon) 일반 브라우저에서 실행 가능

  • (Custom) Headers Versioning - (Microsoft) 일반 브라우저에서 실행 불가

  • Media Type Versioning - (GitHub) 일반 브라우저에서 실행 불가





@RequestMapping("/admin") 👉 가정



UserV2 Class

@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonFilter("UserInfoV2")
public class UserV2 extends User{

    private String grade;

}



  • URI에 버전을 포함한 버전 관리

@GetMapping("/v2/users/{id}")
    public MappingJacksonValue retrieveUsersV2(@PathVariable int id){

        User user = service.findOne(id);

        if(user == null){
            throw new UserNotFoundException(String.format("ID[%s] not found", id));
        }

        // User -> UserV2
        UserV2 userV2 = new UserV2();

        BeanUtils.copyProperties(user, userV2); // id, name, joinDate, password, ssn
        userV2.setGrade("VIP");

        SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter
                .filterOutAllExcept("id", "name", "password","grade");

        FilterProvider filters = new SimpleFilterProvider().addFilter("UserInfoV2", filter);

        MappingJacksonValue mapping = new MappingJacksonValue(userV2);
        mapping.setFilters(filters);

        return mapping;
    }

ex) http://localhost:3033/admin/v2/users/1 👉 입력

}



  • Request Parameter를 이용한 버전 관리

@GetMapping(value = "/users/{id}/", params = "version=2") 👉 이렇게 변경

ex) http://localhost:3033/admin/users/1/?version=2 👉 입력



  • header 값을 이용한 버전 관리

@GetMapping(value = "/users/{id}", headers = "X-API-VERSION=2") 👉 이렇게 변경

ex) http://localhost:3033/admin/users/1 👉 Header(KEY : X-API-VERSION, VALUE : 2) 입력



  • Mime Type을 이용한 버전 관리

@GetMapping(value = "/users/{id}", produces = "application/vnd.company.appv2+json")

ex) http://localhost:3033/admin/users/1 
👉 Header 값 (KEY : Accept, VALUE : application/vnd.company.appv2+json) 입력
profile
습관이 전부다.
post-custom-banner

0개의 댓글