web-dev-qa-db-ja.com

C / C ++でJSON RESTfulサービスを実装する方法

C/C++でJSON Restful Webサービスを実行しようとしています。私はAxis2/CとStaffを試してみましたが、これらはXMLのシリアライズ/デシリアライズには適していますが、JSONには適していません。

21
jllodra

Herb Sutterのブログ で紹介されている Casablanca をご覧ください。

11
Philipp

ffead-cpp を見ることができます。 jsonとrestfull Webサービスのサポートを提供する以外に、より多くの機能が含まれています。ただし、このフレームワークは状況によっては重すぎる場合があります。

3
Rutix

ngrest を試してください。シンプルですが fast C++ RESTful JSON Webサービスフレームワークです。これは、Apache2、Nginx、または独自のシンプルなhttpサーバーの上にデプロイできます。


JSONを使用したAxis2/Cについて。公式のAxis2/Cはもうメンテナンスされていないようです。そのため、Axis2/Cは廃止されます(ただし機能します)。

Axis2/CのJSONサポートは axis2c-unofficial プロジェクトで利用できます。

Linuxバイナリパッケージを使用するWindowsソースコードからのWindows の下に、JSONをサポートするAxis2/Cをインストールする方法に関するインストールマニュアルがあります。

WSFスタッフでJSONモードのCustomers(REST)サンプルを使用して試すことができます(staff/samples/rest/webclientスタッフのソースコードのディレクトリ)。

3
loentar

cを使用したRESTサービスの作成をサポートするライブラリはいくつかあります。 restinio

#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;
}
3
Shaaban Ebrahim

お試しください https://github.com/babelouest/ulfius C/C++ Restful APIを構築するための優れたライブラリ。すべてのプラットフォームをサポートできます:Linux、FreeBSD、Windowsなど

2
Rami

C++ Webサービスの場合、次のスタックを使用しています。

  • ipkn/crow C++マイクロWebフレームワーク
  • nlohmann/json jsonのシリアル化/逆シリアル化用。
2
georgeliatsos

JSONとJSONPathは、C-と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コマンドラインコードジェネレーターは、.jsonファイルをテンプレートとして使用してJSONデータを読み書きするAPIコードを示しています。 JSONデータを入力および抽出するAPIコードを記述する時間を節約するのに役立ちます。 JSONPathクエリコードもこのツールで生成できます。

1
Dr. Alex RE

JIRAプロジェクト があり、AXIS2/CのJSONのサポートが解決されました。
私は自分のプロジェクトに実装し、ライター(Badgerfish規約)で管理しましたが、それでもリーダーで管理しようとしています。
メモリ内のスタックでの管理はより複雑に思われます。

1
Marija Radezova

webcc をご覧ください。

これは軽量のC++ですRESTおよびSOAP Boost.Asio(1.66+)に基づくクライアントおよびサーバーライブラリです。

それは非常に有望であり、積極的に開発されています。

サーバーとクライアントの作成方法を示す優れた例があります。

利点:

  • コードは非常にクリーンです(厳密にGoogle C++スタイルに従っています)。
  • VLDテストによると、メモリリークはありません。
  • 使いやすいAPI。
  • 等.

欠点:

  • SSLはまだサポートされていません。
  • Nginxは独自のHTTPサーバーを管理するため、Nginxなどの既存のWebサーバーにはデプロイできません。
1
Adam Gu