Запросы веб-служб REST

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

Веб-службы REST используют команды метода HTTP для назначения основного действия и переменные URL для указания сведений о действии. Например, в запросе для получения данных элемента может использоваться команда GET и переменные URL для указания имени метода и идентификатора элемента. Получающаяся в результате строка URL может иметь следующий вид:

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

Для доступа к веб-службе REST с помощью кода ActionScript можно использовать классы URLRequest, URLVariables и URLLoader. В коде Javascript в приложении AIR можно также использовать класс XMLHttpRequest.

Программирование вызова веб-службы REST на языке ActionScript обычно включает следующие действия:

  1. Создание объекта URLRequest.

  2. Задание команд методов URL и HTTP службы в объекте запроса.

  3. Создание объекта URLVariables.

  4. Задание параметров вызова службы в качестве динамических свойств объекта переменных.

  5. Назначение объекта переменных свойству данных объекта запроса.

  6. Отправка вызова в службу с помощью объекта URLLoader.

  7. Обработка события complete , отправленного объектом URLLoader и обозначающего завершение вызова службы. Также мудрым решением является прослушивание различных событий ошибок, которые могут быть отправлены объектом URLLoader.

Например, примите во внимание веб-службу, которая распространяет метод тестирования, возвращающий те же параметры вызова обратно отправителю запроса. Следующий код 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 );     
}

В сценарии Javascript в приложении AIR этот запрос можно выполнить с помощью объекта 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>