REST-webserviceaanvragen

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

REST-webservices gebruiken werkwoorden van een HTTP-methode om de basishandeling en URL-variabelen aan te geven en zo de details van de handeling te specificeren. Zo kan een aanvraag om gegevens op te halen voor een item gebruikmaken van het werkwoord GET en URL-variabelen om de naam van een methode en een item-id te specificeren. De resulterende URL-tekenreeks ziet er als volgt uit:

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

Als u toegang wilt tot een REST-webservice met ActionScript, kunt u de klassen URLRequest, URLVariables en URLLoader gebruiken. In Javascript-code binnen een AIR-toepassing kunt u ook een XMLHttpRequest gebruiken.

Het programmeren van een REST-webserviceaanroep in ActionScript bestaat gewoonlijk uit de volgende stappen:

  1. Maak een URLRequest-object.

  2. Stel de service-URL en het werkwoord van de HTTP-methode in op het aanvraagobject.

  3. Maak een URLVariables-object.

  4. Stel de parameters van de serviceaanroep in als dynamische eigenschappen van het Variables-object.

  5. Wijs het Variables-object toe aan de gegevenseigenschap van het aanvraagobject.

  6. Verzend de aanroep naar de service met een URLLoader-object.

  7. Verwerk de complete -gebeurtenis die wordt verzonden door de URLLoader die aangeeft dat de serviceaanroep is voltooid. Het is ook nuttig om te luisteren naar de verschillende foutgebeurtenissen die kunnen worden verzonden door een URLLoader-object.

Neem bijvoorbeeld een webservice die een testmethode beschikbaar maakt waarmee de parameters van de aanroep worden teruggekaatst naar de aanvrager. De service kan worden aangeroepen door de volgende ActionScript-code:

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 binnen een AIR-toepassing kunt u dezelfde aanvraag uitvoeren met het XMLHttpRequest-object:

<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>