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 でプログラミングする場合、通常は次の手順を実行します。
-
URLRequest オブジェクトを作成します。
-
URLRequest で、サービス URL および HTTP メソッド(動詞)を設定します。
-
URLVariables オブジェクトを作成します。
-
サービス呼び出しのパラメーターを URLVariables オブジェクトの動的プロパティとして設定します。
-
URLRequest オブジェクトの data プロパティに URLVariables オブジェクトを割り当てます。
-
URLLoader オブジェクトを使用して、サービスに呼び出しを送信します。
-
URLLoader から送出される
complete
イベントを処理します。このイベントは、サービス呼び出しが完了したことを示します。URLLoader オブジェクトから送出される可能性のあるエラーイベントを監視することもお勧めします。
例えば、呼び出しパラメーターを送信元にエコーバックするテストメソッドを公開している Web サービスについて検討してみましょう。次の ActionScript コードは、サービスの呼び出しに使用できます。
function restServiceCall()
{
//Create the HTTP request object
var request = new air.URLRequest( "http://service.example.com/" );
request.method = air.URLRequestMethod.GET;
//Add the URL variables
var variables = new air.URLVariables();
variables.method = "test.echo";
variables.api_key = "123456ABC";
variables.message = "Able was I, ere I saw Elba.";
request.data = variables;
//Initiate the transaction
window.requestor = new air.URLLoader();
requestor.addEventListener( air.Event.COMPLETE, httpRequestComplete );
requestor.addEventListener( air.IOErrorEvent.IOERROR, httpRequestError );
requestor.addEventListener( air.SecurityErrorEvent.SECURITY_ERROR, httpRequestError );
requestor.load( request );
}
function httpRequestComplete( event )
{
air.trace( event.target.data );
}
function httpRequestError( error ){
air.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>