Java で実装された Restful アーキテクチャを使用してプロジェクトを開始しています (新しい JAX-RS 標準を使用)
Flex アプリケーションで GUI を開発する予定です。HTTPService コンポーネント (応答エラー コード、ヘッダー アクセスなど) を使用して、この実装に関するいくつかの問題を既に発見しました。
皆さんは、同様のプロジェクトで何らかの経験を持っています。それは実現可能ですか?
Java で実装された Restful アーキテクチャを使用してプロジェクトを開始しています (新しい JAX-RS 標準を使用)
Flex アプリケーションで GUI を開発する予定です。HTTPService コンポーネント (応答エラー コード、ヘッダー アクセスなど) を使用して、この実装に関するいくつかの問題を既に発見しました。
皆さんは、同様のプロジェクトで何らかの経験を持っています。それは実現可能ですか?
ここでの問題は、この問題に関する Web での議論の多くが 1 年以上前のものであることです。私は現在、これと同じ調査に取り組んでおり、これが今日学んだことです。
Jorge Rasilloと Mike Burr による2008 年 8 月の IBM Developer Works の記事では、Flex フロントエンド/RESTful バックエンド アプリを実行する方法を示しています (PHP と Groovy の例)。素敵な記事。とにかく、ここに持ち帰りがあります:
// Flex doesn't know how to generate an HTTP DELETE.
// Fortunately, sMash/Zero will interpret an HTTP POST with
// an X-Method-Override: DELETE header as a DELETE.
deleteTodoHS.headers['X-Method-Override'] = 'DELETE';
ここで何が起こっているのですか?IBM Web サーバーは「POST with DELETE」をインターセプトし、DELETE として解釈します。
そこで、さらに掘り下げて、この投稿と Don Box (元の SOAP 担当者の 1 人) とのディスカッションを見つけました。一部のブラウザーなどは PUT と DELETE をサポートしていないため、これは明らかに標準的な動作であり、しばらく回避されている回避策です。ここにスニペットがありますが、さらに多くの議論があります。
「私が GData クライアントを構築していた場合、X-HTTP-Method-Override がより多くのケース/展開で機能することを考えると、なぜわざわざ DELETE および PUT メソッドを使用するのか疑問に思っています。」
ここからの私の見解は、Web 側がこの X-Method-Override ヘッダーをサポートしている場合、このアプローチを使用できるということです。Don Box のコメントは、かなりよくサポートされていると思いますが、まだ確認していません。
HTTP 応答ヘッダーを読み取ることができるという点で、別の問題が発生します。繰り返しますが、2007 年の Nathan de Vries によるブログ投稿から、これが議論されていることがわかります。彼は自身のコメントでそのブログ投稿と議論をフォローアップしました。
「Web フロントでの唯一の変更点は、Flash Player の新しいバージョン (確かに Flex 3 ベータ版で提供されているもの) が HTTPStatusEvent のインスタンスで responseHeaders プロパティをサポートするようになったことです。」
それが今は問題ではないことを意味することを願っています。
多くの人が指摘しているように、これHTTPService
は少し単純化されており、やりたいことをすべて実行するわけではありません。ただし、HTTPService
、、flash.net.*
および. これらを使用して、ほとんどの HTTP リクエストを組み立てることができます。URLLoader
URLRequest
URLRequestHeader
GET と POST 以外のメソッドのサポートに関して言えば、ほとんどの問題は、一部のブラウザー (Safari など) がこれらをサポートしていないことにあり、Flash Player はネットワークのすべてをブラウザーに依存しています。
純粋な RESTful クライアントとして機能する Flex の機能には明らかな欠点があります。
以下のコメントはこのブログからのものです。
問題は、HTTPService クラスにいくつかの大きな制限があることです。
- デフォルトでは、GET および POST メソッドのみがサポートされています (FDS を使用して useProxy 属性を true に設定しない限り)。
- リクエスト ヘッダーを設定できず、レスポンス ヘッダーにアクセスできません。したがって、エラーが発生した場合、応答本文にアクセスできません。
- HTTPService が 200 以外のステータス コードを取得すると、エラーと見なされます。(イベント201、うわっ!!)。FaultEvent は、ステータス コードに関する情報を応答本文に提供しません。Flex クライアントは、何が問題なのかわかりません。
Matt Raibleも、REST と Rails、Grails、GWT、Flex に関する優れたプレゼンテーションを行いました。RESTからリンクされた優れた参考文献がいくつかあります。
それが実現可能かどうかは、プロキシなどによってどれだけ回避できるかによって異なります。
私は、REST を完全にサポートする HTTPService コンポーネントのオープン ソースの代替品に取り組んできました。興味がある場合は、ベータ版 (ソース コードおよび/またはコンパイルされた Flex 共有ランタイム ライブラリ) と手順を以下で見つけることができます。
簡単に言えば、はい、Flex で RESTful を実行できます。Flash プレーヤーの制限 (最新バージョンの方が優れています) と、含まれているブラウザーの HTTP スタックの制限を回避する必要があります。
Rails 風の ?_method= アプローチを使用して、基本的な HTTP 要求ヘッダーと PUT および DELETE の欠如を解決した後、Flex で RESTful クライアント開発を 1 年以上行っています。おそらく粘着性がありますが、それは仕事を成し遂げます.
http://verveguy.blogspot.com/2008/07/truth-about-flex-httpservice.htmlの古いブログ投稿で、ヘッダーの痛みの一部を指摘しました。
REST の Flex サポートはせいぜい弱いです。プロトタイプの構築に多くの時間を費やしたので、ほとんどの問題を知っています。前述のように、すぐに使用できるのは GET と POST のみです。一見すると、LiveCycle Data Services または Blaze でプロキシ設定を使用して、PUT および DELETE のサポートを取得できるように見えます。しかし、それは偽物です。Flex アプリからのリクエストは POST のままです。プロキシは、サーバー側でそれを PUT または DELETE に変換して、サーバー側のコードをだまします。他にも問題があります。これが Adobe が思いついた最高のものであると信じていると聞いています。私の評価の後、私たちは別の方向に進むことにしました。
RestfulXは、Flex に関する REST の問題のほとんどまたはすべてを解決しました。Rails/GAE/Merb/CouchDB/AIR/WebKit をサポートしており、Java 実装に簡単に接続できると確信しています。
Dima は AS3HTTPClient ライブラリも統合しました。
見てみな!
私は現在、Flex と JavaScript および Java サーブレット間の REST 呼び出しに大きく依存するアプリケーションに取り組んでいます。エラー時に返される <status id="XXX" name="YYYYYY"> ブロックの規則を確立し、エラー ID を HTTP エラー コードに大まかにマッピングすることで、応答エラー コードの問題を回避します。
Java サーブレットを HTTP プロキシとして使用することで、クロスサイト スクリプティングの制限を回避します。プロキシへの呼び出し (Flex コンテンツを含む残りのコンテンツを提供するのと同じサーバー上で実行される) は、要求を他のサーバーに送信し、応答を元の呼び出し元に送り返します。
「 FlexibleRails」という本が役立つかもしれません。これは、FlexをRESTfulクライアントとして使用する方法に関する優れたリソースです。RailsフレームワークでのFlexの使用に焦点を当てていますが、この概念はすべてのRESTfulフレームワークに適用できると思います。私はこの本を使用して、RESTでFlexを使用する方法をすばやく理解しました。
私が過去にこれを管理した方法は、リモート Web サービス呼び出しを処理し、RTU JSON をクライアントに返す PHP プロキシを利用することでした..
REST は何よりもイデオロギーです。REST プレゼンテーションに行くと、クーレイド ディスペンサーが用意されています。
Flex アプリの場合、BlazeDS および AMF データ マーシャリングと組み合わせてスタックをローリングすると、より便利でパフォーマンスが向上します。
新しいフレックス 4 が答えかもしれませんhttp://labs.adobe.com/technologies/flex4sdk/
Franklin Covey の大きなフレックス プロジェクトに取り組んでいます。REST サービスを使用します。これをサポートするために。XMLHttpRequest ラッパーを作成しました。一部のイベント ハンドラーで外部インターフェイスを使用する。ライブラリをオープンソース化しました。https://github.com/FranklinCovey/AS3-XMLHttpRequestで確認できます。
実際、すでにRest-Style FrameworkでFlexを使用していました。mbrevort が既に述べたように、PUT および DELETE メソッドを直接使用することはできません。代わりに、POST を介して PUT を実行し、DELETE の場合は、?action=delete のような URL パラメーターを使用してリソースで GET を使用しています。
これは 100% Rest スタイルではないため、これが JSR 311 実装で機能するかどうかはわかりません。PUT および DELETE の制限を回避するには、サーバー側にある程度の柔軟性が必要です。
エラー処理に関しては、エラーサービスを実装しました。サーバー側のエラーの場合、Flex アプリケーションはこのエラー サービスにクエリを実行して、実際のエラー メッセージを取得できます。これは、HTTP リターン コードを静的メッセージにマッピングするよりもはるかに柔軟です。
しかし、XML ベースの REST サービスと連携する Flex の ECMA スクリプティングのおかげで、非常に簡単です。