프로그래밍(Backend)/Spring Boot
[RestApi] Versioning 버전 관리 방법
bell_hana
2024. 3. 19. 23:35
1. URI versioning
http://localhost:8080 /v1/person
http://localhost:8080 /v2/person
@GetMapping("/v1/person")
public PersonV1 getFirstVersionOfPerson() {
return new PersonV1("Bob Charlie");
}
@GetMapping("/v2/person")
public PersonV2 getSecondVersionOfPerson() {
return new PersonV2(new Name("Bob", "Charlie"));
}
2. Request Parmeter versioning
http://localhost:8080/person?version=1
http://localhost:8080/person?version=2
@GetMapping(path = "/person", params = "version=1")
public PersonV1 getFirstVersionOfPersonRequestParameter() {
return new PersonV1("Bob Charlie");
}
@GetMapping(path = "/person", params = "version=2")
public PersonV2 getSecondVersionOfPersonRequestParameter() {
return new PersonV2(new Name("Bob", "Charlie"));
}
3. Header versioning
URL은 같고 header만 다르다.
URL, header : X-API-VERSION=1
URL, header : X-API-VERSION=2
@GetMapping(path = "/person/header", headers = "X-API-VERSION=1")
public PersonV1 getFirstVersionOfPersonRequestHeader() {
return new PersonV1("Bob Charlie");
}
@GetMapping(path = "/person/header", headers = "X-API-VERSION=2")
public PersonV2 getSecondVersionOfPersonRequestHeader() {
return new PersonV2(new Name("Bob", "Charlie"));
}
4. Media type versioning
URL은 같고 produces만 다르다.
URL, application/vnd.company.app-v1+json
URL, application/vnd.company.app-v2+json
@GetMapping(path = "/person/accept", produces = "application/vnd.company.app-v1+json")
public PersonV1 getFirstVersionOfPersonRequestAccept() {
return new PersonV1("Bob Charlie");
}
@GetMapping(path = "/person/accept", produces = "application/vnd.company.app-v2+json")
public PersonV2 getSecondVersionOfPersonRequestAccept() {
return new PersonV2(new Name("Bob", "Charlie"));
}
버전 관리엔 완벽한 답은 없고 사용하고 싶은 버전 관리 방법을 선택하되 한 조직에선 같은 방식을 사용하는 것이 좋다.