REST API 설계 or application 구조 변경 시 👉 버전 변경
사용자 👉 API의 버전 명시
URI Versioning - (Twitter) 일반 브라우저에서 실행 가능
Request Parameter Versioning - (Amazon) 일반 브라우저에서 실행 가능
(Custom) Headers Versioning - (Microsoft) 일반 브라우저에서 실행 불가
Media Type Versioning - (GitHub) 일반 브라우저에서 실행 불가
UserV2 Class
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonFilter("UserInfoV2")
public class UserV2 extends User{
private String grade;
}
@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 👉 입력
}
@GetMapping(value = "/users/{id}/", params = "version=2") 👉 이렇게 변경
ex) http://localhost:3033/admin/users/1/?version=2 👉 입력
@GetMapping(value = "/users/{id}", headers = "X-API-VERSION=2") 👉 이렇게 변경
ex) http://localhost:3033/admin/users/1 👉 Header 값 (KEY : X-API-VERSION, VALUE : 2) 입력
@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) 입력