ライブラリの代わりにサービス(REST / SOAP)を使用する理由


22

アプリケーションをサービスに分割しようとしているとしましょう。SOAアプローチを採用する理由と、それを必要とするアプリケーションがロードできるライブラリAPIを作成する理由はありますか。


6
ネイトねえ、読みSteveyのGoogleプラットフォーム暴言を、それは...製品(ライブラリ)質問VSプラットフォーム(サービス)上の偉大な洞察を提供
ヤニス

回答:


11

両者の違いは微妙かもしれません。たとえば、.NETの世界では、エンドユーザーにはモノリシックのように感じられ、同じマシンで動作するが、内部では多数のWCFサービスに分離されるアプリケーションがあります。また、ライブラリが強くリンクされていない(アドイン/プラグイン)アーキテクチャがあり、互いに通信するときにプロトコルに従っている場合があります。

これらの中間的なケースについて話すのを避け、強くリンクされたAPIライブラリと個別のRESTサービスのみを扱う場合は、次の点を考慮することをお勧めします。

  1. ライブラリAPIは、同じマシンで呼び出されます。サービスはどこでもホストでき、どこからでも呼び出すことができます。パフォーマンス/スケーラビリティ/セキュリティ上の理由で、複数のマシンでアプリケーションをホストしている場合は、サービスを使用する必要がある可能性があります。

  2. 複数のマシンにデプロイされたアプリケーションが1つのサービスを使用する場合の状況は似ています。たとえば、金融計算を行う銀行のアプリケーションを実行している場合、1つの方法は、すべてのデスクトップに大規模なアプリケーション全体を展開し、毎回すべてのクライアントに大規模な更新を強制することです。別のアプローチは、サーバー上で計算部分をホストし、UIとそれらのサーバーへの呼び出しだけを備えた軽量アプリのみをデスクトップに展開することです。

  3. RESTサービスをホストしている場合、だれでも使用できます。Macユーザー、Linuxを使用しているユーザーなどです。VisualStudioでC#ライブラリを作成し、DLLとして配布する場合は、ユーザー(顧客?)Windowsを持っていない人。


9

サービスのもう1つの利点は、サービスを更新すると、サービスのすべてのコンシューマにすぐに展開されることです。そのため、バグやパフォーマンスの問題を修正した場合、ユーザーが無視することを選択する可能性のある更新を配布する代わりに、更新されたサービスが公開されるとすぐに全員が利益を得ます。


本当ですが、これは不利な場合もあります。複数のアプリケーションが依存するサービスに変更を加えると、これらのアプリケーションの1つまたは多くの機能が予期せず破損する可能性があります。これは、サービスから誰かを怖がらせるためではなく、サービスを変更するたびに、サービスのすべての消費者が引き続き機能するようにする必要があることに注意してください。さらに良いのは、いったんデプロイされたレガシーサービスメソッドをそのままにして、実装を変更する必要があるときに新しいメソッドを作成することです。
リューズ・テリン

8

ライブラリの利点:

サービスの利点:

  • 誰もがすぐに透過的にアップグレードを取得します(バージョン管理されたAPIが提供されていない限り)
  • 消費者はコードを逆コンパイルできません
  • サービスハードウェアを個別に拡張可能
  • テクノロジーに依存しない。共有ライブラリでは、消費者は互換性のある技術を利用する必要があります。
  • より安全に。UI層は、DBに直接アクセスする代わりに、ファイアウォールの内側にあるサービスを呼び出すことができます。

ここでは、「ネイティブコード」は実際には意味がありません。a)サービスは「ネイティブコード」も使用でき、b)ジャストインタイムコンパイルは多くの場合、ネイティブコードと同じパフォーマンスを提供します。
sleske 14年

要点。「ネイティブコード」と言うときに言及しているのは、ライブラリが「処理中」の呼び出しであることです。サービスレイヤーのオーバーヘッドはありません(Web API呼び出しを行う場合のHTTPなど)
Cory House 14年

はい、通話のオーバーヘッドは実際に低くなります。私はあなたの答えを自由に編集して、「ネイティブコード」の言及を「より低い呼び出しオーバーヘッド」に置き換えました。同意しない場合は、自由に再編集してください:-)。
sleske 14年

私が追加したいのは、トランザクションの使用法です。通常、サービスの境界を越えてトランザクション作業を行うことは、共有ライブラリー内よりもはるかに困難です。
c_mart

2

SOAアプローチにより、さまざまなサービスを個別にホストおよび保守できます。コードに加えて、特定のサービスを展開するには、多くの特別な構成(パスワード、ポート、証明書など)が必要になる場合があります。RESTサービスの使用には、明確に文書化して簡単に理解できる有限の複雑さがあります。また、DBやその他のリソースへのアクセスをクライアントに許可する必要がないため、より安全です。


1

SOAサービスに変更がある場合、そのSOAサービスを再開発、再テスト、および再デプロイする必要があります。そのサービスを使用するすべてのアプリケーションは、引き続き使用できます。DLL内のライブラリを変更すると、そのライブラリのすべてのコンシューマを再参照してそのDLLを参照する必要があり、それらをすべて再テストし、すべて再デプロイする必要があります。また、これが適切に行われない可能性があり、アプリケーションごとにDLLのバージョンが異なる可能性があります。時々これは問題ではないかもしれません-おそらくすべてのシステムは展開時に存在したライブラリのバージョンを持っているべきです(有用な新機能を持つようにロギングシステムを更新したかもしれませすべてのシステムを更新する必要がありますか?)この場合、ライブラリは問題ありません。しかし、税率を計算するためのサービスがあり、税法が変更されたとしましょう。この変更を組み込むためにすべてのシステムを更新する必要はありません。1か所で行う方が良いでしょう。この場合、サービスがより良いオプションです。


0

いくつかの良い答えがありますが、与えられた答えにさらに多くのものを追加したいと思います。

APIライブラリメソッドは、できるだけ少ないオーバーヘッドで物事とやり取りする場合に非常に便利です。その結果、APIとそれを使用するアプリケーションとの間のカップリングが高くなります。時には、これはアプリケーションにとっても大丈夫であり、必要でさえありますが、非常に分散したシステムがある場合、または相互運用性が大きな問題であると考えられる場合は、後者を抽象化し、他の通信方法を使用する必要があります。特に、分散システムが必要な場合、SOAPはSOAの次のステップの1つですが、ユニットは互いの手順を知る必要があるため、ユニット間の依存関係が残ります。マシンが他のサービスのコンテンツについて何かを統一された方法で学習できるようにすることで、RESTはそれを新しいレベルに引き上げます。

あなたの場合、アプリケーションが配布されていなければ、アプリケーションをSOAに変換する理由はわかりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.