REST スタイルの Web サービス要求

Flash Player 9 以降、Adobe AIR 1.0 以降

REST スタイルの Web サービスでは、HTTP メソッド(動詞)を使用して基本操作を指定し、URL 変数で操作の詳細を指定します。例えば、アイテムのデータを取得する要求では、GET 動詞と URL 変数を使用して、メソッド名とアイテム ID を指定することができます。つまり、URL ストリングは次のようになります。

http://service.example.com/?method=getItem&id=d3452

ActionScript で REST スタイルの Web サービスにアクセスするには、URLRequest、URLVariables および URLLoader の各クラスを使用できます。AIR アプリケーション内の Javascript コードでは、XMLHttpRequest も使用できます。

REST スタイルの Web サービス呼び出しを ActionScript でプログラミングする場合、通常は次の手順を実行します。

  1. URLRequest オブジェクトを作成します。

  2. URLRequest で、サービス URL および HTTP メソッド(動詞)を設定します。

  3. URLVariables オブジェクトを作成します。

  4. サービス呼び出しのパラメーターを URLVariables オブジェクトの動的プロパティとして設定します。

  5. URLRequest オブジェクトの data プロパティに URLVariables オブジェクトを割り当てます。

  6. URLLoader オブジェクトを使用して、サービスに呼び出しを送信します。

  7. URLLoader から送出される complete イベントを処理します。このイベントは、サービス呼び出しが完了したことを示します。URLLoader オブジェクトから送出される可能性のあるエラーイベントを監視することもお勧めします。

例えば、呼び出しパラメーターを送信元にエコーバックするテストメソッドを公開している Web サービスについて検討してみましょう。次の ActionScript コードは、サービスの呼び出しに使用できます。

import flash.events.Event; 
import flash.events.ErrorEvent; 
import flash.events.IOErrorEvent; 
import flash.events.SecurityErrorEvent; 
import flash.net.URLLoader; 
import flash.net.URLRequest; 
import flash.net.URLRequestMethod; 
import flash.net.URLVariables; 
 
private var requestor:URLLoader = new URLLoader(); 
public function restServiceCall():void 
{ 
    //Create the HTTP request object 
    var request:URLRequest = new URLRequest( "http://service.example.com/" ); 
    request.method = URLRequestMethod.GET; 
     
    //Add the URL variables 
    var variables:URLVariables = new URLVariables(); 
    variables.method = "test.echo"; 
    variables.api_key = "123456ABC"; 
    variables.message = "Able was I, ere I saw Elba.";             
    request.data = variables; 
     
    //Initiate the transaction 
    requestor = new URLLoader(); 
    requestor.addEventListener( Event.COMPLETE, httpRequestComplete ); 
    requestor.addEventListener( IOErrorEvent.IOERROR, httpRequestError ); 
    requestor.addEventListener( SecurityErrorEvent.SECURITY_ERROR, httpRequestError ); 
    requestor.load( request ); 
} 
private function httpRequestComplete( event:Event ):void 
{ 
    trace( event.target.data );     
} 
 
private function httpRequestError( error:ErrorEvent ):void{ 
    trace( "An error occured: " + error.message );     
}

AIR アプリケーション内の Javascript では、XMLHttpRequest オブジェクトを使用して同様の要求を実行できます。

<html> 
<head><title>RESTful web service request</title> 
<script type="text/javascript"> 
 
function makeRequest() 
{ 
    var requestDisplay = document.getElementById( "request" ); 
    var resultDisplay  = document.getElementById( "result" ); 
     
    //Create a conveninece object to hold the call properties 
    var request = {}; 
    request.URL = "http://service.example.com/"; 
    request.method = "test.echo"; 
    request.HTTPmethod = "GET"; 
    request.parameters = {}; 
    request.parameters.api_key = "ABCDEF123"; 
    request.parameters.message = "Able was I ere I saw Elba."; 
    var requestURL = makeURL( request ); 
    xmlhttp = new XMLHttpRequest(); 
    xmlhttp.open( request.HTTPmethod, requestURL, true); 
    xmlhttp.onreadystatechange = function() { 
        if (xmlhttp.readyState == 4) { 
            resultDisplay.innerHTML = xmlhttp.responseText; 
        } 
    } 
    xmlhttp.send(null); 
     
    requestDisplay.innerHTML = requestURL; 
} 
//Convert the request object into a properly formatted URL 
function makeURL( request ) 
{ 
    var url = request.URL + "?method=" + escape( request.method ); 
    for( var property in request.parameters ) 
    { 
        url += "&" + property + "=" + escape( request.parameters[property] ); 
    } 
     
    return url; 
} 
</script> 
</head> 
<body onload="makeRequest()"> 
<h1>Request:</h1> 
<div id="request"></div> 
<h1>Result:</h1> 
<div id="result"></div> 
</body> 
</html>