[REST API] REST API version 관리(2) - request parameter, header, media type

민지·2024년 3월 14일
0

REST API - Spring Boot

목록 보기
18/27
post-custom-banner

1. request parameter

사용자는 request parameter를 통해 원하는 버전을 선택할 수 있다는 뜻!

request parameter에 따른 REST API versioning 구현

1. 뭘 만들건지 구조화
Request Param Versioning

2. versioning/VersioningPersonController.java 수정

	// http://localhost:8080/person?version=1
	@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"));
	}

@GetMapping에 params="version=1"을 추가해, 해당 version=1과 같은 request parameter가 있는 경우에만, 이 특정 메서드를 적용할 것!

실행결과,

2. header

사용자 정의 헤더 버전 관리

API 소비자가 API 버전 1을 원하는 경우, Request 헤더인 X-API-VERSION=1을 전송할 수 있다.
API 소비자가 API 버전 2을 원하는 경우, Request 헤더인 X-API-VERSION=2을 전송할 수 있다.

1. 뭘 만들건지 구조화
Header Versioning

  • V1 : http//localhost:8080/person/header
    • HEADER → X-API-VERSION:1
    • @GetMapping(path=”/person/header”, headers=”X-API-VERSION=1”)
  • V2 : http://localhost:8080/person/header
    • HEADER → X-API-VERSION:2
    • @GetMapping(path=”/person/header”, headers=”X-API-VERSION=2”)

2. versioning/VersioningPersonController.java 수정

@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"));
}

실행결과,

참고로, 헤더 이름을 꼭 X-API-VERSION으로 안해도 되고, 맘대로 바꿔도 됨!

3. media type


소비자가 API의 v1에 엑세스하는 경우, application/vnd.company.app-v1+json을 Accept 헤더값으로 입력하고,
소비자가 API의 v2에 엑세스하는 경우, application/vnd.company.app-v2+json을 Accept 헤더값으로 입력하면 된다.

1. 뭘 만들건지 구조화

2. versioning/VersioningPersonController.java 수정

	@GetMapping(path = "/person/accept", produces = "application/vnd.company.app-v1+json")
	public PersonV1 getFirstVersionOfPersonAcceptHeader() {
		return new PersonV1("Bob Charlie");
	}

	@GetMapping(path = "/person/accept", produces = "application/vnd.company.app-v2+json")
	public PersonV2 getSecondVersionOfPersonAcceptHeader() {
		return new PersonV2(new Name("Bob", "Charlie"));
	}

v1 실행결과,

하지만, 이 방법은 Accept 헤더 값이 정해져있어서, 바꾸면 에러가 났다 ..




참고 및 출처
이 시리즈는 Udemy 강의의 내용을 정리한 것입니다.
https://www.udemy.com/course/spring-boot-and-spring-framework-korean/

profile
배운 내용을 바로바로 기록하자!
post-custom-banner

0개의 댓글