Можно ли сгенерировать клиент C / C ++ для JSON API JAX-RS? - PullRequest
1 голос
/ 18 декабря 2010

Предположим, у меня есть удаленный JAX-RS JSON API с сервера, на котором запущен Tomcat. Я хочу получить доступ к этому API из клиента C / C ++. Существуют ли какие-либо инструменты, облегчающие жизнь клиенту C / C ++, например, генераторы кода? Или у кого-нибудь есть предложение по альтернативе?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2010

Я никогда не слышал о таком инструменте.Более того, я подозреваю, что такой инструмент (генератор C / C ++ для JSON) нецелесообразен.

Есть ряд причин, почему.Вот некоторые из наиболее важных:

  • Ключевая проблема заключается в том, что JSON не имеет схем.Это означает, что генератору API придется прибегнуть к просмотру примеров сообщений и попытаться определить, какие поля следует ожидать и каковы их типы.Это может быть сложно и даже теоретически невозможно в некоторых случаях.

  • В таких языках, как Java и C #, существуют прямые и "правильные" способы создания объектных API;например, соглашения JavaBeans.В C ++ и особенно в C нет соглашений, и существуют сложные проблемы, такие как протоколы контейнеров и управление памятью.

  • В таких языках, как Java и C #, безопасны во время выполненияи имеют различные механизмы языкового уровня, которые позволяют использовать динамическое программирование для работы с бессхемным характером JSON.Например, в Java есть рефлексия, прокси-классы, динамическая генерация кода и динамическая загрузка кода, и все это может помочь в работе с JSON.В C и C ++ эти механизмы обычно недоступны.

Короче говоря, если вы используете C или C ++, библиотеки JSON хороши настолько, насколько это возможно.

FOLLOWUP

Как отмечается в комментарии, это может быть осуществимо в контексте специфической реализации сервера на основе JAX-RS.Вам нужно получить внутренние метаданные, применить к ним сопоставление JSON и сгенерировать API C / C ++.Проблемы:

  1. Реализация генератора будет зависеть от платформы.
  2. Клиент на основе C / C ++ не сможет справиться с изменениями в эффективной схеме без регенерации API.и соответствующие изменения кода клиента.(Напротив, решение на основе библиотеки JSON теоретически может быть закодировано для работы с неожиданными новыми атрибутами и т. Д.)
  3. У вас все еще есть проблема управления контейнером / памятью.
0 голосов
/ 18 декабря 2010

Что вам нужно, так это выбор библиотеки для отправки и получения http-запросов и анализатор json.Ничто не сгенерирует код, который облегчит вам задачу, потому что идея такого API в том, что он выплевывает JSON.Задача JSON - последовательно преодолевать языковые и транспортные барьеры.Немного похоже на XML, но проще.

Этот вопрос может вас заинтересовать: Какой самый лучший анализатор json ? JSON Spirit Выглядит как особенно хорошая статья.

Теперь, когда вы используете REST, все, что вам нужно, это общаться с нужными URL.Готово.

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

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