Requêtes de service Web de type REST

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Les services Web de type REST font appel aux verbes d’une méthode HTTP pour désigner l’action de base et aux variables URL pour spécifier les détails correspondants. Ainsi, une requête visant à obtenir les données associées à un élément peut utiliser le verbe GET et les variables URL pour spécifier un nom de méthode et un ID d’élément. La chaîne d’URL qui en résulte est similaire au code ci-dessous :

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

Pour accéder à un service Web de type REST en ActionScript, vous disposez des classes URLRequest, URLVariables et URLLoader. Si le code JavaScript est intégré à une application AIR, vous pouvez également faire appel à une requête XMLHttpRequest.

La programmation d’un appel au service Web de type REST en ActionScript implique généralement la procédure suivante :

  1. Créez un objet URLRequest.

  2. Associez l’URL du service et le verbe de la méthode HTTP à l’objet de la requête.

  3. Créez un objet URLVariables.

  4. Définissez les paramètres de l’appel au service sous forme de propriétés dynamiques de l’objet variables.

  5. Affectez l’objet variables à la propriété data de l’objet de la requête.

  6. Envoyez l’appel au service à l’aide d’un objet URLLoader.

  7. Gérez l’événement complete distribué par l’objet URLLoader qui indique que l’appel au service est terminé. Il est également recommandé d’écouter les divers événements d’erreur susceptibles d’être distribués par un objet URLLoader.

Considérons par exemple un service Web exposant une méthode test qui renvoie les paramètres de l’appel au demandeur. Le code ActionScript suivant pourrait permettre d’appeler le service :

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

Si le code JavaScript est intégré à une application AIR, vous pouvez effectuer la même requête par le biais de l’objet 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>