3

次のプロジェクトでは、エンタープライズフレームワーク内にデータAPIを作成します。データは、異なるソフトウェアプラットフォームで実行されているいくつかのアプリケーションによって消費されます。私の同僚は一般的にSOAPを好みますが、RESTfulアーキテクチャを使用したいと思います。

ほとんどのアプリケーションは、呼び出しごとにいくつかのオブジェクトのみを必要とします。ただし、他のアプリケーションでは、それぞれが数千のレコードを含む複数の順次呼び出しを行う必要がある場合があります。パフォーマンスが気になります。シリアル化/逆シリアル化とネットワークの使用は、ボトルネックを見つけるのが怖いところです。各リクエストに大きな遅延が伴う場合、企業のすべてのアプリケーションは遅くなります。

私の恐れは現実的ですか?XMLやJSONのような大量のフォーマットへのシリアル化は問題になりますか?代替案はありますか?

これまで、パフォーマンスのために、CSVなどの「フラット」/リーナーファイル形式を使用してこれらの大規模なデータ転送を行う必要がありました。Webサービスを使用して必要なパフォーマンスを達成するにはどうすればよいですか?

RESTに固有の返信を希望しますが、SOAPユーザーがこれにどのように対処するかについても興味があります。

4

3 に答える 3

2

RESTの利点の1つは、好きなメディアタイプを自由に使用できることです。text / csvを使い続けてみませんか?HTTP圧縮を有効にして、帯域幅の消費をさらに削減することもできます。

RESTサービスは、さまざまな種類のデータ形式をすべて利用するのに最適です。シナリオに最適な形式は何でも。

于 2010-10-05T16:16:02.403 に答える
1

XMLとJSONの両方を提供しています。あなたが言及したレンダリング時間は本当に問題になる可能性があります。サーバー側には、XMLのマーシャルに関して、標準のsun-implementationがやや遅いJAXBがあります。XMLには冗長性という欠点がありますが、相互運用性にも優れており、スキーマ+明示的なバージョン管理があります。

冗長性をいくつかの方法で補正しました(特に結果セットを制限します)。

  • アイテムを含むコンテナがある場合は、xml応答でページングを提供します(ページサイズとページ番号の両方、たとえば/ items?page = 0&size = 3)。クライアント自体がページサイズを縮小することでサイズを縮小できます。
  • 折りたたみ要素を提供します。たとえば、複数のクライアントがアイテム全体の1つのデータフィールドにのみ関心を持っています。これをパラメータ(例:/ items?select = name)で行うと、ネストされた要素'name'のみがitem要素のインラインに含まれます。これにより、サイズが大幅に減少します。

通常、クライアントに結果セットの制限を使用する権限を与えます。彼らはそれを使用することを定義します、なぜならそれは彼らの側でも応答時間をスピードアップするからです:)

また、圧縮を使用すると、冗長なXMLが大幅に削減されます(この場合、ペイロードは10分の1になります)。クライアント側からは、ヘッダー'Accept-Encoding:gzip'で実行できます。Apacheを使用する場合、サーバー構成も簡単です

于 2010-10-05T17:36:25.643 に答える
0

3つのガイドラインを提供したいと思います。

  1. 1つは、 XMLでシリアル化されたデータ転送オブジェクトを送信する多くのSOAP Webサービス(特に.NET 2.0「ASMX」テクノロジで構築されたもの)があるという観察結果です。もちろん、XMLまたはJSONを送信するRESTfulサービスはたくさんあります。XMLのシリアル化/逆シリアル化が制約要因になることはめったにありません。
  2. Webサービスのボトルネックの一般的な原因の1つは、クライアントアプリケーションが何千ものシーケンシャル呼び出しを行うことでデータを取得するように促すインターフェイスです(これには、おしゃべりなインターフェイスという用語があります)。これは、先に進むことにした4文字の頭字語に関係なく、Webサービスのインターフェイスを設計するときに避けるべきことです。
  3. RESTについて覚えておくべきことの1つは、RESTが(部分的に)状態の転送を表すことです。これは、サーバーからクライアント・アプリケーションにビジネス・オブジェクトの状態を転送したくない一部の操作には適さない場合があります。そのような場合、(同僚が提案したように)SOAPWebサービスの方が適切です。または、SOAPサービスとRESTサービスの組み合わせで、RESTサービスが状態転送が適切な場合に操作を処理し、SOAPサービスが残りの操作を実装します(意図しないしゃれ:-))。
于 2010-10-05T16:35:31.523 に答える