2010-12-19 5 views
2

FlexアプリケーションをいくつかのREST APIを使用するように変換しています。Flexで軽量REST呼び出しを行うことは可能ですか?

mx.rpc.http.HTTPServiceクラスをコードに追加すると、SWFバイナリ出力は175KBから260KBに増加しました。これは容認できないヒットです。

Flexアプリケーションから軽量REST呼び出しを実行する方法はありますか?そこからの呼び出しを行うために外部インターフェイスJSを使用するほうがよいですか?

+0

デバッグビルドまたはリリースビルドのバイナリ出力についてお話ししていますか?私の経験では、リリースビルドははるかに最適化されています。デバッグ出力を比較している場合は、リリースビルドをエクスポートして、問題を解決する前に実際に問題があることを確認します。 – JeffryHouser

+0

また、SWFサイズを最適化する場合は、ランタイム共有ライブラリの使用方法をご確認ください。 –

+0

@flextras - サイズはリリースビルドを反映して更新されます。 @PeZ - RSLはこの場合私たちを助けません。これは単一のSWFシナリオです。 –

答えて

6

flash.net.URLLoaderはランタイムに組み込まれているため、ファイルサイズの増加はありません。以前はJSONクライアントとして使用していましたので、問題はありません。

以下は非常に簡単な例です。制限については、HTTP_STATUSおよびHTTP_RESPONSE_STATUSのドキュメントを参照してください。

var request: URLRequest = new URLRequest("http://tempuri.org/service/json"); 
request.method = "POST"; 
request.contentType = "application/json"; 
request.data = JSON.encode(jsonObject); 

var loader : URLLoader = new URLLoader(request); 

// Only supported by some browsers 
loader.addEventHandler(HTTPStatusEvent.HTTP_STATUS, statusCodeReceived); 

// AIR only 
loader.addEventHandler(HTTPStatusEvent.HTTP_RESPONSE_STATUS, statusCodeReceived); 

loader.addEventHandler(Event.COMPLETE, function(ev:Event):void 
{ 
    var responseJson : String = request.data as String; 

    var responseJsonObject : String = JSON.decode(responseJson); 
}); 

loader.addEventHandler(SecurityErrorEvent.SECURITY_ERROR, errorHandler); 
loader.addEventHandler(IOErrorEvent.IO_ERROR, errorHandler); 
+0

素敵!簡単な使用法のコードサンプルは素晴らしいでしょう:) –

+0

私が覚えているところでは、公式の文書には、コードを不必要に複雑にするので、 –

2

私はいつもこれまでの良好なアプローチは、ブラウザのJavaScriptのHTTP API、XmlHttpRequestの小規模インターフェイスを作成するだろうと思ってきました。私はそれを試したことはありませんが、私はそれを調べました、そして、それはかなり簡単なように見えました。

これは、Flash Playerのセキュリティ制限を回避し、HTTPサポートをひどく損なうという利点が追加されます。

+1

IMO、これは悪いアプローチです。さらに、AJAX/XmlHttpRequestは、Flash PlayerのネットAPIと同じかそれ以上の制限があります(JSからのアクセスを許可する必要があります)。 –

+0

私は、XHRにはFlash Playerより多くの制限があるという意見に同意します。 FPはPUTまたはDELETEを使用できません。要求ヘッダー "Authorization"を使用できず、ステータスコードが200以外の場合(201も)応答本体にアクセスできません。 –

+0

これは新しいHTTP/2機能の使用を有効にする良い方法だと思います。 – GxFlint

関連する問題