Web Service: il paradigma RESTful Web Service

Web Service: il paradigma RESTful Web Service

Web Service

Secondo la definizione data dal World Wide Web Consortium (W3C) un Web Service (o servizio web) è un sistema software progettato per supportare l’interoperabilità tra diversi elaboratori su di una medesima rete; caratteristica fondamentale di un Web  Service è quella di offrire un’interfaccia software (descritta in un formato automaticamente elaborabile quale, ad esempio, il WSDL, Web Services Description Language) utilizzando la quale altri sistemi possono interagire con il Web Service stesso, attivando le operazioni descritte nell’interfaccia tramite appositi messaggi utilizzando dei particolari protocolli (il più famoso è il SOAP).

La caratteristica dei Web Service di fornire dei servizi indipendentemente dalla piattaforma utilizzata, lo rende il candidato ideale per il progetto in esame. Si è deciso di utilizzare come architettura client il sistema operativo Android, ma nulla vieta di poter utilizzare qualsiasi altra piattaforma (altrettanto versatile) come ad esempio i diffusi I-Phone oppure Symbian. Un Web Service permette, difatti, di essere trasparente al linguaggio di programmazione. Nella fattispecie viene utilizzato Java Android lato client e Java lato server, ma potrebbe venire utilizzato lato client un qualsiasi altro linguaggio di programmazione. Lo scambio dei dati avviene tramite il metodo GET o POST messi a disposizione dal protocollo HTTP oppure utilizzando direttamente il formato XML, tutti metodi indipendenti dal linguaggio di programmazione utilizzato. Per rendere, inoltre, più semplice l’implementazione dell’applicazione lato client e per un migliore utilizzo della banda disponibile (spesso si utilizzano formati più compatti del SOAP), si è scelto di realizzare un REST (Representational State Transfer) Web Service.

Web Service - il paradigma RESTful Web Service
Web Service – il paradigma RESTful Web Service

RESTful Web Service

REST è una particolare tipologia di architettura software per la comunicazione nei Web Service. Tale architettura utilizza principalmente, a livello di applicazione, il protocollo HTTP e non un protocollo proprietario (es. SOAP). Inizialmente REST venne descritto da Fielding nel contesto del protocollo HTTP; un sistema RESTful, però, si può tranquillamente appoggiare ad un qualunque altro protocollo che fornisca un vocabolario altrettanto ricco. A differenza di altre specifiche per Web Service (es. SOAP), REST sfrutta infatti appieno la semantica e la ricchezza dei comandi HTTP e le sue funzionalità, come ad esempio la negoziazione dei contenuti. Perché un Web Service sia conforme alle Specifiche REST deve avere alcune specifiche caratteristiche:

  • architettura basata su client/server;
  • stateless, cioè ogni ciclo di request/response deve rappresentare un’interazione completa del client con il server;
  • uniformemente accessibile, cioè ogni risorsa deve avere un indirizzo univoco ed ogni risorsa di ogni sistema presenta la stessa interfaccia, precisamente quella individuata dal protocollo HTTP.

Il RESTful rappresenta una serie di principi architetturali per la progettazione dei  Web Service il cui concetto centrale è quello di risorsa, che rappresenta una  qualunque entità che possa essere indirizzata tramite Web, in parole povere accessibile e trasferibile tra client e server. Spesso rappresenta un oggetto appartenente al dominio del problema che si sta trattando. Durante un’interazione tra client e server, quello che viene trasferito è una rappresentazione dello stato interno della risorsa. Vengono inoltre utilizzate, al fine di agevolare il processo di sviluppo del software, dei supporti quali ad esempio JAX-RS e JAXB.

JAX-RS (Java API for RESTful Web Service) sono una serie di API in liguaggio Java che permettono il supporto per la creazione di Web Service in accordo con le specifiche dell’architettura REST. JAX-RS utilizza le annotazioni , introdotte dalla versione 1.5 di Java, per semplificare lo sviluppo e il deploy dei web service. Dalla versione 1.1, JAX-RS fa ufficialmente parte di Java EE.

Bisogna osservare che le annotazioni sono una particolare tipologia di metadato che in Java è possibile aggiungere al codice sorgente di un programma. Le annotazioni possono essere aggiunte a classi, metodi, parametri, variabili o pacchetti. A differenza dei tag aggiunti dalla documentazione Java, sono completamente accessibili al programmatore mentre il software è in esecuzione.

D’altro canto, JAX-RS rende disponibile l’utilizzo di particolari annotazioni per mappare una classe che contiene delle risorse accessibili via web. Le annotazioni includono:

  • @Path – specifica il path relativo per la risorsa;
  • @GET, @PUT, @POST, @DELETE – specificano le tipologie di richieste HTTP;
  • @Produces – specifica la tipologia di media ritornato;
  • @Consumes – specifica la tipologia di media accettato;
  • @PathParam, @QueryParam, @HeaderParam, @CookieParam, @MatrixParam, @FormParam – specificano la provenienza dei parametri passati al metodo remoto; ad esempio con @PathParam provengono dall’URL, @QueryParam  provengono dai parametri di tipo query dell’URL, @HeaderParam provengono dall’header del messaggio HTTP.

Nel sistema descritto, si fa ampio uso delle API JAX-RS. La tecnica utilizzata per la sincronizzazione (data binding) dei dati tra il server ed il client avviene utilizzando dei file XML, creati a partire dagli oggetti Java creati durante l’elaborazione. Lato client viene successivamente utilizzato SAX per recuperare  le  informazioni contenute in un file XML e ricreare l’oggetto Java di partenza. La creazione del file XML avviene utilizzando JAXB (Java Architecture for XML Binding) che permette di realizzare una mappatura tra le classi Java e una loro corrispondente rappresentazione sotto forma di file XML. JAXB permette perciò di serializzare oggetti Java in XML (effettua il marshalling) e di effettuare l’operazione inversa (unmarshalling), quindi dalla rappresentazione XML riottenere l’oggetto Java senza dover implementare alcuna routine per l’elaborazione di file XML.

Bisogna notare inoltre che SAX (Simple API for XML), rappresenta un parser sequenziale per l’accesso alle informazioni contenute in un file XML. SAX implementa un meccanismo per l’accesso in lettura al file.

Web Service e RESTful Web Service
SOAP. WSDL e UDDI

Precedente Installazione di Eclipse su Linux (Ubuntu) per lo sviluppo di applicazioni Android Successivo Eclipse: un ambiente di sviluppo open-source

Lascia un commento

*