[Spring] API Version management ๐
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) ์
๋ ฅ
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([Spring] API Version management ๐), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@daydream/Spring-API-Version-management์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค