2010-12-17 9 views
1

Tomcatを実行しているサーバーからリモートのJAX-RS JSON APIがあるとします。私はC/C++クライアントからこのAPIにアクセスしたいと思います。 C/C++クライアントの生活を楽にするツールがありますか?コードジェネレータ?それとも誰かが代替案を提案していますか?JAX-RS JSON APIのC/C++クライアントを生成できますか?

答えて

0

私はこのようなツールについて聞いたことがありません。さらに、私はそのようなツール(JSONのC/C++ジェネレータ)は実用的ではないと考えています。

理由はいくつかあります。最も重要なものは次のとおりです。

  • 重要な問題は、JSONにスキーマがないことです。これは、APIジェネレータがサンプルメッセージを見て、期待するフィールドとそのタイプが何であるかを推測しようとする必要があることを意味します。これは難しく、場合によっては理論的に不可能でさえあります。

  • JavaやC#などの言語では、オブジェクトAPIを生成するための簡単な「正しい方法」があります。例えばJavaBeansの規約。 C++や特にCでは、規約は存在せず、コンテナプロトコルやメモリ管理のような複雑な問題があります。

  • JavaやC#などの言語では、実行時型セーフで、さまざまな言語レベルのメカニズムが用意されているため、動的プログラミングを使用してJSONのスキーマレスの性質に対応できます。たとえば、Javaではリフレクション、プロキシクラス、動的コード生成、動的コードロードなどがあり、これらのすべてがJSONの処理に役立ちます。 CおよびC++では、これらのメカニズムは一般的に利用できません。

つまり、CまたはC++を使用している場合、JSONライブラリは得られるほど良好です。

フォロー

コメントが指摘するように、これは特定 JAX-RSベースのサーバー実装のコンテキストで実装することは可能かもしれません。内部メタデータを取得し、JSONマッピングを適用し、そこからC/C++ APIを生成する必要があります。問題は次のとおりです。

  1. ジェネレータの実装はプラットフォーム固有です。
  2. C/C++ベースのクライアントは、APIの再生成および対応するクライアントコードの変更なしでは、有効なスキーマの変更に対処できません。(対照的に、JSONライブラリベースのソリューションは、理論上、予期しない新しい属性などを処理するためにコード化することができます)
  3. まだ対処するにはコンテナ/メモリ管理の問題があります。
+0

JSONだけを考えているとすれば正しいと思います。しかし、私はJAX-RSには、別の言語で値オブジェクトを生成するためのJavaベースのスキーマがあると考えています。誰かがまだそれをやっていれば、もっと問題になると思う。 JBoss RestEasyはJavaで何かを提供していると主張しています。 – FelixM

0

必要なものは、httpリクエストを送受信するためのライブラリの選択と、jsonパーサーです。このようなAPIのアイデアはJSONが吐き出されるという理由から、コードを生成して簡単にすることはできません。 JSONのポイントは、一貫した方法で言語と交通の障壁を横断することです。 XMLのようなビットですが、単純です。

この質問はあなたに興味があります:what's the best json parserJSON Spirit特に良い記事のようです。

ここで、RESTを使用しているので、必要なのは右のURLと通信するだけです。完了しました。

最後に、あなたが決定したいことは、ネットワーク通信にlibaryを使用することです。ブーストは多くの人々の推薦になるだろう、私は確信しています。

+0

私はJSONが何であるのか、そこにライブラリがあるのか​​知っていますが、C/C++のstructs/classesに解析する定型コードをすべて記述したくありません。新しいクラスやフィールドがあるときには、すべてをもう一度変更したくありません。そのため、私は自動化されたソリューションを探しています。 – FelixM

関連する問題