Serviços web estilo REST utilizam verbos do método HTTP para atribuir a ação básica e as variáveis de URL para especificar detalhes de ação. Por exemplo, uma solicitação para obter dados de um item pode utilizar o verbo GET e variáveis de URL para especificar um nome de método e ID de item. A sequência de caracteres do URL resultante pode ser similar a:
http://service.example.com/?method=getItem&id=d3452
Para acessar um serviço web estilo REST com o ActionScript, você pode utilizar as classes URLRequest, URLVariables e URLLoader classes. No código Javascript de um aplicativo do AIR, você também pode utilizar um XMLHttpRequest.
Geralmente, a programação de uma chamada de serviço web estilo REST no ActionScript envolve as etapas a seguir:
-
Crie um objeto URLRequest.
-
Defina o URL do serviço e o método HTTP no objeto de solicitação.
-
Crie um objeto URLVariables.
-
Configure os parâmetros de chamada do serviço como propriedades dinâmicas do objeto variáveis.
-
Atribua o objeto variáveis à propriedade de dados do objeto de solicitação.
-
Envie uma chamada para o serviço com um objeto URLLoader.
-
Gerencie o evento
complete
enviado pelo URLLoader indicando que a chamada do serviço foi concluída. Também é aconselhável monitorar os diversos eventos de erro que podem ser enviados pelo objeto URLLoader.
Por exemplo, imagine um serviço web que expõe um método de teste que ecoa os parâmetros da chamada de volta para o solicitante. O código ActionScript a seguir pode ser utilizado para chamar um serviço:
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 );
}
No Javascript de um aplicativo do AIR, você pode fazer a mesma solicitação utilizando o 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>