Простое управление версиями ресурсов REST в реализациях на основе JAX-RS?

Лучшая практика для управления версиями ресурсов REST - помещать информацию о версии в заголовки Accept / Content-Type HTTP-запроса, оставляя URI неизменным.

Вот пример запроса / ответ на REST API для получения системной информации:

==>
GET /api/system-info HTTP/1.1
Accept: application/vnd.COMPANY.systeminfo-v1+json

<==
HTTP/1.1 200 OK
Content-Type: application/vnd.COMPANY.systeminfo-v1+json
{
  “session-count”: 19
}

Обратите внимание, что версия указана в типе MIME.

Вот еще один запрос / ответ для версии 2:

==>
GET /api/system-info HTTP/1.1
Accept: application/vnd.COMPANY.systeminfo-v2+json

<==
HTTP/1.1 200 OK
Content-Type: application/vnd.COMPANY.systeminfo-v2+json
{
  “uptime”: 234564300,
  “session-count”: 19
}

См. http://barelyenough.org/ blog / tag / rest-versioning / для получения дополнительных объяснений и примеров.

Можно ли легко реализовать этот подход в реализациях на основе JAX-RS, ориентированных на Java, таких как Jersey или Apache CXF?

Цель состоит в том, чтобы иметь несколько классов @Resource с одинаковым значением @Path, но обслуживающих запрос на основе фактической версии, указанной в типе MIME?

Я изучил JAX-RS в целом и Джерси в частности и не нашел для этого поддержки. Джерси не дает возможности зарегистрировать два ресурса с одним и тем же путем. Для поддержки этого необходимо реализовать замену для класса WebApplicationImpl.

Можете ли вы что-нибудь предложить?

ПРИМЕЧАНИЕ: Это необходимо, чтобы несколько версий одного и того же ресурса были доступны одновременно. В новых версиях могут быть внесены несовместимые изменения.

11
задан Volodymyr Tsukur 7 February 2011 в 21:02
поделиться