Introduzione al framework Java Spring e Maven per realizzare API REST.
Breve introduzione all'uso di Maven per configurare un progetto SpringBoot e realizzare un server REST.
Disponibile il codice dimostrativo su github (link nelle slide, attenzione alle branch).
Valerio Radice (valix85)
Luglio 2017
In this Java Spring Training session, you will learn Spring – Inversion of Control, Dependency Injection and Bean definitions. Topics covered in this session are:
For more information, visit this link:
Spring Framework
• Core Container
• Data Access/Integration
• Web Layer
• Spring Setup
• Key features
• Spring Bean
• Dependency Injection
• Relation between DI and IoC
• Spring IoC Containers
• Spring DI
https://www.mindsmapped.com/courses/software-development/spring-fundamentals-learn-spring-framework-and-spring-boot/
JOHN HUMPHREYS VP OF ENGINEERING INFRASTRUCTURE SYSTEMS, NOMURA
Spring Boot is a modern and extensible development framework that aims (and succeeds!) to take as much pain as possible out of developing with Java. With just a few Maven dependencies, new or existing programs become runnable, init.d-compliant uber-JARs or uber-WARs with embedded web-servers and virtually zero-configuration, code or otherwise. As an added freebie, Spring Boot Actuator will provide your programs with amazing configuration-free production monitoring facilities that let you have RESTFUL endpoints serving live stack-traces, heap and GC statistics, database statuses, spring-bean definitions, and password-masked configuration file audits.
Maven is a build automation tool used primarily for Java projects. This presentation will cover the basics of Maven and its usage while developing Java application.This is for anyone interested to learn Maven especially the Java developers.
In this Java Spring Training session, you will learn Spring – Inversion of Control, Dependency Injection and Bean definitions. Topics covered in this session are:
For more information, visit this link:
Spring Framework
• Core Container
• Data Access/Integration
• Web Layer
• Spring Setup
• Key features
• Spring Bean
• Dependency Injection
• Relation between DI and IoC
• Spring IoC Containers
• Spring DI
https://www.mindsmapped.com/courses/software-development/spring-fundamentals-learn-spring-framework-and-spring-boot/
JOHN HUMPHREYS VP OF ENGINEERING INFRASTRUCTURE SYSTEMS, NOMURA
Spring Boot is a modern and extensible development framework that aims (and succeeds!) to take as much pain as possible out of developing with Java. With just a few Maven dependencies, new or existing programs become runnable, init.d-compliant uber-JARs or uber-WARs with embedded web-servers and virtually zero-configuration, code or otherwise. As an added freebie, Spring Boot Actuator will provide your programs with amazing configuration-free production monitoring facilities that let you have RESTFUL endpoints serving live stack-traces, heap and GC statistics, database statuses, spring-bean definitions, and password-masked configuration file audits.
Maven is a build automation tool used primarily for Java projects. This presentation will cover the basics of Maven and its usage while developing Java application.This is for anyone interested to learn Maven especially the Java developers.
This is a basic tutorial on Spring core.
Best viewed when animations and transitions are supported, e.g., view in MS Powerpoint. So, please try to view it with animation else the main purpose of this presentation will be defeated.
Presentation explain about
Spring Boot vs Spring vs Spring MVC,
Advantages,
Where to start and how does Spring boot work ?,
Dependency Management,
Logging,
Exception Handling,
Database Handling.
in Spring boot.
This talk introduces Spring's REST stack - Spring MVC, Spring HATEOAS, Spring Data REST, Spring Security OAuth and Spring Social - while refining an API to move higher up the Richardson maturity model
Welcome to presentation on Spring boot which is really great and relatively a new project from Spring.io. Its aim is to simplify creating new spring framework based projects and unify their configurations by applying some conventions. This convention over configuration is already successfully applied in so called modern web based frameworks like Grails, Django, Play framework, Rails etc.
Quick introduction to Spring Framework. Following are the topics I have included in this presentations:
1. Introduction to Software Framework
2. What is Spring Framework?
3. Spring Framework History
4. Spring Framework Architecture
5. Why Spring?
6. Spring Framework Ecosystem
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlArjun Thakur
Hi, I just prepared a presentation on Java Spring Framework, the topics covered include architecture of Spring framework and it's modules. Spring Core is explained in detail including but not limited to Inversion of Control (IoC), Dependency Injection (DI) etc. Thank you and happy learning. :)
The presentation walks you through Apache maven and how to do a build management for java based applications. It starts with basic introduction on the technology and how it plays an important role for build management. The presentation then talks about details on how the maven works and its philosophy to creating builds. Furthermore, it also covers in detail the plugins based architecture to better understand how to use maven effectively.
University of Colorado PhD software engineering student Aaron Schram explains the details of creating a web applications using the Spring MVC framework
This is a basic tutorial on Spring core.
Best viewed when animations and transitions are supported, e.g., view in MS Powerpoint. So, please try to view it with animation else the main purpose of this presentation will be defeated.
Presentation explain about
Spring Boot vs Spring vs Spring MVC,
Advantages,
Where to start and how does Spring boot work ?,
Dependency Management,
Logging,
Exception Handling,
Database Handling.
in Spring boot.
This talk introduces Spring's REST stack - Spring MVC, Spring HATEOAS, Spring Data REST, Spring Security OAuth and Spring Social - while refining an API to move higher up the Richardson maturity model
Welcome to presentation on Spring boot which is really great and relatively a new project from Spring.io. Its aim is to simplify creating new spring framework based projects and unify their configurations by applying some conventions. This convention over configuration is already successfully applied in so called modern web based frameworks like Grails, Django, Play framework, Rails etc.
Quick introduction to Spring Framework. Following are the topics I have included in this presentations:
1. Introduction to Software Framework
2. What is Spring Framework?
3. Spring Framework History
4. Spring Framework Architecture
5. Why Spring?
6. Spring Framework Ecosystem
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlArjun Thakur
Hi, I just prepared a presentation on Java Spring Framework, the topics covered include architecture of Spring framework and it's modules. Spring Core is explained in detail including but not limited to Inversion of Control (IoC), Dependency Injection (DI) etc. Thank you and happy learning. :)
The presentation walks you through Apache maven and how to do a build management for java based applications. It starts with basic introduction on the technology and how it plays an important role for build management. The presentation then talks about details on how the maven works and its philosophy to creating builds. Furthermore, it also covers in detail the plugins based architecture to better understand how to use maven effectively.
University of Colorado PhD software engineering student Aaron Schram explains the details of creating a web applications using the Spring MVC framework
Apache Maven - Gestione di progetti Java e build automationTiziano Serritella
Apache Maven è un tool per la gestione di progetti e build automation, utilizzato principalmente per progetti Java, il cui obiettivo è: semplificare, uniformare e automatizzare il processo di build di sistemi complessi.
In questa presentazione / guida verranno illustrati i problemi e le criticità dei tool di build automation tradizionali: make e Apache Ant, vedremo poi come installare e configurare Maven, le caratteristiche, gli obiettivi e i punti di forza del tool, le fasi del ciclo di vita, i plugin e i goal, le dipendenze, gli scope e la risoluzione di eventuali conflitti, i repository, i plugin "esterni" e i progetti multi-modulo.
La presentazione è ricca di esempi pratici.
Angular js o React? Spunti e idee per la scelta di un frameworkGiovanni Buffa
Come poter scegliere un framework da utilizzare in un progetto per una web applications? Durante questo workshop analizzeremo le parti fondamentali di AngularJs e React, in modo da capire pregi e difetti di ognungo dei due principali strumenti di sviluppo.
Presentazione sull'evoluzione di Struts, primo framework web MVC in ambito Java e sul merger con WebWork, effettuata durante la (prima!) tappa di Torino della prima edizione di JavaDay '06.
OpenOffice.org non è solo la principale suite di applicazioni per l'ufficio completamente libera e basata su open standard (OpenDocument è standard ISO), ma può trasformarsi in una potente piattaforma per applicazioni document-based programmabile via Java.
In questa presentazione esploreremo le potenzialità del connubio fra OpenOffice.org e Java tramite alcuni esempi applicativi. In particolare vedremo la possibilità di eseguire script nei linguaggi basati su JVM come BeanShell e Jython, l'esecuzione remota da applicazioni Java esterne di funzioni di OpenOffice.org lanciato in modalità server, e i diversi punti di aggancio per estendere le funzionalità della suite dall'interno tramite componenti Java custom.
Vedremo infine la nuova applicazione Base presente in OpenOffice.org 2.0 per l'accesso a sorgenti dati JDBC.
Slide sesta lezione al linguaggio Java 8 in preparazione alla certificazione OCA 1Z0-808.
Argomenti:
Librerie indispensabili e famose (StringTokenizer, StringBuilder, DateTime API)
Collections Framework & Stream API, Gestione input e Output
Lezione del 11-01-2018 tenuta da Valerio Radice presso Nextre Engeneering
https://www.nextre.it/corso/corso-java-oca/
Slide quinta lezione al linguaggio Java 8 in preparazione alla certificazione OCA 1Z0-808.
Argomenti:
Invocazione virtuale dei metodi
Eccezioni, gestione e creazione
Catturare e rilanciare eccezioni
NullPointer
Operazioni lambda, Predicate e principali operazioni
Stream
Lezione del 05-12-2017 tenuta da Valerio Radice presso Nextre Engeneering
https://www.nextre.it/corso/corso-java-oca/
Slide quarta lezione al linguaggio Java 8 in preparazione alla certificazione OCA 1Z0-808.
Argomenti:
Design Pattern: Singleton
Classe Astratta
Interfaccia e interfaccia funzionale
Ereditarietà e costruttori
Super e this
Incapsulamento
Polimorfismo
Varargs
Overload e Override
Invocazione virtuale dei metodi
Lezione del 28-11-2017 tenuta da Valerio Radice presso Nextre Engeneering
https://www.nextre.it/corso/corso-java-oca/
Slide introduttive al linguaggio Java 8 in preparazione alla certificazione OCA 1Z0-808.
Lezione del 12-10-2017 tenuta da Valerio Radice presso Nextre Engeneering
https://www.nextre.it/corso/corso-java-oca/
Introduzioni all'uso dei preprocessori Sass e Less per la stesura di un foglio di stile CSS intelligente
Autore: Valerio Radice - valix85
Data: Giugno 2017
Introduzione a Docker e alla Dockerizzazione.
Filosofia e progettazione Docker
Comandi principali per gesitere immagini, container, volumi e reti
Dockerfile e docker-compose
Valerio Radice @ Nextre (Maggio 2017)
TAG: docker , Dockerfile , docker-compose , italian , nextre
Breve introduzione a GIT:
. Iniziare un nuovo progetto o clonarne uno esistente
. primi commit e comandi base
. esempi di utilizzo
Autore: Valerio Radice
tag line:
Tutorial GIT ITA italiano
Analisi di tecnologie per l’interazione dei visitatori all'interno di museiValerio Radice
Presentazione di Ubiquitous Computing - Sistemi context aware
"Analisi di tecnologie per l’interazione dei visitatori all'interno di musei"
Lorenzo Airoldi - Matteo Baiguini - Rossella Nota - Valerio Radice
11/2010 - Università degli studi di Milano Bicocca
5. 5
INTRODUZIONE
Framework?
Un framework, è un'architettura logica di supporto (spesso
un'implementazione logica di un particolare design pattern) su cui
un software può essere progettato e realizzato, col fine di
facilitare lo sviluppo al programmatore.
Perchè usare un framework?
Standard -> Metodologia
Community -> Supporto
Strumenti -> IDE e Plugin
8. 8
In informatica Spring è un framework open source per lo sviluppo di
applicazioni su piattaforma Java. (“Wikipedia”)
Spring è un framework molto datato (2002) ma ancora in sviluppo e
largamente diffuso.
Sposta il focus della programmazione sugli aspetti, sul
comportamento e non su come deve fare, a quello ci pensa il
framework (Inversion of Control - IoC).
Implementa design pattern, come la Depency Injection, per la
condivisione e il riuso degli oggetti.
SPRING - INTRODUZIONE
9. 9
L'Inversion of Control è un principio architetturale nato alla fine
degli anni ottanta, basato sul concetto di invertire il controllo
del flusso di sistema (Control Flow) rispetto alla programmazione
tradizionale.
Programmazione tradizionale: lo sviluppatore definisce la logica
del flusso di controllo, specificando le operazioni di creazione,
inizializzazione degli oggetti ed invocazione dei metodi.
IoC: Si inverte il control flow, facendo in modo che non sia più lo
sviluppatore a doversi preoccupare di questi aspetti, ma il
framework, che reagendo a qualche "stimolo" se ne occuperà per suo
conto.
Questo principio è anche conosciuto come Hollywood Principle: "Non
chiamarci, ti chiameremo noi".
INVERSION OF CONTROL
10. 10
Utilizzato per riferirsi ad una specifica implementazione dello IoC
Dipendenze iniettate a run-time dall'esterno della classe, tramite:
• Uso del costruttore
• Uso di una Factory
• Servizio di naming
La classe A dipende da B se ne usa un'istanza o dei metodi.
Soluzione
Un componente esterno (assembler) si occupa della creazione degli
oggetti e delle loro relative dipendenze.
Gli oggetti sono assemblati e le dipendenze risolte con l'utilizzo
dell'injection tramite Constructor Injection (passata dal
costruttore), Setter Injection (settata con metodo set) o Interface
Injection (mapping tra interfaccia e implementazione, non usata in
Spring).
DEPENDENCY INJECTION
11. 11
Spring framework si compone da moduli (layers) le cui attività sono
ben definite (Core, Beans, Context, ecc... ).
SPRING - LAYERS
I moduli Core e Beans formano la
struttura principale del framework,
includendo le funzionalità di IoC e DI.
L'elemento fondamentale è la BeanFactory.
Il layers Data Access fornisce
un'astrazione per le API JDBC, un modulo
per integrare JPA e diversi ORM
(Hibernate).
Il layers Web offre un server tomcat e
tecnologie di view e MVC.
Il layers di AOP implementa lo standard
AOP Alliance per l'aspect oriented
programming.
12. 12
L'IoC container è la parte di Spring che si occupa di instanziare e
configurare gli oggetti che vengono inseriti in esso, creando così
l'ApplicationContext, che prendono il nome di beans (oggetti, come
ad esempio @Component, creati da Spring).
I beans vengono configurati attraverso dei metadati che possono
essere dei file xml o delle Java annotations o Java Configuation.
Di default i metadati vengono letti solo dagli xml, per abilitare
l'uso delle annotations c'è bisogno di configurare
l'ApplicationContext.
SPRING - Beans
13. 13
La parte di Spring che si occupa del layer di presentazione dei dati
specifico per applicazioni Web è il Web MVC Framework.
Come da filosofia di Spring anche per usare questo modulo non è
necessario estendere o implementare nessuna interfaccia specifica del
framework.
Per implementare l'MVC, Spring usa tre elementi principali:
- DispatcherServlet: smista le richieste in ingrersso POST,GET,PUT,...
e instrada le risposte
- Handlers: usa i controller (POJO annotati da @Controller) popola un
model con i risultati
- View Resolver: componente di view (jsp o json) prepara la risposta
con i dati ottenuti dal model per essere rappresentata
SPRING - MVC Framework
14. 14
La generazione di un progetto web segue spesso schemi ben precisi e
ridondanti. Per rendere meno tedioso e ridurre gli errori i
developer hanno a disposizione un tool per creare un nuovo progetto
Spring con tutto ciò che serve preconfigurato.
Spring Boot è un'applicazione Spring con numerose configurazioni
impostate per semplificare l'avvio di un progetto.
La gestione di progetto spring è demandata a strumenti secondari
per curara la compilazione del codice, la gestione delle dipendenze,
la generazione della documentazione e organizzare la collaborazione
in team.
I più diffusi strumenti a supporto di Spring sono indubbiamente
Maven e Gradle.
SPRING BOOT
15. 15
Tool per la generazione di un progetto SpringBoot:
http://start.spring.io
Spring Boot vs Spring
https://dzone.com/articles/spring-boot-vs-spring-mvc-vs-spring-how-
do-they-compare
SPRING BOOT
17. 17
Apache Maven is a software project management and comprehension
tool. Based on the concept of a project object model (POM), Maven
can manage a project's build, reporting and documentation from a
central piece of information.
https://maven.apache.org/
INTRODUZIONE
18. 18
L'obiettivo principale di Maven è di aiutare lo sviluppatore nel
gestire e comprendere a pieno lo stato di un progetto nel minor
tempo possibile.
Inoltre Maven permette di:
- facilitare i processi di build
- fornire un sistema di build uniforme
- fornire informazioni di qualità sul progetto
- fornire linee guida sulle best practices in fase di sviluppo
https://maven.apache.org/what-is-maven.html
OBIETTIVI DI MAVEN
19. 19
- pom.xml: file xml di configurazione, contiene tutte le
informazioni sul progetto (dipendenze, test, documentazione, etc…).
- Goal: singola funzione che può essere eseguita sul progetto,
l’equivalente Maven dei task in Ant.
- Plug-in: goal riutilizzabili in tutti i progetti.
- Repository: directory strutturata destinata alla gestione delle
librerie / dipendenze. Può essere locale o remoto.
COMPONENTI DI MAVEN
20. 20
POM (Project Object Model) descrive ogni progetto attraverso il
file di configurazione pom.xml. Il POM è un file XML e guida
l’esecuzione in Maven definendo in modo chiaro l’identità e la
struttura di un progetto in ogni suo aspetto, tutto è descritto
nel POM: informazioni generali del progetto, dipendenze, processo
di compilazione e fasi secondarie come la generazione di
documentazione.
POM.XML
21. 21
Un POM ai minimi termini è composto da un tag root <project> che
conterrà i tag:
- <modelVersion> dichiara a quale versione di POM il progetto è
conforme (attuale 4.0.0)
- <groupId> ID del gruppo del progetto (solitamente organizzazione)
- <artifactId> ID dell’artefatto (nome del progetto)
- <version> cioè la versione del progetto
- <packaging> indica il tipo di archivio che vogliamo esportare
(jar, war o ear)
I parametri groupId, artifactId, version e packaging
identificheranno univocamente un progetto. Se packaging non è
specificato nel POM, assumerà “jar” a valore di default.
POM.XML
23. 23
La grande forza di Maven è la gestione automatizzata delle
dipendenze, e delle relative versioni, lette dal repository. Le
dipendenze vanno specificate all'interno del nodo <dependecies>
del file pom. Ogni dipendenza è composta da groupId, artifactId e
version dentro al nodo <dependency>.
<project>
....
<dependecies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.13</version>
</dependency>
</dependecies>
....
</project>
POM.XML
24. 24
Per ogni dipendenza è possibile anche definire uno <scope> :
compile (default) – le dipendenze sono disponibili in tutti i
classpath del progetto
provided – è simile a compile, ma prevede che a runtime le
dipendenze siano rese disponibili dall’ambiente di esecuzione (per
esempio le JavaEE APIs per un’applicazione enterprise)
runtime – le dipendenze sono richieste solo in esecuzione
test – le dipendenze sono richieste solo per la compilazione e
l’esecuzione dei test
system – la dipendenza non viene recuperata tramite repository, ma
ne viene esplicitamente dichiarata la posizione locale
POM.XML
25. 25
Il Repository è una directory strutturata destinata alla gestione
delle librerie. Maven ne crea uno in locale sotto la home
dell’utente al fine di evitare accessi alla rete inutili.
Nel processo di gestione del progetto Maven verifica in locale
l’esistenza della libreria desiderata e in caso negativo interroga
un repository remoto.
Nel POM minimale non è specificato alcun repository remoto.
Se si svolge il building del progetto, allora verrà ereditato
quello di default che corrisponde a:
http://repo1.maven.org/maven2/
POM.XML
26. 26
Qualora fosse necessario, è però possibile specificare altri
repository dove cercare librerie e dipendenze. Per integrarlo
all’interno del nostro progetto è sufficiente aggiungere nel
pom.xml la sezione <repositories>
<project>
...
<repositories>
<repository>
<id>id_nuovo_repository</id>
<url>http://url_nuovo_repository</url>
</repository>
</repositories>
...
</project>
POM.XML
27. 27
Un goal è una singola funzione che può essere eseguita sul progetto,
l’equivalente Maven dei task Ant. I Goal possono essere sia specifici per
il progetto dove sono inclusi, sia riusabili. I Plugin sono goal
riutilizzabili in tutti i progetti. Maven ha una serie di plugin built-in
disponibili, i principali sono i seguenti:
- clean: che permette di cancellare i compilati dal progetto;
- compiler: che permette di compilare i file sorgenti;
- deploy: che permette di depositare il pacchetto generato nel repository
remoto;
- install: che permette di depositare il pacchetto generato nel
repository locale;
- site: che permette di generare la documentazione del progetto;
- archetype: che permette di generare la struttura di un progetto a
partire da un template.
POM.XML
28. 28
Un’altra caratteristica molto potente e unica di Maven è la
possibilità di relazionare tra loro i progetti con legami di
ereditarietà. In Maven l’ereditarietà permette di creare nuovi POM
file che ereditano le relazioni definite in un altro POM genitore
detto super POM.
Gli elementi ereditabili dai discendenti che si possono specificare
in un POM genitore sono:
- dipendenze
- lista degli sviluppatori e contributori
- esecuzioni dei plugin con id corrispondenti
- configurazione dei plugin
- risorse
POM.XML
29. 29
Qualora si intenda ereditare da un altro file pom.xml le relative
coordinate di questo genitore (groupId, artifactId, version), esse
vanno specificate all’interno della sezione <parent>, che dispone di
un ulteriore campo non obbligatorio: <relativePath>. Questo indica
il path in cui cercare il progetto genitore, prima di accedere al
repository locale e infine a quello remoto.
<project>
...
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/>
</parent>
...
</project>
POM.XML
30. 30
Altre informazioni utili e presenti in un pom.xml
• name: permette di specificare il nome “interno” del progetto, utilizzato dal
team di sviluppo;
• description: una breve descrizione del progetto;
• url: indirizzo del sito dedicato al progetto;
• inceptionYear: indica l’anno di startup del progetto.
• licenses: permette di indicare una o più licenze con la quale verrà rilasciato il
progetto. Per ogni singola licenza, è possibile specificare: name, url, comments
e distribution[repo|manual].
• organization Informazioni relative all’azienda/organizzazione proprietaria del
progetto.
• properties: definisce l'elenco delle singole property che possono essere
dinamicizzate nel progetto.
• build: dichiarazione delle specifiche di build, per profilo e/o per progetto
• build -> resource: indica i file da aggiungere al progetto senza essere compilati
• build -> plugins: definizione dei plugin
POM.XML
31. 31
SITOGRAFIA MAVEN
Un elenco di risorse per approfondire quanto visto in
precedenza
http://www.cosenonjaviste.it/organizziamoci-con-maven-parte-i/
http://www.html.it/articoli/maven-organizzazione-dei-progetti-java-1/
https://www.sonatype.com/ebooks
http://www.valeriofinazzo.it/joomla/maven/
http://codingjam.it/maven-sveliamo-un-pom-di-segreti/
33. 33
Con application programming interface (in acronimo API, in italiano
interfaccia di programmazione di un'applicazione), in informatica, si indica
ogni insieme di procedure disponibili al programmatore, di solito raggruppate
a formare un set di strumenti specifici per l'espletamento di un determinato
compito all'interno di un certo programma.
[Wikipedia]
§ Astrazione di alto livello
§ Riuso del codice
§ Modularità
§ Stratificazione delle operazioni
§ Interagire con sistemi informatici
API
34. 34
API danno la possibilità di usare sistemi e contenuti proprietari al di fuori
dell'ambiente principale per il quale sono state progettate.
In alcuni contesti le stesse API vengono usate solo internamente per estendere
con semplicità e coerenza le funzionalità dell'applicativo iniziale.
Garantiscono la separazione dei contenuti dalla loro rappresentazione.
API private (restricted)
API pubbliche (public)
Problematiche
§ Gestione delle informazioni
§ Perdita di controllo diretto
§ Aterritorialità
§ Cambio di finalità
API
35. 35
REST = architettura per la progettazione di un sistema, non è legato a un
protocollo in particolare ma a un modo di progettare concreto, ben definito e
standardizzato, di cui non esistono linee guida implementative, ma solo un
insieme di linee guida per la realizzazione di una “architettura di sistema”.
Con la filosofia REST si vogliono esporre delle risorse e la loro elaborazione.
L'architettura REST non è legata solamente al web, anzi solo negli ultimi anni,
con l'avvento dei web service, è divantata famosa.
Principi da rispettare
• Identificazione delle risorse
• Utilizzo esplicito dei metodi
• Risorse autodescrittive
• Collegamenti tra risorse
• Comunicazione senza stato
REST
36. 36
Identificazione delle risorse
Si intende un qualsiasi elemento oggetto di elaborazione. Per fare qualche
esempio concreto, una risorsa può essere un cliente, un libro, un articolo, un
qualsiasi oggetto su cui è possibile effettuare operazioni.
Ciascuna risorsa deve essere identificata univocamente (URI).
Risorse autodescrittive
Il formato dell'URI deve descrivere la risora e il singolo elemento
Utilizzo esplicito dei metodi
Utilizzare al meglio il protocollo per rappresentare le operazioni sulle
risorse (non per forza HTTP)!
Le risorse REST sono stateless
REST
37. 37
Identificato il protocollo HTTP per la comunicazione si sfruttanno i suoi metodi
per mappare delle azioni da compiere sulle risorse. Tipicamente i metodi scelti
sono GET, POST, PUT e DELETE.
In un contesto RESTful sappiamo già a priori come ottenere la rappresentazione
di una risorsa. In altre parole, questo principio REST stabilisce una mappatura
uno a uno tra le tipiche operazioni CRUD (creazione, lettura, aggiornamento,
eliminazione di una risorsa) e i metodi HTTP.
REST API
38. 38
Le risorse restiuite non sono direttamente i record di una tabella ma la loro
rappresentazione dipende dall'implementazione del web service, anche il formato
può dipendere dalla richiesta del client e/o dall'implementazione del servizio.
I principi REST non impongono vincoli su come rappresentare le risposte, ma è
bene affidarsi ad uno standard (JSON o XML). Il tipo di risposta può essere
richiesta dal client durante la richiesta della risorsa.
REST API
Esempio di richiesta proveniente da GET per ottenere la risorsa clienti con id
1234 la cui risposta accettata dal client deve seguire il formato XML con DTD
vnd.myapp.client.
39. 39
Le risorse restiuite devono essere collegate tra di loro, questo perchè la
struttura della API si basa sul concetto di autoconsistenza, pertanto è bene
sfruttare gli URI per accedere alle risorse collegate, semplicemente seguendo i
link delle risorse restituite.
REST API
Ogni richiesta è stateless, dato che il protocollo HTTP non ha una storia delle
richieste, ciascuna richiesta non ha alcuna relazione con le richieste
precedenti e successive. Lo stesso principio si applica ad un Web Service
RESTful, cioè le interazioni tra client e server devono essere senza stato. E'
vietato tenere traccia dello stato lato server, l'applicazione può fare ciò che
vuole.
40. 40
La sicurezza di un sistema REST coinvolge i seguenti aspetti:
- l’autenticazione, cioè la capacità di identificare le parti coinvolte (client
o altri server in caso di architettura distribuita) in una comunicazione
- l’autorizzazione, cioè la concessione dei diritti di accesso ad una risorsa in
base all’identità della parte richiedente
- la fiducia, cioè la capacità di confidare nel risultato di un’operazione,
come ad esempio l’autenticazione o l’autorizzazione, eseguita da terze parti
- la riservatezza, cioè la capacità di mantenere l’informazione privata durante
la trasmissione o la memorizzazione
- l’integrità, cioè la capacità di prevenire che l’informazione possa essere
modificata da terzi
REST API - SICUREZZA
41. 41
L’approccio REST è largamente basato sul protocollo HTTP e la gestione della
sicurezza ne eredita le caratteristiche ormai collaudate.
Per gestire l'identità si fa affidamento all'HTTP Basic Authentication (Base64)
o HTTP Digest Authentication che con l'accoppiata al protocollo SSL cripta anche
le informazioni che vengono scambiate in rete. L’adozione di HTTPS garantisce la
riservatezza e l’integrità nella trasmissione delle informazioni, coprendo gli
altri aspetti di sicurezza.
Delegare ad un servizio esterno il compito di gestire i client (OpenID e OAuth2).
E' importante associare codice di errore HTTP con gli errori che si creano, nel
modo più specifico possibile.
REST API - SICUREZZA
42. 42
L’uso di un framework può semplificare l’implementazione di un Web Service,
permettendoci di concentrarci sulla logica applicativa senza pensare ai dettagli
relativi alla presentazione del servizio ed alla comunicazione con il client.
Un framework dovrebbe mettere a disposizione un sistema di URI Routing per
mappare un URI di una risorsa a una logica da noi implementata.
Un framework REST si occupa dei dettagli della comunicazione tra client e server,
separando la logica di gestione (business logic) della risorsa dagli aspetti
della comunicazione. Il framework deve richiedere di specificare il codice da
eseguire in corrispondenza a ciascun metodo HTTP.
Un framework prevede la standardizzazione delle risorse in formati predefiniti
(Atom xml o JSON) ma consente anche l'implementazione di un formato specifico.
Un framework potrebbe mettere a disposizione funzionalità di supporto come OAuth
e OpenID.
La scelta del framework è legata al linguaggio di programmazione e dalle
funzionalità che offre.
REST API - FRAMEWORK
43. 43
SITOGRAFIA API
Un elenco di risorse per approfondire quanto visto in
precedenza
http://www.html.it/pag/19596/i-principi-dellarchitettura-restful/
http://www.html.it/pag/19602/rappresentazione-uri-e-metodi-di-un-web-
service-restful/
http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
#fig_5_8