SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
Marco Breveglieri
Chi sono
Marco Breveglieri
Software & Web Developer @ABLS Team
Blogger (www.compilaquindiva.com)
Host @Delphi Podcast (www.delphipodcast.com)
and sushi eater! 🍣
Premessa sulle Web API
Le sfide di oggi
• Internet Scale Application
• Cloud-based Application
• Tipologie variegate di
device e di "form factor"
• Sistemi operativi
eterogenei
Cosa intendiamo per Web API?
"Non è tutto oro
ciò che è HTTP…"
Web API *non* è un Web Service
POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPrice xmlns:m="https://www.w3schools.com/prices">
<m:Item>Apples</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
POST http://www.myservice.com/getApplePrices
Web API *non* è (solo) JSON
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup
Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to
create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
POST http://www.myservice.com/getGlossaryTerms
<!DOCTYPE glossary PUBLIC "-//OASIS//DTD DocBook
V3.1//EN">
<glossary><title>example glossary</title>
<GlossDiv><title>S</title>
<GlossList>
<GlossEntry ID="SGML" SortAs="SGML">
<GlossTerm>Standard Generalized Markup
Language</GlossTerm>
<Acronym>SGML</Acronym>
<Abbrev>ISO 8879:1986</Abbrev>
<GlossDef>
<para>A meta-markup language, used to
create markup
languages such as DocBook.</para>
<GlossSeeAlso OtherTerm="GML">
<GlossSeeAlso OtherTerm="XML">
</GlossDef>
<GlossSee OtherTerm="markup">
</GlossEntry>
</GlossList>
</GlossDiv>
</glossary>
Il protocollo HTTP
• HTTP è un application layer
protocol di prima classe
• Nasce per lo scambio di una
singola informazione
(a differenza di altri protocolli)
• E' facilmente leggibile poiché
richiesta/risposta sono in
formato testuale
• Su tale protocollo si fonda il
servizio più usato nel mondo:
il Web!
Accesso alle risorse
• HTTP non è un protocollo RPC (Remote Procedure Call)
• HTTP usa gli URI per identificare le risorse
Schema Host Port Resource Query
http://theagency.com:8080/agents?id=1
Verbi HTTP
• HTTP definisce un insieme
di verbi che introducono il
concetto di "azione" su una
risorsa
• Nel pacchetto della
richiesta, il verbo precede
l'URI della risorsa
• I comandi più usati si
possono mappare alle
classiche operazioni CRUD
GET
POST
PUT
DELETE
PATCH
HEAD
OPTIONS
TRACE
CONNECT
1xx Informational
2xx Success
3xx Redirection
4xx Client Error
5xx Server Error
Status Code
• I codici di stato (Status
Code) descrivono il risultato
dell'azione nel tentativo (da
parte del server) di
soddisfare la richiesta
• Vengono restituiti nel
pacchetto di risposta
assieme a una descrizione e
a un'eventuale contenuto
• Sono suddivisi per tipologia
Content Negotiation
• HTTP è nato per trasferire ipertesti,
ovvero documenti HTML
• Le pagine HTML contengono
riferimenti a risorse esterne
(immagini, video, ecc.)
• HTTP consente al client di specificare
nella richiesta il formato (o i formati)
attesi nella risposta usando lo
standard MIME
• HTTP supporta diverse intestazioni
(Accept-*) e diverse modalità (es.
querystring) per selezionare le
caratteristiche della risposta
Quindi una Web API…
• Si basa sul protocollo HTTP e ne
sfrutta le caratteristiche
• Espone dati sottoforma di
risorse accessibili tramite URI
• Consente di eseguire
operazioni sui dati tramite i
verbi HTTP
• Può essere interrogata tramite
AJAX dalle pagine Web e dalle
SPA (Single Page Application)
Le Web API sono accessibili da
• Applicazioni desktop
• Applicazioni mobile
• Web API e applicazioni
Web (proprie o anche
di terze parti)
• Qualsiasi cosa che parli
HTTP(S)
JSON: JavaScript Object Notation
• Rappresenta lo standard di
fatto per la serializzazione
di dati da/al server
• Viene spesso preferito
all'XML perché leggero e
compatto
• Struttura e tantissimi client
sul sito ufficiale:
http://json.org/
Quanto è REST una Web API?
Richardson Maturity Model
• Level 0 - Uso di HTTP
• Level 1 - Risorse
• Level 2 - Verbi HTTP
• Level 3 - Hypermedia Controls
https://martinfowler.com/articles/
richardsonMaturityModel.html
Consumo di Web API in Delphi
REST Client Components
Un set di componenti
orientati al colloquio
con Web API REST.
TRESTClient
Implementa la
connessione all'endpoint
REST per l'invio delle
richieste.
• Specificare valori per gli header
HTTP
• Aggancia i sistemi di
autenticazione richiesti
• Fornisce l'URL di base da
utilizzare per tutte le richieste
da inviare
• Recupera e salva le risposte
ricevute
• Consente di configurare il proxy
TRESTRequest
Implementa la specifica
richiesta HTTP da
inviare all'endpoint.
• Replica molte delle proprietà
del RESTClient
• Supporta la valorizzazione dei
parametri da sostituire nell'URL
• Si può associare al componente
TRESTResponse in cui
memorizzare la risposta
ricevuta
• E' possibile inviare richieste
anche a designtime!
TRESTResponse
Memorizza il contenuto
della risposta ricevuta a
fronte della richiesta.
• Mantiene l'ultima
risposta ricevuta
dall'endpoint
• Indica il Content-Type
comunicato dal
server per indicare il
formato dei dati.
TRESTResponseDataSetAdapter
Converte la risposta
ricevuta dalla REST API
in una tipica struttura
tabellare.
• Esegue il parsing del
pacchetto JSON ricevuto
• Converte i dati JSON nei
record di un DataSet
• Appiattisce all'occorrenza
gli oggetti JSON per creare
campi semplici
• Ideale per vedere dati live e
reali a designtime (grazie a
FDMemTable)
REST Debugger (companion tool)
• Consente di testare Web API,
proprie o di altri
• Consente di definire il contenuto
della richiesta, header compresi
• Visualizza la risposta ricevuta in
formato JSON
• Utilizza i componenti REST Client
per convertire JSON in un DataSet
da visualizzare
• E' possibile copiare componenti e
loro proprietà da incollare nell'IDE!
Ricetta per costruire un prototipo
• Leggere la
documentazione
• Testare le chiamate
all'API con REST
Debugger
• Incollare la
configurazione in un
progetto Delphi
• Sperimentare
API!
Spotify
URL
https://api.spotify.com
• Consente di accedere alla
base dati degli artisti,
degli album e dei brani
• Consente di gestire i
propri dispositivi
NASA Open Data
URL
https://api.nasa.gov
Vedi anche
http://blog.marcocantu.com/blog/2017-january-
fun-delphi-contest-nasa-api.html
Media Wiki
URL
https://en.wikipedia.org
/api/rest_v1
WordPress
URL
http://v2.wp-api.org/
Guida (reference):
http://v2.wp-api.org/reference
Google Maps (http://maps.google.it)
iTunes API
(https://affiliate.itunes.apple.com/resources/documentation
/itunes-store-web-service-search-api/)
JSON Placeholder (https://jsonplaceholder.typicode.com/)
HTTP Status… Cats (https://http.cat/)
REST Trading API (https://labs.ig.com/rest-trading-api-guide)
…e tante altre!
…e ancora
Thanks!
🙏

Weitere ähnliche Inhalte

Was ist angesagt?

Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Eugenio Minardi
 
Novità in Visual Studio 2012
Novità in Visual Studio 2012Novità in Visual Studio 2012
Novità in Visual Studio 2012Sinergia Totale
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Massimo Bonanni
 
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101DotNetCampus
 
Realizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e AngularRealizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e AngularMichele Aponte
 
Introduzione alla localizzazione web
Introduzione alla localizzazione webIntroduzione alla localizzazione web
Introduzione alla localizzazione webQabiria
 
Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017MongoDB
 
Wordpress Boilerplate Plugin Powered
Wordpress Boilerplate Plugin PoweredWordpress Boilerplate Plugin Powered
Wordpress Boilerplate Plugin PoweredDaniele Scasciafratte
 
ASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesAndrea Dottor
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Andrea Agnoletto
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiAndrea Dottor
 
Win05 accesso ai dati in win 8
Win05   accesso ai dati in win 8Win05   accesso ai dati in win 8
Win05 accesso ai dati in win 8DotNetCampus
 

Was ist angesagt? (20)

Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS
 
Novità in Visual Studio 2012
Novità in Visual Studio 2012Novità in Visual Studio 2012
Novità in Visual Studio 2012
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
Web sockets
Web socketsWeb sockets
Web sockets
 
Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!
 
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101
 
Asp net (versione 1 e 2)
Asp net (versione 1 e 2)Asp net (versione 1 e 2)
Asp net (versione 1 e 2)
 
Realizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e AngularRealizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e Angular
 
Introduzione alla localizzazione web
Introduzione alla localizzazione webIntroduzione alla localizzazione web
Introduzione alla localizzazione web
 
Web api 2.0
Web api 2.0Web api 2.0
Web api 2.0
 
8. Architetture web
8. Architetture web8. Architetture web
8. Architetture web
 
Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017
 
Asp.Net MVC 5
Asp.Net MVC 5Asp.Net MVC 5
Asp.Net MVC 5
 
Wordpress Boilerplate Plugin Powered
Wordpress Boilerplate Plugin PoweredWordpress Boilerplate Plugin Powered
Wordpress Boilerplate Plugin Powered
 
ASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesASP.NET Core - Razor Pages
ASP.NET Core - Razor Pages
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivati
 
Win05 accesso ai dati in win 8
Win05   accesso ai dati in win 8Win05   accesso ai dati in win 8
Win05 accesso ai dati in win 8
 

Ähnlich wie REST API fantastiche e dove trovarle

Architetture web - Linguaggi e standard - Web server, application server, dat...
Architetture web - Linguaggi e standard - Web server, application server, dat...Architetture web - Linguaggi e standard - Web server, application server, dat...
Architetture web - Linguaggi e standard - Web server, application server, dat...Fulvio Corno
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Whymca
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDLuca Masini
 
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il MobileLe Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il MobileI.S.I.S. "Antonio Serra" - Napoli
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Andrea Dottor
 
Come funziona la navigazione Web
Come funziona la navigazione WebCome funziona la navigazione Web
Come funziona la navigazione Webextrategy
 
Applicazioni RESTful con ASP.NET Web Api
Applicazioni RESTful con ASP.NET Web ApiApplicazioni RESTful con ASP.NET Web Api
Applicazioni RESTful con ASP.NET Web ApiPietro Libro
 
Introduzione a Internet
Introduzione a InternetIntroduzione a Internet
Introduzione a Internetdadahtml
 
Smau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del ceroSmau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del ceroSMAU
 
Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Fabio Armani
 
Applicazioni web based
Applicazioni web basedApplicazioni web based
Applicazioni web basedMarco Liverani
 
Asp.net web api reloaded
Asp.net web api reloadedAsp.net web api reloaded
Asp.net web api reloadedPietro Libro
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...azuredayit
 
corso web developer - Introduzione al web
corso web developer - Introduzione al webcorso web developer - Introduzione al web
corso web developer - Introduzione al webRiccardo Piccioni
 
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!DotNetCampus
 
Signal r to the-max
Signal r to the-maxSignal r to the-max
Signal r to the-maxDotNetCampus
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-maxDotNetCampus
 

Ähnlich wie REST API fantastiche e dove trovarle (20)

Architetture web - Linguaggi e standard - Web server, application server, dat...
Architetture web - Linguaggi e standard - Web server, application server, dat...Architetture web - Linguaggi e standard - Web server, application server, dat...
Architetture web - Linguaggi e standard - Web server, application server, dat...
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il MobileLe Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
 
Come funziona la navigazione Web
Come funziona la navigazione WebCome funziona la navigazione Web
Come funziona la navigazione Web
 
Applicazioni RESTful con ASP.NET Web Api
Applicazioni RESTful con ASP.NET Web ApiApplicazioni RESTful con ASP.NET Web Api
Applicazioni RESTful con ASP.NET Web Api
 
Introduzione a Internet
Introduzione a InternetIntroduzione a Internet
Introduzione a Internet
 
Wcf data services
Wcf data servicesWcf data services
Wcf data services
 
Corso Java 3 - WEB
Corso Java 3 - WEBCorso Java 3 - WEB
Corso Java 3 - WEB
 
Smau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del ceroSmau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del cero
 
Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)
 
Applicazioni web based
Applicazioni web basedApplicazioni web based
Applicazioni web based
 
Asp.net web api reloaded
Asp.net web api reloadedAsp.net web api reloaded
Asp.net web api reloaded
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
corso web developer - Introduzione al web
corso web developer - Introduzione al webcorso web developer - Introduzione al web
corso web developer - Introduzione al web
 
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
 
Signal r to the-max
Signal r to the-maxSignal r to the-max
Signal r to the-max
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-max
 

Mehr von Marco Breveglieri

Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiDelphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiMarco Breveglieri
 
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...Marco Breveglieri
 
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in DelphiMarco Breveglieri
 
Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016Marco Breveglieri
 
Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Marco Breveglieri
 
Reportage "RAD Studio XE2 World Tour"
Reportage "RAD Studio XE2 World Tour"Reportage "RAD Studio XE2 World Tour"
Reportage "RAD Studio XE2 World Tour"Marco Breveglieri
 

Mehr von Marco Breveglieri (7)

Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiDelphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
 
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
 
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
 
Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016
 
Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016
 
Reportage Delphi Day 2012
Reportage Delphi Day 2012Reportage Delphi Day 2012
Reportage Delphi Day 2012
 
Reportage "RAD Studio XE2 World Tour"
Reportage "RAD Studio XE2 World Tour"Reportage "RAD Studio XE2 World Tour"
Reportage "RAD Studio XE2 World Tour"
 

REST API fantastiche e dove trovarle

  • 2. Chi sono Marco Breveglieri Software & Web Developer @ABLS Team Blogger (www.compilaquindiva.com) Host @Delphi Podcast (www.delphipodcast.com) and sushi eater! 🍣
  • 4. Le sfide di oggi • Internet Scale Application • Cloud-based Application • Tipologie variegate di device e di "form factor" • Sistemi operativi eterogenei
  • 5. Cosa intendiamo per Web API? "Non è tutto oro ciò che è HTTP…"
  • 6. Web API *non* è un Web Service POST /item HTTP/1.1 Host: 189.123.255.239 Content-Type: text/plain Content-Length: 200 <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body> <m:GetPrice xmlns:m="https://www.w3schools.com/prices"> <m:Item>Apples</m:Item> </m:GetPrice> </soap:Body> </soap:Envelope> POST http://www.myservice.com/getApplePrices
  • 7. Web API *non* è (solo) JSON { "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": { "GlossEntry": { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": { "para": "A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso": ["GML", "XML"] }, "GlossSee": "markup" } } } } } POST http://www.myservice.com/getGlossaryTerms <!DOCTYPE glossary PUBLIC "-//OASIS//DTD DocBook V3.1//EN"> <glossary><title>example glossary</title> <GlossDiv><title>S</title> <GlossList> <GlossEntry ID="SGML" SortAs="SGML"> <GlossTerm>Standard Generalized Markup Language</GlossTerm> <Acronym>SGML</Acronym> <Abbrev>ISO 8879:1986</Abbrev> <GlossDef> <para>A meta-markup language, used to create markup languages such as DocBook.</para> <GlossSeeAlso OtherTerm="GML"> <GlossSeeAlso OtherTerm="XML"> </GlossDef> <GlossSee OtherTerm="markup"> </GlossEntry> </GlossList> </GlossDiv> </glossary>
  • 8. Il protocollo HTTP • HTTP è un application layer protocol di prima classe • Nasce per lo scambio di una singola informazione (a differenza di altri protocolli) • E' facilmente leggibile poiché richiesta/risposta sono in formato testuale • Su tale protocollo si fonda il servizio più usato nel mondo: il Web!
  • 9. Accesso alle risorse • HTTP non è un protocollo RPC (Remote Procedure Call) • HTTP usa gli URI per identificare le risorse Schema Host Port Resource Query http://theagency.com:8080/agents?id=1
  • 10. Verbi HTTP • HTTP definisce un insieme di verbi che introducono il concetto di "azione" su una risorsa • Nel pacchetto della richiesta, il verbo precede l'URI della risorsa • I comandi più usati si possono mappare alle classiche operazioni CRUD GET POST PUT DELETE PATCH HEAD OPTIONS TRACE CONNECT
  • 11. 1xx Informational 2xx Success 3xx Redirection 4xx Client Error 5xx Server Error Status Code • I codici di stato (Status Code) descrivono il risultato dell'azione nel tentativo (da parte del server) di soddisfare la richiesta • Vengono restituiti nel pacchetto di risposta assieme a una descrizione e a un'eventuale contenuto • Sono suddivisi per tipologia
  • 12. Content Negotiation • HTTP è nato per trasferire ipertesti, ovvero documenti HTML • Le pagine HTML contengono riferimenti a risorse esterne (immagini, video, ecc.) • HTTP consente al client di specificare nella richiesta il formato (o i formati) attesi nella risposta usando lo standard MIME • HTTP supporta diverse intestazioni (Accept-*) e diverse modalità (es. querystring) per selezionare le caratteristiche della risposta
  • 13. Quindi una Web API… • Si basa sul protocollo HTTP e ne sfrutta le caratteristiche • Espone dati sottoforma di risorse accessibili tramite URI • Consente di eseguire operazioni sui dati tramite i verbi HTTP • Può essere interrogata tramite AJAX dalle pagine Web e dalle SPA (Single Page Application)
  • 14. Le Web API sono accessibili da • Applicazioni desktop • Applicazioni mobile • Web API e applicazioni Web (proprie o anche di terze parti) • Qualsiasi cosa che parli HTTP(S)
  • 15. JSON: JavaScript Object Notation • Rappresenta lo standard di fatto per la serializzazione di dati da/al server • Viene spesso preferito all'XML perché leggero e compatto • Struttura e tantissimi client sul sito ufficiale: http://json.org/
  • 16. Quanto è REST una Web API? Richardson Maturity Model • Level 0 - Uso di HTTP • Level 1 - Risorse • Level 2 - Verbi HTTP • Level 3 - Hypermedia Controls https://martinfowler.com/articles/ richardsonMaturityModel.html
  • 17. Consumo di Web API in Delphi
  • 18. REST Client Components Un set di componenti orientati al colloquio con Web API REST.
  • 19. TRESTClient Implementa la connessione all'endpoint REST per l'invio delle richieste. • Specificare valori per gli header HTTP • Aggancia i sistemi di autenticazione richiesti • Fornisce l'URL di base da utilizzare per tutte le richieste da inviare • Recupera e salva le risposte ricevute • Consente di configurare il proxy
  • 20. TRESTRequest Implementa la specifica richiesta HTTP da inviare all'endpoint. • Replica molte delle proprietà del RESTClient • Supporta la valorizzazione dei parametri da sostituire nell'URL • Si può associare al componente TRESTResponse in cui memorizzare la risposta ricevuta • E' possibile inviare richieste anche a designtime!
  • 21. TRESTResponse Memorizza il contenuto della risposta ricevuta a fronte della richiesta. • Mantiene l'ultima risposta ricevuta dall'endpoint • Indica il Content-Type comunicato dal server per indicare il formato dei dati.
  • 22. TRESTResponseDataSetAdapter Converte la risposta ricevuta dalla REST API in una tipica struttura tabellare. • Esegue il parsing del pacchetto JSON ricevuto • Converte i dati JSON nei record di un DataSet • Appiattisce all'occorrenza gli oggetti JSON per creare campi semplici • Ideale per vedere dati live e reali a designtime (grazie a FDMemTable)
  • 23. REST Debugger (companion tool) • Consente di testare Web API, proprie o di altri • Consente di definire il contenuto della richiesta, header compresi • Visualizza la risposta ricevuta in formato JSON • Utilizza i componenti REST Client per convertire JSON in un DataSet da visualizzare • E' possibile copiare componenti e loro proprietà da incollare nell'IDE!
  • 24. Ricetta per costruire un prototipo • Leggere la documentazione • Testare le chiamate all'API con REST Debugger • Incollare la configurazione in un progetto Delphi • Sperimentare
  • 25. API!
  • 26. Spotify URL https://api.spotify.com • Consente di accedere alla base dati degli artisti, degli album e dei brani • Consente di gestire i propri dispositivi
  • 27. NASA Open Data URL https://api.nasa.gov Vedi anche http://blog.marcocantu.com/blog/2017-january- fun-delphi-contest-nasa-api.html
  • 30. Google Maps (http://maps.google.it) iTunes API (https://affiliate.itunes.apple.com/resources/documentation /itunes-store-web-service-search-api/) JSON Placeholder (https://jsonplaceholder.typicode.com/) HTTP Status… Cats (https://http.cat/) REST Trading API (https://labs.ig.com/rest-trading-api-guide) …e tante altre! …e ancora
  • 31.