REST-webbtjänstbegäran

Flash Player 9 och senare, Adobe AIR 1.0 och senare

REST-webbtjänster använder HTTP-metoder för att ange grundläggande åtgärder och URL-variabler för information om åtgärderna. En begäran för att hämta data för ett objekt kan till exempel använda GET-verbet och URL-variabler för att ange ett metodnamn och ett objekt-ID. URL-strängen kan se ut så här:

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

För att få åtkomst till en REST-webbtjänst med ActionScript kan du använda klasserna URLRequest, URLVariables och URLLoader. I Javascript-koden i ett AIR-program kan du även använda en XMLHttpRequest-begäran.

Ett vanligt upplägg för programmeringen av ett REST-webbtjänstanrop i ActionScript kan se ut enligt följande:

  1. Skapa ett URLRequest-objekt.

  2. Ange tjänstens URL och HTTP-metoden för det begärda objektet.

  3. Skapa ett URLVariables-objekt.

  4. Ange parametrarna för anropet av tjänsten som dynamiska egenskaper för variabelobjektet.

  5. Tilldela variabelobjektet till dataegenskapen för det begärda objektet.

  6. Skicka anropet till tjänsten med ett URLLoader-objekt.

  7. Hantera händelsen complete som skickas av URLLoader och anger att anropet av tjänsten har slutförts. Det kan också vara bra att lyssna efter olika felhändelser som kan skickas av URLLoader-objektet.

Ta som exempel en webbtjänst som exponerar en testmetod som skickar anropsparametrarna tillbaka till begäran som ett eko. Följande ActionScript-kod kan användas för att anropa tjänsten:

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

I Javascript inom ett AIR-program kan du göra samma begäran med hjälp av XMLHttpRequest-objektet:

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