지난 포스팅(https://benggrae.tistory.com/20)에서 Spring에서 API버전을 분기하는 방법에 대해서 작성하였다.
개인적인 생각에 Spring API Gateway를 이용하여 별도의 서비스(서버) 별로 쓰거나 새로운 버전이 통째로 런칭되어 하나의 서비스로도 떨어져 나갔을 때 유용한 방법이라고 생각이 되며 손쉽게 분기가 가능했다.
YML에서 라우팅룰을 정의할 수 있다.
application.yml 작성한다.
spring:
cloud:
gateway:
routes:
- URI에 버전을 포함시키는 방법
GET /v1
- yaml 파일
routes:
- id: v1-api-path
uri: http://localhost:8081
predicates:
- Path=/v1/**
filters:
- RewritePath=/v1/(?<path>.*), /$\{path}
- id: v2-api-path
uri: http://localhost:8083
predicates:
- Path=/v2/**
filters:
- RewritePath=/v2/(?<path>.*), /$\{path}
2. 파라미터로 버전을 표기하는 방법
GET /?version=v1
- yaml 파일
- id: v1-api-param
uri: http://localhost:8081
predicates:
- Query=version,v1
- id: v1-api-param
uri: http://localhost:8083
predicates:
- Query=version,v2
3. 커스텀 header값으로 분기 하는 방법
GET /api/call
X-API-VERSION: V1
- yaml 파일
- id: v1-api-header
uri: http://localhost:8081
predicates:
- Header=X-API-VERSION,v1
- id: v1-api-header
uri: http://localhost:8081
predicates:
- Header=X-API-VERSION,v2
4. MIME 타입 으로 분기하는 방법
GET /api/call
Accept: application/vnd.benggrae.com.v1+json #vnd는 벤더를 의미
- yaml 파일
- id: v1-api-accept
uri: http://localhost:8081
predicates:
- Header=Accept, application/vnd.benggrae.com.v1\+json
- id: v2-api-accept
uri: http://localhost:8081
predicates:
- Header=Accept, application/vnd.benggrae.com.v1\+json