JAX-RS и JAX-WS отлично подходят для создания API.Однако они вообще не решают проблему обратной совместимости.
Чтобы не сломать старый клиент, когда в API вводятся новые возможности, вам, по сути, нужно принять и предоставить точно такой же ввод и вывод.форматировать, как вы делали раньше;кажется, что многие из анализаторов XML и JSON подходят, если они находят поле, которое ни к чему не относится или имеет неправильный тип.
Некоторые библиотеки JSON, такие как Jackson и Gsonпредоставьте функцию, в которой вы можете указать другое представление ввода / вывода для данного объекта на основе настройки времени выполнения, которая кажется подходящим способом управления версиями для многих случаев.Это позволяет обеспечить обратную совместимость путем аннотирования добавленных и удаленных полей, чтобы они отображались только в соответствии с версией API, используемой клиентом.
Ни JAXB, ни какая-либо другая библиотека привязки данных XML, которую я нашел на сегодняшний деньимеет достойную поддержку этой концепции, не говоря уже о возможности повторного использования одних и тех же аннотаций для JSON и XML.Добавление его в JAXB-RI или EclipseLink Moxy представляется потенциально возможным, но пугающим.
Другой подход к управлению версиями, по-видимому, заключается в версии всех классов, которые изменились, часто путем создания нового пакета каждый раз, когда APIпубликуется и создается копии всех модифицированных классов DTO, Service и Resource в новом пакете, так что вся информация о типах является версионной для систем привязки и диспетчеризации.Этот подход кажется мне более трудоемким.
Мой вопрос: как вы разработали своих провайдеров Jave API для обратной совместимости?Что сработало, а что нет?
Ссылки на тематические исследования или сообщения в блогах по этому вопросу высоко ценится;Я немного погуглил, но не стал много обсуждать это.