Due nuove funzioni per la cloud di Google

Di - 13 March 2013 - in
Post image for Due nuove funzioni per la cloud di Google

Google ha pubblicato l’anteprima di due nuove interessanti funzioni per i suoi servizi di cloud: Cloud Endpoints e il supporto a Java 7 runtime su AppEngine.

Cloud Endpoints è un nuovo sistema davvero notevole. Si tratta di un insieme di strumenti e librerie che permettono di creare con grande facilità API REST per le proprie applicazioni web su AppEngine. In questo modo, Google semplifica molto la possibilità di creare backend cloud per applicazioni mobili o sistemi web. Per quanto riguarda le applicazioni mobili, Cloud Endpoints fornisce anche strumenti per l’autenticazione via OAuth, in modo da permettere allo sviluppatore di evitare di occuparsi delle questioni di sicurezza, critiche e complesse da gestire in maniera robusta.

La creazione di un’API è davvero intuitiva, e si può fare in Java o Python. Vediamo un esempio.

Prima di tutto, immaginiamo che la nostra applicazione abbia una classe che contiene dati da rendere poi disponibili via API. Tale classe rende leggibili i dati attraverso un metodo List.

public class SuperHeroes {

    public List listSuperHeroes() {

  List list = new ArrayList();
  list.add(new SuperHero ("Champion of the Obvious", "Brad Abrams"));
  list.add(new SuperHero ("Mr. Justice", "Chris Ramsdale"));

  return list;

 }
}

Ora, basterà aggiungere un semplice attributo e la versione per esporre un’API REST che presenti i dati:

@Api(name = "superheroes", version = "v1")
public class SuperHeroesV1 {
 ...
}

A questo punto, l’API è attiva:

$ curl http://localhost:8888/_ah/api/superheroes/v1/superheroes
{
 "items": [
  {
   "knownAs" : "Champion of the Obvious",
   "realName" : "Brad Abrams"
  },
  {
   "knownAs" : "Mr. Justice",
   "realName" : "Chris Ramsdale"
  }

Si potrà fare una chiamata fortemente tipizzata da client Android:

Real result = superheroes.list().execute();

o da iOS:

GTLQuerySuperHeroesV1 *query = [GTLQuerySuperHeroesV1 queryForSuperHeroesList];
[service executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
GTLSuperHeroes *object, NSError *error) {
  NSArray *items = [object items];
}];

o da browser, via JavaScript:

// ...
var ROOT = 'https://' + window.location.host + '/_ah/api';
gapi.client.load('superheroes', 'v1',
                 loadSuperheroesCallback, ROOT);

// Get the list of superheroes
gapi.client.superheroes.superheroes.list().execute(function(resp) {
  displaySuperheroesList(resp);
});

Google ha già messo a disposizione il necessario nella versione 1.7.5 dell’SDK di AppEngine e nell’ultima versione del plugin Eclipse, già documentato.

La documentazione di Cloud Endpoints è disponibile per Java e per Python, assieme ad un tutorial per la realizzazione di un gioco del tris, in Python.

Con Java 7, invece, introduce in AppEngine diverse caratteristiche molto utili proprie di questa versione del linguaggio. Vediamone alcune.

La prima è il supporto per l’istruzione bytecode invokedynamic, che permette di tradurre le chiamate a metodi in un bytecode efficiente anche quando non ci sono informazioni statiche sul tipo di metodo, come avviene in questo esempio:

public static void invokeExample() {
   String s;
   MethodType mt;
   MethodHandle mh;

   MethodHandles.Lookup lookup = MethodHandles.lookup();
   MethodType mt = MethodType.methodType(String.class, char.class,
          char.class);
   MethodHandle mh = lookup.findVirtual(String.class, "replace", mt);
   s = (String) mh.invokeExact("App Engine Java 6 runtime",'6','7');
   System.out.println(s);
}

Altra funzione interessante è il try-with-resources, che si occupa di chiudere automaticamente le risorse utilizzate in un try-catch, evitando al programmatore di doverle chiudere manualmente rischiando di dimenticarlo causando problemi di memoria.

Tra le altre novità ricordiamo anche:

  • La creazione flessibile di tipi, che permette di evitare di specificare due volte i tipi dei parametri di tipi generici
  • La possibilità di usare il tipo String negli switch
  • La possibilità di scrivere in notazione binaria con i prefissi 0B o 0b
  • La possibilità di catturare piú eccezioni con un singolo catch
  • L’invocazione semplificata del metodo varargs

Per iniziare a testare, si può utilizzare questo SDK. Come d’abitudine, è disponibile un’accurata documentazione.

Via | Google Research Blog

Leave a Reply

Lorenzo Breda Articolo scritto da

Studente di Informatica a Roma, si occupa di programmazione web sopratutto lato server, e di accessibilità del web. Utilizza e ama Debian GNU/Linux, e si interessa di fisica, fumetto, trekking e fotografia (gli ultimi due possibilmente abbinati). Collabora con Googlab da aprile 2012.

Contatta l'autore

Previous post:

Next post: