Peticiones de servicios web de estilo REST

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

Los servicios web de estilo REST utilizan métodos HTTP para designar la acción básica y variables URL para especificar los detalles de la acción. Por ejemplo, una petición para obtener datos de un elemento podría utilizar GET y variables URL para especificar el nombre del método y el ID del elemento. La cadena URL resultante podría ser algo así:

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

Para acceder a un servicio web de tipo REST con ActionScript, puede utilizar las clases URLRequest, URLVariables y URLLoader. El código JavaScript dentro de una aplicación de AIR, también puede utilizar una petición XMLHttpRequest.

La programación de llamadas a servicios web de tipo REST desde ActionScript suele implicar los pasos siguientes:

  1. Cree un objeto URLRequest.

  2. Establezca el método HTTP y la URL del servicio en el objeto solicitado.

  3. Cree un objeto URLVariables.

  4. Establezca los parámetros de llamada al servicio como propiedades dinámicas del objeto variables.

  5. Asigne el objeto variables a la propiedad data del objeto solicitado.

  6. Envíe la llamada al servicio con un objeto URLLoader.

  7. Gestione el evento complete distribuido por URLLoader que indica que la llamada al servicio ha finalizado. Nunca está de más detectar diversos eventos de error que puedan ser distribuidos por un objeto URLLoader.

Por ejemplo, considere un servicio web que exponga un método de prueba que devuelva los parámetros de la llamada al solicitante. El siguiente código ActionScript se puede utilizar para llamar al servicio:

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

En JavaScript, dentro de una aplicación de AIR, puede hacer la misma petición con el objeto 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>