RESTful API - Сериализация против синтаксического анализа - PullRequest
2 голосов
/ 11 октября 2011

В настоящее время я разрабатываю RESTful API на Java, используя Джерси для старой, довольно сложной системы. Мы стремимся поддерживать две формы ввода - JSON и XML.

На данный момент я рассматриваю два способа реализации API - первый - создать серию аннотированных POJO, на которые может быть сопоставлен входящий запрос.

Вторым будет преобразование любых запросов XML в JSON и анализ JSON вручную.

Лично для меня второй способ на данный момент кажется более гибким, тем более что некоторые объекты в системе очень сложны.

По сути, мне интересно, есть ли какие-либо преимущества по отношению к первым вариантам (или недостатки по вторым), которые я должен рассмотреть?

РЕДАКТИРОВАТЬ: Чтобы уточнить немного, в моем случае, есть тонны классов, которые не могут быть аннотированы на этом этапе (это приложение активно разрабатывалось более десяти лет). Если я собираюсь пойти по маршруту POJO, мне нужно будет создать целую кучу новых объектов «сериализации», цель которых состоит в том, чтобы просто сериализовать в / из XML / JSON.

Эти классы необходимо будет поддерживать в актуальном состоянии, чтобы они соответствовали фактическим модельным классам (которых может быть несколько, представляющих один и тот же объект), поэтому я подумываю перейти к «ручному» методу.

Если бы это был новый проект, я бы определенно подумал об использовании аннотаций, но, учитывая текущую ситуацию, я не уверен, является ли это лучшим вариантом.

Ответы [ 2 ]

3 голосов
/ 11 октября 2011

И преимущество первого, и недостаток второго в том, что вам мало что нужно сделать с первым методом. POJO с аннотациями JAXB - определенно способ пойти с Джерси, если вы просто не можете заставить его работать - например, если вы просто не можете заставить его представлять XML / JSON, который вы хотите. В целом, однако, вы получаете ввод и вывод XML и JSON практически бесплатно.

2 голосов
/ 11 октября 2011

Примечание: я EclipseLink JAXB (MOXy) и являюсь членом JAXB 2 (JSR-222) экспертная группа.

В настоящее время я разрабатываю RESTful API на Java, используя Джерси для старая, довольно сложная система. Мы стремимся поддерживать две формы ввод - JSON и XML.

Реализации JAX-RS упрощают реализацию службы, которая принимает сообщения как XML, так и JSON:

@PUT
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public void put(Customer) {
    ...
}

По умолчанию Джерси использует реализацию JAXB с Jettison для преобразования объектов в / из JSON:

MOXy поддерживает собственные привязки XML и JSON с использованием среды выполнения JAXB и аннотаций. Это означает, что вы можете сопоставить объект XML и JSON, используя одни и те же метаданные:

Чтобы уточнить немного, в моем случае, есть тонны классов, которые не может быть аннотирован на этом этапе (это приложение активно разработано более десяти лет).

Если у вас есть классы, которые нельзя изменить для добавления аннотаций, вы можете использовать документ метаданных XML MOXy. Ниже приведен пример того, как эти метаданные используются в Джерси через JAX-RS ContextResolver:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...