Multiple API Versions using Crnk or Katharsis
up vote
0
down vote
favorite
We're evaluating crnk (since Katharsis is dead) for implementing json:api. We're also considering having multiple API versions in a single binary, so that all versions are more continuously maintained/scanned. Finally, we've selected the URI versioning strategy, thus our URIs will contain /v1, /v2 etc. We are using Spring Boot 1.5.
In typical @RestController RESTServices, you can easily specify @RequestMapping paths to allow for multiple versions in a URI...
@Controller
@RequestMapping("/v1")
@RequestMapping(value = "/customers/{identifier}", method = RequestMethod.GET, produces = "application/json")
@Controller
@RequestMapping("/v2")
@RequestMapping(value = "/customers/{identifier}", method = RequestMethod.GET, produces = "application/json")
However, in crnk, how is this done? I've somewhat found a workaround by adding the API version to the resource path, but that feels horribly wrong.
@JsonApiResource(type = "customer", resourcePath = "/v1/customers")
public class Customer {
@JsonApiId
private long identifier;
This will indeed put the customers resource beneath the API version, but it feels like I'm versioning the resource, rather than the API. Furthermore, as I attempted this earlier today, I ended up creating copies of all the resources and repositories which created bean conflicts and other issues.
Has anybody found a clean way of doing this, or will we need to use separate binaries for different API versions?
Thanks for your time!
John
spring-boot json-api katharsis crnk
add a comment |
up vote
0
down vote
favorite
We're evaluating crnk (since Katharsis is dead) for implementing json:api. We're also considering having multiple API versions in a single binary, so that all versions are more continuously maintained/scanned. Finally, we've selected the URI versioning strategy, thus our URIs will contain /v1, /v2 etc. We are using Spring Boot 1.5.
In typical @RestController RESTServices, you can easily specify @RequestMapping paths to allow for multiple versions in a URI...
@Controller
@RequestMapping("/v1")
@RequestMapping(value = "/customers/{identifier}", method = RequestMethod.GET, produces = "application/json")
@Controller
@RequestMapping("/v2")
@RequestMapping(value = "/customers/{identifier}", method = RequestMethod.GET, produces = "application/json")
However, in crnk, how is this done? I've somewhat found a workaround by adding the API version to the resource path, but that feels horribly wrong.
@JsonApiResource(type = "customer", resourcePath = "/v1/customers")
public class Customer {
@JsonApiId
private long identifier;
This will indeed put the customers resource beneath the API version, but it feels like I'm versioning the resource, rather than the API. Furthermore, as I attempted this earlier today, I ended up creating copies of all the resources and repositories which created bean conflicts and other issues.
Has anybody found a clean way of doing this, or will we need to use separate binaries for different API versions?
Thanks for your time!
John
spring-boot json-api katharsis crnk
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
We're evaluating crnk (since Katharsis is dead) for implementing json:api. We're also considering having multiple API versions in a single binary, so that all versions are more continuously maintained/scanned. Finally, we've selected the URI versioning strategy, thus our URIs will contain /v1, /v2 etc. We are using Spring Boot 1.5.
In typical @RestController RESTServices, you can easily specify @RequestMapping paths to allow for multiple versions in a URI...
@Controller
@RequestMapping("/v1")
@RequestMapping(value = "/customers/{identifier}", method = RequestMethod.GET, produces = "application/json")
@Controller
@RequestMapping("/v2")
@RequestMapping(value = "/customers/{identifier}", method = RequestMethod.GET, produces = "application/json")
However, in crnk, how is this done? I've somewhat found a workaround by adding the API version to the resource path, but that feels horribly wrong.
@JsonApiResource(type = "customer", resourcePath = "/v1/customers")
public class Customer {
@JsonApiId
private long identifier;
This will indeed put the customers resource beneath the API version, but it feels like I'm versioning the resource, rather than the API. Furthermore, as I attempted this earlier today, I ended up creating copies of all the resources and repositories which created bean conflicts and other issues.
Has anybody found a clean way of doing this, or will we need to use separate binaries for different API versions?
Thanks for your time!
John
spring-boot json-api katharsis crnk
We're evaluating crnk (since Katharsis is dead) for implementing json:api. We're also considering having multiple API versions in a single binary, so that all versions are more continuously maintained/scanned. Finally, we've selected the URI versioning strategy, thus our URIs will contain /v1, /v2 etc. We are using Spring Boot 1.5.
In typical @RestController RESTServices, you can easily specify @RequestMapping paths to allow for multiple versions in a URI...
@Controller
@RequestMapping("/v1")
@RequestMapping(value = "/customers/{identifier}", method = RequestMethod.GET, produces = "application/json")
@Controller
@RequestMapping("/v2")
@RequestMapping(value = "/customers/{identifier}", method = RequestMethod.GET, produces = "application/json")
However, in crnk, how is this done? I've somewhat found a workaround by adding the API version to the resource path, but that feels horribly wrong.
@JsonApiResource(type = "customer", resourcePath = "/v1/customers")
public class Customer {
@JsonApiId
private long identifier;
This will indeed put the customers resource beneath the API version, but it feels like I'm versioning the resource, rather than the API. Furthermore, as I attempted this earlier today, I ended up creating copies of all the resources and repositories which created bean conflicts and other issues.
Has anybody found a clean way of doing this, or will we need to use separate binaries for different API versions?
Thanks for your time!
John
spring-boot json-api katharsis crnk
spring-boot json-api katharsis crnk
edited Nov 9 at 4:44
Michael Petch
24.7k55599
24.7k55599
asked Nov 9 at 3:25
Powdered Toast Man
13
13
add a comment |
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53219415%2fmultiple-api-versions-using-crnk-or-katharsis%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown