Управление версиями REST API с использованием Guice 3.0 + JaxRS 2.0
Я хотел бы иметь версионный API REST с использованием заголовка HTTP-запроса:
GET / someResource
Версия: 1.0
Теперь, если у меня есть 2 версии этого ресурса, мое веб-приложение JaxRS должно быть в состоянии обслуживать ответы, соответствующие любой из запрошенных версий. Таким образом, я ожидаю, что следующие классы будут частью моего пути к классам:
@Path("/someResource")
public class SomeResourceV1 {
**snip**
}
а также
@Path("/someResource")
public class SomeResourceV2 {
**snip**
}
Теперь я хотел бы отправить запрос одному из этих классов ресурсов в зависимости от заголовка версии. Я предполагаю, что это будет сделано с использованием фильтра сервлетов. Но так как я использую Guice, я думаю, что я ищу инжектор для каждого запроса.
Если запрос имеет версию 1.0, используйте инжектор с привязками для SomeResourceV1, в противном случае, если запрос имеет версию 2.0, используйте инжектор с привязками для SomeResourceV2
Я думаю, что есть способ получить то, что я хочу, с помощью подкласса GuiceFilter, но я не совсем уверен. Кто-нибудь пробовал что-то подобное раньше?
1 ответ
Не совсем то, что вы просите, но вы можете включить версию в медиа-тип запроса (например: application/vnd.foo.v1+json
- vnd
обозначает пользовательский тип поставщика и +json
позволяет реализации JAX-RS знать, что объект входящего запроса имеет формат JSON). Затем вы можете отправить с помощью @Consumes
аннотации на каждый из ваших методов (например: @Consumes("application/vnd.foo.v1+json")
против @Consumes("application/vnd.foo.v2+json")
без необходимости добавления пользовательских фильтров.