ネットワークを介したオブジェクト転送を処理する場合、どのシリアル化メカニズムを選択する必要があるのでしょうか。長所と短所は何ですか?
転送形式はほとんど形式であり、さらにフットプリントが小さいため非常に軽量であるため、ほとんどの場合JSON
、またはそのXML
ために使用することを知っています。したがって、シリアル化は完全にテーブルから外れていますか?AJAX
Javascript
JSON
Java
ネットワークを介したオブジェクト転送を処理する場合、どのシリアル化メカニズムを選択する必要があるのでしょうか。長所と短所は何ですか?
転送形式はほとんど形式であり、さらにフットプリントが小さいため非常に軽量であるため、ほとんどの場合JSON
、またはそのXML
ために使用することを知っています。したがって、シリアル化は完全にテーブルから外れていますか?AJAX
Javascript
JSON
Java
一般に、重要な質問は、シリアル化されたオブジェクト((node-js)などのブラウザー/ JavaScriptエンジン、Javaクライアント、不明/複数のクライアント)を受け取るクライアントです。
JSON-JSON構文は基本的にJavaScriptであるため、JSエンジンを備えたコンポーネントはすべて、その解析を非常にうまく処理します-複雑なデータ構造でさえ、効率的に「生きている」オブジェクトに変換されます。JSONパーサーは事実上すべての言語に存在し、JSエンジンを使用していなくても簡単に使用できます(たとえば、JSONを対応するオブジェクトに簡単に変換できるGoogle Gsonを例にとると)、言語間のコミュニケーションに適しています。 -たとえば、メッセージングアーキテクチャで。
XML-JSONの多くの利点(クロスランゲージ、軽量など)を共有します。たとえば、Adobe FlexはXMLを非常にうまく処理し、JSONよりも優れています。それは間違いなくJSONの適切な代替品です。私は個人的にJSのような構文のためにJSONを好みますが、XMLも優れています。
Javaシリアル化-JavaからJavaへの通信でのみ考慮する必要があります。重要な注意点は、クラス定義は送信側と受信側にある必要があり、多くの場合、オブジェクト全体を渡すことによって多くを得ることができないということです。RMIを通信プロトコルとして除外するつもりはありません。RMIは開発を簡素化します。ただし、結果として得られるアプリケーションコンポーネントはハード結合されるため、交換が非常に困難になります。
もう1つの注意事項-一般に、シリアル化にはオーバーヘッドがあります。ただし、通信がネットワークを介して実行される場合、ボトルネックは多くの場合、シリアル化/逆シリアル化自体ではなくネットワークです。
状況次第だと思います。httpリクエストなどを送信する場合は、JSONまたはXMLが明らかに良い選択です。分散アルゴリズムなどのためにtcpソケットを介してJavaオブジェクトを送信するだけの場合は、Javaのシリアル化の方が簡単/優れていると思います
ネットワークを介したシリアル化では、XMLとJSONの両方が機能します。それはこの情報の消費者に依存します。
コンシューマーがAjaxを使用して情報を要求し、画面上に何かをレンダリングするブラウザーである場合、通常、JSONは既にJavascriptオブジェクト形式であり、Javascript互換オブジェクトに変換するオーバーヘッドがないため最善の策です。実際、多くのAjaxライブラリ(jQueryなど)はJSONを適切にサポートしています。
コンシューマーがJavaである場合とない場合がある別のアプリケーションである場合、XMLが優先されるシリアル化メカニズムです。WebサービスはXMLを非常に頻繁に使用します。
コンシューマーが別のJavaプログラムである場合は、間違いなくJavaシリアル化が推奨されるオプションです(RMIなど)。まだ出ていません:-)。
しかし、はい、XMLとJSONの間にはあいまいな境界線があります。ここで述べたのは一般的な慣習です。これは、XMLとJSONのすべての側面を取り上げ た素晴らしい記事です。
私はかつてセキュリティエンジニアのトレーニングに参加しましたが、Javaネイティブの逆シリアル化側にセキュリティ上の弱点があり、(悪意のある可能性のある)バイトストリームを受け入れる可能性があるため、Javaネイティブのシリアル化の使用はお勧めしません。また、定義/スキーマが正しく定義されていない場合、XMLには既知のセキュリティ問題があります。これはXXE(XML Enternal Entities)と呼ばれます。消費側に「10億笑い」攻撃を引き起こす可能性があります。
開発者として、応答オブジェクトのシリアル化を処理する必要はないと思います。しかし、JSONを検討する場合、XMLよりも選択することにはまともな利点があります。