Flex を使用して REST クライアントを作成することは可能ですか?
-
03-07-2019 - |
質問
Java で実装された Restful アーキテクチャを使用してプロジェクトを開始しています (新しい JAX-RS 標準を使用)
Flex アプリケーションを使用して GUI を開発する予定です。HTTPService コンポーネントを使用したこの実装には、いくつかの問題 (応答エラー コード、ヘッダー アクセスなど) がすでに見つかりました。
皆さんの中には、同様のプロジェクトに携わった経験がある人もいるでしょう。実現可能でしょうか?
解決
ここでの問題は、この問題に関するウェブ上の議論の多くが 1 年以上前のものであることです。私は現在これと同じ研究を行っており、これが今日学んだことです。
これ 2008 年 8 月の IBM Developer Works の記事 Jorge Rasillo と Mike Burr による、Flex フロントエンド / RESTful バックエンド アプリ (PHP と Groovy の例) を実行する方法を示しています。素敵な記事です。とにかく、ここで要点は次のとおりです。
- PHP/Groovy コード 使用し、期待しています 挿入と削除。
- ただし、Flex コードは POST を使用する必要がありますが、HTTP ヘッダーの X-Method-Override を DELETE に設定します (PUT でも同じことができると思います)。
- これは、 ない 上で説明したプロキシ方法。
// 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 応答ヘッダーを読み取ることができるかどうかに関して、別の問題が発生します。またしても、から Nathan de Vries による 2007 年のブログ投稿, 、これが議論されているのがわかります。彼はそのブログ投稿とディスカッションを彼自身のコメントでフォローアップしました。
「Web 面での唯一の変更は、Flash Player の新しいバージョン (確かに Flex 3 ベータ版で提供されるもの) が HTTPStatusEvent のインスタンスの responseHeaders プロパティをサポートするようになったことです。」
それが今のところ問題ではないことを意味していることを願っています。
他のヒント
多くの人が指摘しているように、HTTPService
は少し単純化されており、あなたがやりたいことすべてをするわけではありません。ただし、flash.net.*
は、URLLoader
、URLRequest
、URLRequestHeader
などの<=>クラスの上にある単なる砂糖です。これらを使用して、ほとんどのHTTPリクエストを組み立てることができます。
GETおよびPOST以外のメソッドのサポートに関しては、問題のほとんどは一部のブラウザー(Safariなど)がこれらをサポートしておらず、Flash Playerはすべてのネットワーキングをブラウザーに依存していることにあります。
純粋なRESTfulクライアントとして機能するFlexの機能には明確な欠点があります。
以下のコメントは、このブログ:
問題はHTTPServiceクラスにある いくつかの主要な制限:
- デフォルトでは、GETメソッドとPOSTメソッドのみがサポートされています(ただし、 FDSを使用し、useProxy属性を true)
- 要求ヘッダーを設定できず、応答にアクセスできません ヘッダー。したがって、私はすることができません ケースの応答本文にアクセスします エラーの
- HTTPServiceはステータスコードを200以外の値で取得します。 エラー。 (イベント201、痛い!!)。の FaultEventは<!>#8217; t情報を提供しません ステータスコードについての応答 体。 Flexクライアントには 何がうまくいかなかったかを考えてください。
Matt Raible も Rails、Grails、GWT、およびFlexを使用したRESTの優れたプレゼンテーション。適切な参照がリンクされています。
それが実現可能かどうかは、プロキシ処理などで回避しようとする度合いに依存します。
RESTを完全にサポートするHTTPServiceコンポーネントのオープンソースの置換に取り組んでいます。興味がある場合は、ベータ版(ソースコードおよび/またはコンパイル済みのFlex共有ランタイムライブラリ)および手順をここで見つけることができます。
簡単な答えはイエスです。FlexでRESTfulを実行できます。 Flashプレーヤーの制限(最新バージョンでより良い)と、それを含むブラウザーのHTTPスタックの制限を回避する必要があります。
基本的なHTTPリクエストヘッダーとrails-esque?_method =アプローチによるPUTとDELETEの不足を解決してから1年以上、FlexでRESTfulクライアント開発を行ってきました。恐ろしいかもしれませんが、仕事は完了です。
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に変換して、サーバー側のコードをだます。他にも問題があります。これがアドビが思い付くことができる最高のものであると信じていると聞いています。私の評価の後、別の方向に進むことにしました。
現在、FlexとJavaScriptおよびJavaサーブレットの間のREST呼び出しに大きく依存しているアプリケーションで作業しています。 <!> lt; status id = <!> quot; XXX <!> quot;の規則を確立することにより、応答エラーコードの問題を回避します。 name = <!> quot; YYYYYY <!> quot; <!> gt;エラー時に返されるブロック。エラーIDはHTTPエラーコードにほぼ対応しています。
JavaサーブレットをHTTPプロキシとして使用することで、クロスサイトスクリプティングの制限を回避します。プロキシへの呼び出し(Flexコンテンツを含むコンテンツの残りを提供する同じサーバーで実行され、他のサーバーに要求を送信し、元の呼び出し元に応答を送り返します。
RestfulX はほとんど/すべてを解決しましたFlexのRESTの問題。 Rails / GAE / Merb / CouchDB / AIR / WebKitをサポートしており、Java実装に簡単に接続できると確信しています。
DimaはAS3HTTPClientライブラリもそれに統合しました。
チェックしてください!
実際には、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スクリプトのおかげで非常に簡単です。
RESTは、何よりもイデオロギーです。 RESTプレゼンテーションに移動すると、coolaideディスペンサーがあります。
Flexアプリの場合、BlazeDSおよびAMFデータマーシャリングと組み合わせてスタックをローリングすると、より便利でパフォーマンスが向上します。
過去にこれを管理してきた方法は、リモートWebサービス呼び出しを処理し、クライアントにRTU JSONを返すPHPプロキシを利用することです。
新しいflex 4が答えになるかもしれません http://labs.adobe.com/technologies / flex4sdk /
本フレキシブルレールは役立つかもしれません-使用方法に関する優れたリソースですRESTfulクライアントとしてのFlex。 RailsフレームワークでFlexを使用することに焦点を当てていますが、この概念はすべてのRESTfulフレームワークに適用されると思います。この本を使用して、RESTでFlexを使用する方法をすばやく理解しました。
私はフランクリン・コヴィーの大きなフレックスプロジェクトに取り組んでいます。 RESTサービスを使用します。これをサポートするため。 XMLHttpRequestラッパーを作成しました。一部のイベントハンドラーで外部インターフェイスを使用する。ライブラリをオープンソース化しました。 https://github.com/FranklinCovey/AS3-XMLHttpRequest で確認できます