Подтвердить что ты не робот

Способы реализации службы JSON RESTful в C/С++

Я пытаюсь сделать веб-службу JSON Restful на C/С++. Я пробовал Axis2/C и Staff, которые отлично подходят для сериализации/десериализации XML, но не для JSON.

4b9b3361

Ответ 2

Вы можете посмотреть ffead-cpp. Помимо предоставления поддержки json и restfull веб-сервисов, он также включает в себя больше возможностей. Однако эта структура может быть слишком тяжелой для вашей ситуации.

Ответ 3

Попробуйте ngrest. Это простой, но быстрый С++ RESTful JSON Web Services. Он может быть развернут поверх Apache2, Nginx или собственного простого HTTP-сервера.


Относительно Axis2/C с JSON. Похоже, что официальный Axis2/C больше не поддерживается. Таким образом, Axis2/C становится устаревшим (но все еще работает).

Поддержка JSON для Axis2/C доступна в проекте axis2c-unofficial.

Есть инструкции по установке, как установить Axis2/C с поддержкой JSON в Linux, Windows с использованием двоичного пакета, Windows из исходного кода.

Вы можете попробовать его с помощью WSF Staff, используя пример клиентов (REST) ​​в режиме JSON (который доступен из каталога staff/samples/rest/webclient исходного кода персонала).

Ответ 4

Для веб-службы С++ я использую следующий стек:

  • ipkn/crow С++ micro web framework
  • nlohmann/json для сериализации/десериализации json.

Ответ 5

попробуйте https://github.com/babelouest/ulfius отличную библиотеку для создания C/C++ Restful API. может поддерживать все платформы: Linux, FreeBSD, Windows и другие

Ответ 6

Существует проект JIRA, который разрешил поддержку JSON в AXIS2/C.
Я реализовал в своем проекте, и я справился с автором (соглашение Badgerfish), но все же я пытаюсь справиться с читателем.
Кажется, что сложнее управлять со стек в памяти.

Ответ 7

JSON и JSONPath поддерживаются как для C, так и для С++ в gsoap с новым генератор кода и новый JSON API, чтобы вы начали быстро.

В комплект включены несколько JSON, примеры JSON-RPC и REST. Управление памятью осуществляется автоматически.

Генератор кода может быть полезен. Возьмем, к примеру, json.org menu.json фрагмент:

{ "menu": {
    "id": "file",
    "value": "File",
    "popup": {
      "menuitem": [
        {"value": "New", "onclick": "CreateNewDoc()"},
        {"value": "Open", "onclick": "OpenDoc()"},
        {"value": "Close", "onclick": "CloseDoc()"}
      ]
    }
  }
}

Команда gsoap jsoncpp -M menu.json генерирует этот код для заполнения значения JSON:

value x(ctx);
x["menu"]["id"] = "file";
x["menu"]["value"] = "File";
x["menu"]["popup"]["menuitem"][0]["value"] = "New";
x["menu"]["popup"]["menuitem"][0]["onclick"] = "CreateNewDoc()";
x["menu"]["popup"]["menuitem"][1]["value"] = "Open";
x["menu"]["popup"]["menuitem"][1]["onclick"] = "OpenDoc()";
x["menu"]["popup"]["menuitem"][2]["value"] = "Close";
x["menu"]["popup"]["menuitem"][2]["onclick"] = "CloseDoc()";

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

ИЗМЕНИТЬ

Чтобы уточнить, генератор кода jsoncpp командной строки показывает код API для чтения и записи данных JSON с использованием .json файла в качестве шаблона, который, как я нашел, полезен для экономии времени на запись код API для заполнения и извлечения данных JSON. Код запроса JSONPath также может быть сгенерирован с помощью этого инструмента.

Ответ 8

Вы можете взглянуть на webcc.

Это облегченная клиентская и серверная библиотека C++ REST и SOAP, основанная на Boost.Asio(1. 66+).

Это довольно перспективно и активно развивается.

Есть отличные примеры, чтобы продемонстрировать, как создать сервер и клиент.

Преимущества:

  • Код очень чистый (строго следуя стилю Google C++).
  • Нет утечки памяти в соответствии с тестом VLD.
  • Простые в использовании API.
  • и т.п.

Недостатки:

  • Пока не поддерживается SSL.
  • Не может быть развернут на существующих веб-серверах, таких как Nginx, потому что он управляет своим собственным HTTP-сервером.

Ответ 9

Есть небольшое количество библиотек, которые поддерживают создание служб отдыха с помощью

#include <restinio/all.hpp>
int main()
{
    restinio::run(
        restinio::on_this_thread()
        .port(8080)
        .address("localhost")
        .request_handler([](auto req) {
            return req->create_response().set_body("Hello, World!").done();
        }));
    return 0;
}