9

私は、Webサービスを介して(Java)バックエンドと通信するリッチインターネットWebアプリケーションを開発中です。Flex/FlashとGWT/Javascriptの両方でユーザーインターフェイスのプロトタイプを作成しましたが、これらのRIAプラットフォームはRPCスタイルのバックエンド通信方式(Flexの場合はAMF、GWTの場合はGWT-RPC)を好む傾向があることに気付きました。

私の場合、サーバーは、私が作成していない他のクライアントにもWebサービスを提供する必要があります。このため、私は標準ベースのWebサービス(SOAPやRESTなど)に傾倒しています。RIAは、他の人に提供しているのと同じWebサービスを使用する必要があると確信しています。私が経験から精通しているRPCスタイルをモデル化しているため、SOAPを「取得」します。私はRESTを初めて使用しますが、CXF/Jacksonを使用してRESTバックエンドのプロトタイプを作成しました。ただし、現時点では、REST APIは依然としてRPCスタイルのAPIのように感じられます。これは、HATEOASのアイデアに頭を悩ませているためだと思います。

Roy T. Fieldingsの役立つブログ投稿を約10回読んだことがあり、光が見え始めていると思います。たとえば、リソースとともにさまざまな状態遷移へのリンクを含めると、クライアントとサーバー間の結合の量を実際に減らすことができることは明らかです。私のクライアントは、その時点で表示されているエンティティで実行できる法的操作へのアクセスをユーザーに提供するボタンをレンダリングするだけで済みます。

しかし、RIAとそのサーバーアプリケーション間の緩い結合は重要ですか?

その性質上、RIAはサーバーデータモデルと非常に緊密に結合されています。箱から出して、彼らは多くのことを前提としています。緩い結合は設計目標ではないため、RPCスタイルのアプリケーションプロトコルも好むのはそのためだと思います。しかし、HATEOASを真剣に受け止めれば、実行可能なデータモデルと操作についてほとんど想定しない、はるかに一般的なRIAクライアントを作成できることに気づき始めています。これにより、バックエンドの変更を通じてクライアントを維持するための労力を減らすことができますが、これは理にかなっていますか?メリットはコストを上回りますか?

ps-2つの詳細-このアプリケーションには、非常に複雑で、深くネストされたデータモデルがあります。また、100%純粋なREST Webアプリではないと誰かが言っても、私はそれほど気にすることはできませんでした。

4

2 に答える 2

3

GWTアプリがHTTPによって提供されることを考えると、サーバーと緊密に結合されていてもHATEOASに違反することはありません。それは「オンデマンドのコード」です。

Google、Twitter、Facebookはすべて、サードパーティに公開されているものとは異なり、アプリに特定のAPIを使用しています(Twitterは最近WebアプリにパブリックAPIを使用するようになりましたが、元々はそうではありませんでした)。グーグルは、サードパーティを壊すことなく実験して重大な変更を加えることができるため、G+をパブリックAPIに移行する計画はないと述べた。

于 2012-01-09T22:29:19.623 に答える
3

それは優れた哲学的な質問です。私の一般的な反応は、いくつかの結合が予想されるべきであるということです。

もっと説明させてください。人間が使用できる方法でモデルを公開するだけの完全に汎用的なアプリケーションインターフェイスを考えることは可能ですが、真に小さなドメインを除いて、そのようなソフトウェアを作成することは実際には非常に困難です(たとえば、有限の単純な列挙からすべてのフィールドが選択されるDBにデータを入力します)。アプリケーションの場合そのモデルに適合しない場合は、アプリに固有の何かをそこに含める必要があります。これを「一般的な」方法で行うと、一般的なクライアントアプリの機能に関する複雑な説明がダウンロードされ、その説明自体がプログラミング言語のように感じられるようになります。これで、(おそらく不適切に設計された)新しいドメイン固有言語が混在していることを除いて、正方形に戻ります。あなたは追いかけっこをして、完全に一般的になることは価値がないことを受け入れるほうがよいでしょう。

しかし、それは、公開するリソース、それらの操作に適用される動詞、およびユーザーのソフトウェアがそれらのリソースをどのように検出するかについて慎重に考える必要がないということではありません。RESTとHATEOASに続いて、多くのことが役立ちます(そして、アプリケーションの基礎となる抽象モデルが何であるかについて明確なアイデアを持っている場合に役立ちます。自然な方法でそれを公開することを目指す必要があります)。

于 2012-01-09T22:37:41.857 に答える