An overview of technologies and best practices for the development of a full-stack web application using JavaScript. How to realize an entire Application Server with a single programming language, the use of event-driven logic and the potential of Node.js.
Talk di Luca Lusso | Drupal Day Roma 2011
Snellire il carico del server per generare e restituire un json da usare per un autocompletamento. Notificare che un nodo è stato appena creato a tutti gli utenti che stanno visitando il sito in questo momento. Oppure ancora mettere a disposizione degli utenti una chat in tempo reale. Tutto questo (e molto altro) si può delegare ad un processo esterno a Drupal per aumentare velocità di interazione e diminuire il carico del server.
Durante il talk si vedrà come installare e usare node.js e come integrarlo con Drupal. Verrà mostrato il modulo nodejs presente nel repository di drupal.org
Javascript avanzato: sfruttare al massimo il webRoberto Messora
Javascript è uno dei linguaggi più sottovalutati e più incompresi dell'intero panorama dei linguaggi di programmazione, eppure è anche uno dei più utilizzati.
Da una parte le molteplici e differenti declinazioni degli strumenti di navigazione web, dall'altra l'infelice scelta storica di usare il termine "script", hanno contribuito alla creazione del mito di un linguaggio poco rigoroso, al servizio di ogni sorta di trucco o pezza di codice.
La verità invece racconta di un linguaggio dinamico ad oggetti a tutti gli effetti, con caratteristiche molto interessanti, seppur con qualche difetto, ma soprattutto un linguaggio che, sull'onda di HTML5, rivestirà se possibile ancora più importanza nell'immediato futuro.
In questa sessione verranno presentati aspetti poco conosciuti, ma molto importanti, di Javascript (scoping, hoisting, closures, ecc.), verranno presentati alcuni design patterns che permettono di strutturare in maniera intelligente le nostre librerie applicative in funzione della manutenibilità e delle performance, senza tralasciare, ove possibile, uno sguardo ad alcuni framework come jQuery o KnockoutJS.
Intro a Linux tenuta all'università degli studi di Napoli Federico II. Speaker: Gabriele Previtera - https://www.linkedin.com/in/gabriele-previtera-6657648b/
Solimena Dellafiore - Applicazioni RESTful con Jersey : come realizzare un mi...Riccardo Solimena
Attraverso l'approccio REST è possibile realizzare web service sfruttando al massimo l'eleganza e la potenza del protocollo HTTP. Mettendo mani al codice, si vedrà come sia possibile realizzare in 10 minuti un microblog RESTful, tipo twitter, e come i tool di sviluppo rendano il tutto ancora più semplice. Per la realizzazione del back end, si utilizzerà Jersey, la reference implementation Open Source di Sun della specifica JAX-RS (JSR-311), già integrata nella piattaforma JEE6.
An overview of technologies and best practices for the development of a full-stack web application using JavaScript. How to realize an entire Application Server with a single programming language, the use of event-driven logic and the potential of Node.js.
Talk di Luca Lusso | Drupal Day Roma 2011
Snellire il carico del server per generare e restituire un json da usare per un autocompletamento. Notificare che un nodo è stato appena creato a tutti gli utenti che stanno visitando il sito in questo momento. Oppure ancora mettere a disposizione degli utenti una chat in tempo reale. Tutto questo (e molto altro) si può delegare ad un processo esterno a Drupal per aumentare velocità di interazione e diminuire il carico del server.
Durante il talk si vedrà come installare e usare node.js e come integrarlo con Drupal. Verrà mostrato il modulo nodejs presente nel repository di drupal.org
Javascript avanzato: sfruttare al massimo il webRoberto Messora
Javascript è uno dei linguaggi più sottovalutati e più incompresi dell'intero panorama dei linguaggi di programmazione, eppure è anche uno dei più utilizzati.
Da una parte le molteplici e differenti declinazioni degli strumenti di navigazione web, dall'altra l'infelice scelta storica di usare il termine "script", hanno contribuito alla creazione del mito di un linguaggio poco rigoroso, al servizio di ogni sorta di trucco o pezza di codice.
La verità invece racconta di un linguaggio dinamico ad oggetti a tutti gli effetti, con caratteristiche molto interessanti, seppur con qualche difetto, ma soprattutto un linguaggio che, sull'onda di HTML5, rivestirà se possibile ancora più importanza nell'immediato futuro.
In questa sessione verranno presentati aspetti poco conosciuti, ma molto importanti, di Javascript (scoping, hoisting, closures, ecc.), verranno presentati alcuni design patterns che permettono di strutturare in maniera intelligente le nostre librerie applicative in funzione della manutenibilità e delle performance, senza tralasciare, ove possibile, uno sguardo ad alcuni framework come jQuery o KnockoutJS.
Intro a Linux tenuta all'università degli studi di Napoli Federico II. Speaker: Gabriele Previtera - https://www.linkedin.com/in/gabriele-previtera-6657648b/
Solimena Dellafiore - Applicazioni RESTful con Jersey : come realizzare un mi...Riccardo Solimena
Attraverso l'approccio REST è possibile realizzare web service sfruttando al massimo l'eleganza e la potenza del protocollo HTTP. Mettendo mani al codice, si vedrà come sia possibile realizzare in 10 minuti un microblog RESTful, tipo twitter, e come i tool di sviluppo rendano il tutto ancora più semplice. Per la realizzazione del back end, si utilizzerà Jersey, la reference implementation Open Source di Sun della specifica JAX-RS (JSR-311), già integrata nella piattaforma JEE6.
Programmazione web libera dai frameworkFrancesca1980
Un nuovo progetto web parte quasi sempre con la domanda "che framework usiamo?" Diamo per scontato che non si possa sviluppare per il web senza fare uso di framework. Ma che succederebbe se decidessimo di sviluppare senza framework? Potremmo ottenere maggiore controllo e qualità, meno rischi e meno costi. Serve "solo" la volontà di imparare a programmare bene. Darò alcune dritte con Java e TDD.
Dopo una piccola introduzione al linguaggio Groovy, dove verranno illustrate brevemente alcune peculiarità, si passerà ad esaminare le caratteristiche che lo rendono adatto per la generazione di DSL.
Verrà quindi presentato come caso pratico la costruzione di una DSL e sarà mostrato come è possibile embeddarla in un progetto Java.
2. Cosa vuol dire REST
“Representational State Transfer”
chiaro no?
3. Definizione di REST
● Fielding, Roy Thomas (2000),
“Architectural Styles and the Design of
Network-based Software Architectures”
MA
● Ognuno ormai ha la sua “definizione”
4. Un'idea (forse) comune
● Software architectural style
● Ogni cosa e' una risorsa e ha un identificativo
(tipicamente un URL)
● Server (il più possibile) senza stato
● Applicata soprattutto per i web-services
(SOAP non ci piace più)
● Sfrutta meglio il protocollo HTTP
(vedi PUT e DELETE questi “sconosciuti”)
● Benvenuto JSON
6. Un esempio di API REST
POST
create
GET
read
PUT
update
DELETE
delete
/dogs
Nuovo
cane
Lista di
tutti i cani
Aggiornamento
massivo
Cancellazione
di tutti i cani
/dogs/313 3rR0r
Mostra
“Pluto”
Se esiste,
aggiorna Pluto
Cancella Pluto
7. REST con Jersey
● Specifica JAX-RS
The Java API for RESTful Web Services
(JSR-311)
● Implementazione di riferimento
● Versioni
– 1.18 (legacy...)
– 2.x (attualmente 2.9)
8. Jersey: la ragion d'essere
● Mapping chiamate HTTP a metodi di
oggetti POJO
● Restituire nel formato richiesto:
– Content-type negotiation (Es. XML, JSON,....)
9. Jersey overview
● Deployment
– Web container: Servlet 2.x e 3.x, filter
– HTTP Server
– JEE, OSGI
● Configurazione tramite:
– JAX-RS class: Application
– Jersey class ResourceConfig
● JAX-RS Client + connectors:
– Apache HTTP, Jetty, Grizzly Asynchronous
● Test Framework (no JAX-RS)
11. Mapping: parametri
● @PathParam
– @Path("/users/{username}")
– @Path("users/{username: [a-zA-Z][a-zA-Z_0-9]*}")
● @QueryParam
– GET http://example.com/dogs?limit=100
● @FormParam
@POST
@Consumes("application/x-www-form-urlencoded")
public void post(@FormParam("name") String name) {
// Store the message
}
12. Support JSON
● Varie librerie:
– MOXy (jersey 2.x preferred)
– Jackson
– Jettison
– Java API for JSON Processing (JSON-P)
● Modalità
– POJO based JSON binding (MOXy and Jackson)
– JAXB based JSON binding
– Low-level JSON parsing & processing
(Jettison, e JSON Processing API da JEE7+)
13. Supporto JSON – MOXy
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.9</version>
</dependency>
● Autodiscover se presente nel classpath
● Supporta anche XML con annotazioni JAXB
14. Supporto JSON – Jackson
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.9</version>
</dependency>
● Va registrato tra le features di Jersey
● Va configurato un ObjectMapper
● Dicono che forse è il più veloce...
18. Gestione eccezioni
Facebook
HTTP Status Code: 200
{"type" : "OauthException", "message":"(#803) Some of the
aliases you requested do not exist: foo.bar"}
Twilio
HTTP Status Code: 401
{"status" : "401", "message":"Authenticate","code": 20003, "more
info": "http://www.twilio.com/docs/errors/20003"}
SimpleGeo
HTTP Status Code: 401
{"code" : 401, "message": "Authentication Required"}
19. Gestione eccezioni
@Provider
public class AppExceptionMapper implements
ExceptionMapper<AppException> {
@Override
public Response toResponse(AppException ex) {
return ResponseBuilder.userException(ex);
}
20. REST best practices
● Risorse: nomi (meglio concreti) e non verbi
● Associazioni:
– GET /owners/5678/dogs
GET /dogs/byOwner/5678
oppure GET /dogs/?owner=5678
MOLTO MEGLIO!!!
ma... perchè?
21. REST best practices
● E' complicato con Jersey gestire le risorse
gerarchicamente
● I client si aspettano che:
“/owners/....” restituisca degli “Owners”
● È un concetto assimilabile ai Dao che già conosciamo
● Permette di nascondere la complessità sotto ‘?’
“Da una Risorsa derivano (grandi)
oggetti di quel tipo!”
22. EXTRA: REST best practices
● Mai rilasciare un API senza versione!
● Operazioni puramente funzionali:
– /convert?from=EUR&to=CNY&amount=100
– Usare VERBI
– Documentare che NON sono risorse
● Sottodominio specifico per le API
● ChattyAPIs: quante chiamate servono?
● Occhio alle gerarchie di Resources
23. Perchè ci/mi piace REST
● Lato server
– Mapping chiaro funzioni esposte
– Scalabilità se gestito bene lo stato
● Lato client web
– Librerie JS con concetto resource (es.
AngularJS)
– JSON “nativo” nei browser
– Più dinamicità ed efficienza nei client
24. Perchè mi piace REST
● Lato client mobile
– JSON piu' leggero di XML
– HTTP Tools che parlano
● Integrazione
– Più semplice (bastano “curl” o “wget” da shell)
– Servizi più raggiungibili (evviva la porta 80!!!)
– Aggregazione di servizi da provider diversi per
creare innovazione
– Monetizzazione della propria Business Logic