API 사용해본 경험이 있으면 보통
/api/v2/..../... 이런식에 url들을 볼수가 있습니다.
여기서 보면 /api/v2 이 baseUrl 이라고 볼수가 있는데
이는 api를 버전별로 관리할 수 있다는 측면이 있습니다.
이렇게 버전을 왜 표기를 하냐 하면은
/api/v1 으로 제작한 서비스들도 작동을 해야하기 때문에
API의 스펙이 크게 변경되는 경우는 /api/v2 로 새로 제공을 하는것 같습니다.
나머지 다른 이유는 클라이언트랑 같은 도메인을 사용할때 baseUrl 을 지정함으로써 API에 접근을 할 수 있는 것입니다.
BaseUrl을 정하는 방법은 되게 여러가지가 있는것같았습니다.
// application.properties
spring.data.rest.base-path=/api/v2
이렇게 properties 파일에 지정해도 되고
아니면 config 파일같은데서 property 설정해줘도 되고
저렇게 지정하면 됩니다.
문제는 모든 파일에 Url이 고정이 되어버려서
제가 원하는 형태는 아니라는 것
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@RestController
@RequestMapping("/api/v1/*")
public @interface Version1RestController { }
@Version1RestController
class UserController {
@GetMapping("/users/{id}")
public User getUser(@PathVariable("id") Long id) {
User user = ...;
return user;
}
}
이런식으로 어노테이션을 활용하면 내가 원하는 Controller에만 적용시켜 줄 수 있기 때문에
만약에 스펙이 변경된 Version 2 인 Controller들이 등장하게 되면
새로운 @Version2RestController
를 적용시켜주면 됩니다.
즉 Version 1 과 Version 2가 같이 서비스를 제공할 수 있는 형태가 됩니다!
처음에는 baseUrl을 전혀 신경안쓰고 있었는데
프로젝트를 하면서 점점 신경써야되는 부분들이 생겨나서
배워가는 것이 좋은 것 같습니다.
Url 관련되서는 실제 오픈 API를 제공해주는 서비스를 참고하여 작성할 것 같습니다.