Управление версиями 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") без необходимости добавления пользовательских фильтров.

Другие вопросы по тегам