Richieste servizi Web in stile REST

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

I servizi Web in stile REST utilizzano verbi del metodo HTTP per definire le azioni di base e le variabili URL per specificare i dettagli azione. Ad esempio, una richiesta per ottenere dati da un elemento potrebbe utilizzare il verbo GET e le variabili URL per specificare un nome metodo e un ID elemento. L'aspetto della stringa risultante è simile al seguente:

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

Per accedere al servizio Web in stile REST con ActionScript, potete utilizzare le classi URLRequest, URLVariables e URLLoader. Nel codice Javascript all'interno di un'applicazione AIR, potete anche utilizzare un XMLHttpRequest.

La programmazione di una chiamata al servizio Web in stile REST richiede in genere i passaggi seguenti:

  1. Create un oggetto URLRequest.

  2. Impostate l'URL del servizio e il verbo del metodo HTTP nell'oggetto richiesta.

  3. Create un oggetto URLVariables.

  4. Impostate i parametri della chiamata al servizio come proprietà dinamiche dell'oggetto variables.

  5. Assegnate l'oggetto variables alla proprietà data dell'oggetto request.

  6. Inviate la chiamata al servizio con un oggetto URLLoader.

  7. Gestite l'evento complete inviato da URLLoader che indica che la chiamata al servizio è terminata. È anche opportuno intercettare i diversi eventi errore che possono essere inviati da un oggetto URLLoader.

Ad esempio, considerate un servizio Web che espone un metodo test che riflette i parametri della chiamata al richiedente. Il codice ActionScript seguente può essere utilizzato per chiamare il servizio:

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 );     
}

In Javascript all'interno di un'applicazione AIR, potete effettuare la stessa richiesta utilizzando l'oggetto 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>