REST-Webdienstanforderungen

Flash Player 9 und höher, Adobe AIR 1.0 und höher

In REST-Webdienstanforderungen werden HTTP-Methodenverben verwendet, um die grundlegende Aktion festzulegen, und URL-Variablen, um die Aktionsdetails zu definieren. In einer Anforderung zum Abrufen von Daten für ein Element könnten beispielsweise das GET-Verb und URL-Variablen verwendet werden, um einen Methodennamen und die Element-ID anzugeben. Der resultierende URL-String könnte ungefähr folgendermaßen aussehen:

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

Zum Zugriff auf REST-Webdienste mit ActionScript können Sie die URLRequest-, URLVariables- und URLLoader-Klassen verwenden. In JavaScript-Code innerhalb einer AIR-Anwendung kann auch eine XMLHttpRequest-Anforderung verwendet werden.

Zum Programmieren des Aufrufs eines REST-Webdienstes in ActionScript sind normalerweise die folgenden Schritte erforderlich:

  1. Erstellen Sie ein URLRequest-Objekt.

  2. Stellen Sie die Dienst-URL und das HTTP-Methodenverb für das Anforderungsobjekt ein.

  3. Erstellen Sie ein URLVariables-Objekt.

  4. Stellen Sie die Parameter für den Dienstaufruf als dynamische Eigenschaften des Variablenobjekts ein.

  5. Weisen Sie das Variablenobjekt der Dateneigenschaft des Anforderungsobjekts zu.

  6. Senden Sie den Aufruf mit einem URLLoader-Objekt an den Dienst.

  7. Verarbeiten Sie das von URLLoader ausgelöste complete -Ereignis, das darauf hinweist, dass der Dienstaufruf abgeschlossen ist. Es empfiehlt sich auch, auf die verschiedenen Fehlerereignisse zu warten, die von einem URLLoader-Objekt ausgelöst werden können.

Angenommen, ein Webdienst stellt eine Testmethode bereit, die die Aufrufparameter per Echo an das aufrufende Objekt zurückgibt. Der folgende ActionScript-Code könnte zum Aufruf des Dienstes verwendet werden:

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 innerhalb einer AIR-Anwendung kann dieselbe Anforderung mit dem XMLHttpRequest-Objekt durchgeführt werden:

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