[RestApi] Versioning 버전 관리 방법
2024. 3. 19. 23:35ㆍ프로그래밍(Backend)/Spring Boot
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"));
}
버전 관리엔 완벽한 답은 없고 사용하고 싶은 버전 관리 방법을 선택하되 한 조직에선 같은 방식을 사용하는 것이 좋다.
'프로그래밍(Backend) > Spring Boot' 카테고리의 다른 글
[Springboot] JWT(Json Web Token)를 사용하여 안전하게 Json데이터를 전송하자(2) (0) | 2024.03.31 |
---|---|
[Springboot] JWT(Json Web Token)를 사용하여 안전하게 Json데이터를 전송하자(1) (0) | 2024.03.31 |
[Springboot] JUnit5를 통한 단위(unit) 테스트 작성 (0) | 2024.03.28 |
[RestApi] 유효성 검사(spring-boot-starter-validation) (0) | 2024.03.19 |
[Springboot] Logger로 로그 출력하기 (0) | 2024.03.16 |