SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
Iscriviti al gruppo Linkedin WSO2 Italia per entrare nella community italiana,
conoscere la tecnologia WSO2 e condividere strategie di integrazione e use cases
Cos’è una API “di successo”?
● Production grade: progettata per essere sfruttata in maniera
intensiva e frequente e durevole nel tempo
● API non è il servizio: è il biglietto da visita con la quale si
presenta la propria applicazione o parte di essa
● È studiata per essere conforme all'architettura
● La sua dissemination deve essere in grado di raggiungere tutte
le figure professionali
● Deve essere adeguata per essere utilizzabile su strumenti di
collaborazione
Architetture e APIs
● Non si sceglie mai lo stile architetturale del proprio sistema a valle della
scelta tecnologica, bensì il contrario!
● Il primo passo per definire una buona architettura è la comprensione
della data exchange tra i sistemi
● Lo sviluppo di una buona API è alla base della data exchange: l’API è
un contratto a supporto della data exchange
● L’API è prima di tutto un tema di natura architetturale
Architetture e APIs
● Uno stile architetturale è determinato dalle proprietà
dell’architettura
● Le proprietà dell’architettura sono la conseguenza
dei vincoli imposti per l’architettura (vincoli di
business, tecnici o, anche, sociali)
● Come ci sono diversi stili architetturali, esistono
diversi stili di APIs
● Non esiste un stile architetturale universalmente
valido per tutte le esigenze…
...e per le APIs?
Tipologie di APIs
API Timeline
< 1999
1991: CORBA
1993: RDA
1998: XML-RPC
SOAP
1999
2000
REST
2015
GRAPHQL
2005: JSON-RPC
2007: ODATA
2005-2007
gRPC
2016
Tipologie di APIs
API Styles
W
E
B
A
P
I
s
RPC
APIs STREAM
ING
APIs
QUERY APIs
F
L
A
T
F
I
L
E
S
A
P
I
s
Tipologie di APIs
SOAP vs REST vs GraphQL vs gRPC
SOAP REST GraphQL gRPC
HTTP, SMTP, FTP,...
Precursore di successo delle web
APIs
Numerose specifiche di I/O
Natura prolissa XML + namespaces
+ text-based = messaggi
voluminosi -> minore efficienza
HTTP
Semplice da interpretare
Produttività pressoché immediata
Request/response in HTTP 1.1:
meno efficiente (vedi HTTP/2)
Struttura dati della response
immutabile
Adeguato sia per server-to-server
che client-to-server (soprattutto per
state machine/CRUD)
Flessibile
Perfetto per comunicazioni
client-to-server
Adatto per reportistica
Non efficiente per comunicazioni
server-to-server
Deve prevedere un cambio di
mentalità
HTTP/2
Binario (non text-based): protobuf
Bi-direzionale su singola
connessione (streaming)
Perfetto per comunicazioni
server-to-server
Non adeguato per comunicazioni
client-to-server (non tutte le
applicazioni supportano HTTP/2)
Necessario coordinamento in caso
di cambiamento della struttura del
.protobuf
Tipologie di API
...e quindi?
“THERE IS NO UNIVERSAL BEST API STYLE. THERE IS ALWAYS A BEST API
STYLE FOR YOUR PROBLEM”
Per un'azienda che è avversa al rischio e vuole utilizzare un formato collaudato oppure preferisce
uniformare un unico stile di API per tutte le comunicazioni, REST è probabilmente più adatto per
soddisfare la necessità
Se la stessa società ha bisogno, per una propria webapp, di fornire la massima flessibilità per supportare
interazioni tra client e server sia sincrone che asincrone o necessita di effettuare parecchie interazioni
query-style su dati distribuiti, GraphQL è da tenere in considerazione
Se si necessita di implementare una data exchange più efficiente e real-time, sia mono-direzionale che
bi-direzionale (streaming), gRPC è la soluzione più opportuna
Approccio allo sviluppo di APIs:
Design-first vs Code-first
Design API Document API Code
Code Design API Document API
● Adeguato per approccio sia agile che
waterfall
● Continuo scambio con gli stakeholders/utenti
finali PRIMA di sviluppare codice
● API parlanti per qualunque attore
● Comunicazione e specifiche chiare
● Adeguato per API da esporre pubblicamente
● Non adeguato per approccio agile
● L’API rispecchia il codice: costi per riscrittura
del codice se API non adeguata alle
aspettative
● Bassa standardizzazione
● Adeguato per approccio speed to delivery e
per applicazioni legacy
● Scambio con gli stakeholders macchinoso
REST API Standardization
Naming convention
Business terms
(vedi approccio Domain-Driven: ubiquitous
language). Termini chiari e facilmente
comprensibili
KO: controller-impl, Dao, Dto, main, RestRequest, RestResponse,...
OK: valid-orders (or ValidOrders), Cart, Payments, Fault, Result,...
Oggetto di business (o main object)
compliant
Nome degli elementi compliant allo scopo
dell’API
GET /order-details: $.OrderDetails.List[]
Resources al plurale KO: GET /order (senza ulteriori parametri: chi legge lo swagger riesce a capire se
l’api restituirà un singolo ordine or restituisce più ordini?)
OK: GET /orders + GET /orders/1 (si sa, a colpo d’occhio, che nel primo caso
restituisce tutti gli ordini, nel secondo solo uno)
REST API Standardization
Structure convention
Hierarchical URI
per identificare il contesto (vedi approccio
Domain-Driven: bounded context)
/sales/order/item
/finance/invoice/item
Evitare ridondanze /sales/sales-order/validated/valid-orders
Evitare ovvietà /api/sales/resource/orders
Non usare HTTP verbs in URI KO: GET /orders/get or POST /orders/doUpsert
OK: GET /orders (per retrieve) and POST /orders (per upsert)
REST API Standardization
Structure convention
Nested resources
Approccio deprecato. Sfruttare url parameters
invece delle risorse innestate per creare relazioni
KO: GET /orders/customer/999/invoice/12345
OK: GET /orders?customerId=999&invoiceId=12345
Abuso safe HTTP methods Usare GET per fare una DELETE
Error Handling ● Sfruttare (adeguatamente) HTTP error codes: 5xx per errori server-side,
4xx per errori client-side (con un 400 bad request, il client non DOVREBBE
ritentare la chiamata)
● Strutture di Fault univoche e parlanti
{
"fault" : {
"errorCode" : "ERR-00001",
"errorMsg" : "The combination of given parameter is not correct",
"errorClass" : "ParameterException",
"errorDetails" : { "error": "Magnitude XYZ is not correct for the given pod 123"}
}
}
REST API Standardization
Alcuni suggerimenti
● Sfruttare sistemi di versioning delle API
● Appoggiarsi a tool per la definizione di regole di
standardizzazione (es: SwaggerHub*)
● Sfruttare strumenti di collaboration per evolvere le API
*https://swagger.io/tools/swaggerhub/
API Products
● E’ un meccanismo di bundling delle API
● Definire un bundle di risorse selezionate da una o
più API così da essere esposte come una API
separata
● Creare diverse API come combinazione di quelle già
esistenti
● Fornire un prodotto (API) su misura per particolari
stakeholders
https://apim.docs.wso2.com/en/latest/design/create-api-product/api-product-overview/
Throttling e Rate Limit
● Non confondere throttling/rate limit policies con resiliency
patterns
● Throttling/Rate limit: limita il numero di risorse utilizzabili da un
client (o da una sua componente o servizio) così che il proprio
servizio continui a funzionare soddisfando le SLA anche in
situazioni di pieno carico
● Resiliency: è la capacità di un sistema di riprendere senza
impatti sui consumers la sua funzionalità a seguito di fallimenti
Throttling e Rate Limit
● Rate limit: impone un numero massimo di richieste che possono
giungere all’API in una determinata finestra di tempo. L’API rifiuta
le richieste che superano quel limite
● Throttling: accoda quelle richieste giunte all’API che superano un
determinato limite ed eventualmente le processa nella finestra
temporale successiva. L’API può rifiutare le richieste dopo un
certo numero di tentativi
● Rate limit e throttling limitano entrambi l’accesso all’API: il primo
impone un limite fisso di accesso, il secondo controlla le richieste
all’API livellando i picchi di traffico
Throttling e Rate Limit
WSO2 Throttling/Rate Limit Policies
Application-level: Per-token quota
Applied to users of the applications
Applied to a single user (token) accessing all APIs of the
application (es: 10perMin)
Subscription-level: Subscription tiers
Applied to applications that consume that API
Applied across all users of the application.
A shared quota among all users of an application that access
that API (es: 10KperMin)
Subscription-level: API published
Applied to single API
● Quota Limits: Request count (es: 5KperMin) or Request
Bandwith (es: 500 MBperHour)
● Burst Control: Spike Arrest Policy
API-level
Applied to API and API resources
● Limit on Resource (es: 2KperMin)
● Request Filtering (IP address/Address range, HTTP
Request Headers, JWT Claims, Query params)
Maximum backend throughput
Applied to full backend system/service
In TPS
Throttling e Rate Limit
WSO2 Throttling/Rate Limit Policies
Monitoring
● Monitorare il traffico e il lineage della propria API
● API è il biglietto da visita dell’azienda (o parte di
essa): monitorare l’API è monitorare l’azienda
● Capire chi chiama cosa e come
● Avere una visione near-realtime dell’andamento di
un’azienda api-centric
Summary
● API è un tema di natura architetturale
● Non esiste uno stile di API valido per tutte le
esigenze
● Design-first
● Standardizzazione e naming convention
● Garantire l’affidabilità delle proprie API
● Combinare le soluzioni per un’offerta su misura
● Monitoring
Q&A?
GRAZIE!!!
Prossimo appuntamento:
Contatti
DOVE SIAMO
Milano - Torino - Padova - Roma
TELEFONO
Torino +39-011-0120371
EMAIL
wso2.sales@profesia.it
@

Contenu connexe

Tendances

Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP Way
Luca Milan
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
DotNetCampus
 

Tendances (20)

Cognitive Services & LUIS
Cognitive Services & LUISCognitive Services & LUIS
Cognitive Services & LUIS
 
Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...
Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...
Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...
 
Azure functions deep dive - Giorgio Di Nardo - Codemotion Rome 2017
Azure functions deep dive - Giorgio Di Nardo - Codemotion Rome 2017Azure functions deep dive - Giorgio Di Nardo - Codemotion Rome 2017
Azure functions deep dive - Giorgio Di Nardo - Codemotion Rome 2017
 
Angular and beyond
Angular and beyondAngular and beyond
Angular and beyond
 
Ibm bluemix r pozzi
Ibm bluemix r pozziIbm bluemix r pozzi
Ibm bluemix r pozzi
 
.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile
 
Introduzione a Service Fabric e Actor Model
Introduzione a Service Fabric e Actor ModelIntroduzione a Service Fabric e Actor Model
Introduzione a Service Fabric e Actor Model
 
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
 
Angular in produzione: Best Practices e Performance Improvements
Angular in produzione:Best Practices e Performance ImprovementsAngular in produzione:Best Practices e Performance Improvements
Angular in produzione: Best Practices e Performance Improvements
 
Invisible infrastructures
Invisible infrastructuresInvisible infrastructures
Invisible infrastructures
 
Quando un software è di qualità? - Agile Venture Milano 2020
Quando un software è di qualità? - Agile Venture Milano 2020Quando un software è di qualità? - Agile Venture Milano 2020
Quando un software è di qualità? - Agile Venture Milano 2020
 
ASP.NET AND Azure Function
ASP.NET AND Azure FunctionASP.NET AND Azure Function
ASP.NET AND Azure Function
 
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
 
Presentazione aziendale BBC Technologies 2021
Presentazione aziendale BBC Technologies 2021Presentazione aziendale BBC Technologies 2021
Presentazione aziendale BBC Technologies 2021
 
VSTS - L'ALM a portata di mano
VSTS - L'ALM a portata di manoVSTS - L'ALM a portata di mano
VSTS - L'ALM a portata di mano
 
Wso2 motivation
Wso2 motivationWso2 motivation
Wso2 motivation
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP Way
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
WSO2 MASTER CLASS ITALIA #12 - Architettura API led: business multicanale
WSO2 MASTER CLASS ITALIA #12 - Architettura API led: business multicanaleWSO2 MASTER CLASS ITALIA #12 - Architettura API led: business multicanale
WSO2 MASTER CLASS ITALIA #12 - Architettura API led: business multicanale
 
Roberta randazzo gnulinuxmeeting 2016
Roberta randazzo gnulinuxmeeting 2016Roberta randazzo gnulinuxmeeting 2016
Roberta randazzo gnulinuxmeeting 2016
 

Similaire à WSO2 MASTER CLASS ITALIA #9 - Come creare API di successo

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
 
Dal cloud al mobile con tecnologie Google
Dal cloud al mobile con tecnologie GoogleDal cloud al mobile con tecnologie Google
Dal cloud al mobile con tecnologie Google
Diego Giorgini
 

Similaire à WSO2 MASTER CLASS ITALIA #9 - Come creare API di successo (20)

Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality Code
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ Code
 
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
 
.NET Microservices
.NET Microservices.NET Microservices
.NET Microservices
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPC
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
 
RESTful "il web programmabile"
RESTful "il web programmabile"RESTful "il web programmabile"
RESTful "il web programmabile"
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web Service
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
 
Microservices architecture & Service Fabric
Microservices architecture & Service FabricMicroservices architecture & Service Fabric
Microservices architecture & Service Fabric
 
Spcoop.ver 1.4
Spcoop.ver 1.4Spcoop.ver 1.4
Spcoop.ver 1.4
 
Dal cloud al mobile con tecnologie Google
Dal cloud al mobile con tecnologie GoogleDal cloud al mobile con tecnologie Google
Dal cloud al mobile con tecnologie Google
 
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
 
Presentazione Unibo
Presentazione UniboPresentazione Unibo
Presentazione Unibo
 
WSO2 ITALIA SMART TALK #5 - APIFICATION: OPPORTUNITÀ DELLE ORGANIZZAZIONI MOD...
WSO2 ITALIA SMART TALK #5 - APIFICATION: OPPORTUNITÀ DELLE ORGANIZZAZIONI MOD...WSO2 ITALIA SMART TALK #5 - APIFICATION: OPPORTUNITÀ DELLE ORGANIZZAZIONI MOD...
WSO2 ITALIA SMART TALK #5 - APIFICATION: OPPORTUNITÀ DELLE ORGANIZZAZIONI MOD...
 
Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013
Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013
Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013
 
Progettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWSProgettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWS
 
LARUS 10th - Rampado Omar
LARUS 10th - Rampado OmarLARUS 10th - Rampado Omar
LARUS 10th - Rampado Omar
 

Plus de Profesia Srl, Lynx Group

PA NON TI DEMO: weModI e Interoperabilità delle PA...
PA NON TI DEMO: weModI e Interoperabilità delle PA...PA NON TI DEMO: weModI e Interoperabilità delle PA...
PA NON TI DEMO: weModI e Interoperabilità delle PA...
Profesia Srl, Lynx Group
 

Plus de Profesia Srl, Lynx Group (20)

2. Guidare il futuro, l'approccio di WSO2 Italia alle tendenze tecnologiche e...
2. Guidare il futuro, l'approccio di WSO2 Italia alle tendenze tecnologiche e...2. Guidare il futuro, l'approccio di WSO2 Italia alle tendenze tecnologiche e...
2. Guidare il futuro, l'approccio di WSO2 Italia alle tendenze tecnologiche e...
 
Profesia 2023 State of the Software Supply Chain Talk.pdf
Profesia 2023 State of the Software Supply Chain Talk.pdfProfesia 2023 State of the Software Supply Chain Talk.pdf
Profesia 2023 State of the Software Supply Chain Talk.pdf
 
Web content design: creare contenuti di qualità con Newired
Web content design: creare contenuti di qualità con NewiredWeb content design: creare contenuti di qualità con Newired
Web content design: creare contenuti di qualità con Newired
 
In Estra la Digital Transformation parte dalla User Experience del Cliente
In Estra la Digital Transformation parte dalla User Experience del ClienteIn Estra la Digital Transformation parte dalla User Experience del Cliente
In Estra la Digital Transformation parte dalla User Experience del Cliente
 
Omnichannel API integration in luxury market by Gianvito Rossi
Omnichannel API integration in luxury market by Gianvito RossiOmnichannel API integration in luxury market by Gianvito Rossi
Omnichannel API integration in luxury market by Gianvito Rossi
 
API Transformation in Crédit Agricole Italia
API Transformation in Crédit Agricole ItaliaAPI Transformation in Crédit Agricole Italia
API Transformation in Crédit Agricole Italia
 
Verso l’universo e oltre
Verso l’universo e oltreVerso l’universo e oltre
Verso l’universo e oltre
 
WSO2 ITALIA SMART TALK #10 - Interoperability nelle utility, un caso reale
WSO2 ITALIA SMART TALK #10 - Interoperability nelle utility, un caso realeWSO2 ITALIA SMART TALK #10 - Interoperability nelle utility, un caso reale
WSO2 ITALIA SMART TALK #10 - Interoperability nelle utility, un caso reale
 
WSO2 ITALIA SMART TALK #7 - Installare WSO2 in AWS: tips and tricks
 WSO2 ITALIA SMART TALK #7 - Installare WSO2 in AWS: tips and tricks WSO2 ITALIA SMART TALK #7 - Installare WSO2 in AWS: tips and tricks
WSO2 ITALIA SMART TALK #7 - Installare WSO2 in AWS: tips and tricks
 
WSO2 ITALIA SMART TALK #3 WSO2 IS NEW FEATURE
 WSO2 ITALIA SMART TALK #3 WSO2 IS NEW FEATURE WSO2 ITALIA SMART TALK #3 WSO2 IS NEW FEATURE
WSO2 ITALIA SMART TALK #3 WSO2 IS NEW FEATURE
 
WSO2 ITALIA SMART TALK #9 - WSO2 IDENTITY SERVER & SPID: UN CASO REALE
WSO2 ITALIA SMART TALK #9 - WSO2 IDENTITY SERVER & SPID: UN CASO REALEWSO2 ITALIA SMART TALK #9 - WSO2 IDENTITY SERVER & SPID: UN CASO REALE
WSO2 ITALIA SMART TALK #9 - WSO2 IDENTITY SERVER & SPID: UN CASO REALE
 
WSO2 ITALIA SMARTTALK #8 ASYNCAPI.pdf
WSO2 ITALIA SMARTTALK #8 ASYNCAPI.pdfWSO2 ITALIA SMARTTALK #8 ASYNCAPI.pdf
WSO2 ITALIA SMARTTALK #8 ASYNCAPI.pdf
 
WSO2 ITALIA SMART TALK #6 - Autenticazione User Centric: Identità digitale
WSO2 ITALIA SMART TALK #6 - Autenticazione User Centric: Identità digitaleWSO2 ITALIA SMART TALK #6 - Autenticazione User Centric: Identità digitale
WSO2 ITALIA SMART TALK #6 - Autenticazione User Centric: Identità digitale
 
WSO2 ITALIA SMART TALK #4 - Telefonica Use Case
WSO2 ITALIA SMART TALK #4 - Telefonica Use CaseWSO2 ITALIA SMART TALK #4 - Telefonica Use Case
WSO2 ITALIA SMART TALK #4 - Telefonica Use Case
 
WSO2 ITALIA SMART TALK 2023 #2- WSO2 APIM new Feature
WSO2 ITALIA SMART TALK 2023 #2- WSO2 APIM new FeatureWSO2 ITALIA SMART TALK 2023 #2- WSO2 APIM new Feature
WSO2 ITALIA SMART TALK 2023 #2- WSO2 APIM new Feature
 
PA NON TI DEMO: weModI e Interoperabilità delle PA...
PA NON TI DEMO: weModI e Interoperabilità delle PA...PA NON TI DEMO: weModI e Interoperabilità delle PA...
PA NON TI DEMO: weModI e Interoperabilità delle PA...
 
WSO2 ITALIA SMART TALK #1 - WSO2 diventa MODI e PDND compliant
WSO2 ITALIA SMART TALK #1 - WSO2 diventa MODI e PDND compliantWSO2 ITALIA SMART TALK #1 - WSO2 diventa MODI e PDND compliant
WSO2 ITALIA SMART TALK #1 - WSO2 diventa MODI e PDND compliant
 
WSO2 Oxygenate Italy 2022 CSI Piemonte. Marco Boero
WSO2 Oxygenate Italy 2022 CSI Piemonte. Marco BoeroWSO2 Oxygenate Italy 2022 CSI Piemonte. Marco Boero
WSO2 Oxygenate Italy 2022 CSI Piemonte. Marco Boero
 
WSO2 Oxygenate Italy 2022 Raiffeisen Information Service. Roberto Palmarin
WSO2 Oxygenate Italy 2022 Raiffeisen Information Service. Roberto PalmarinWSO2 Oxygenate Italy 2022 Raiffeisen Information Service. Roberto Palmarin
WSO2 Oxygenate Italy 2022 Raiffeisen Information Service. Roberto Palmarin
 
WSO2 Oxygenate Italy 2022 Matteo Bordin
WSO2 Oxygenate Italy 2022 Matteo BordinWSO2 Oxygenate Italy 2022 Matteo Bordin
WSO2 Oxygenate Italy 2022 Matteo Bordin
 

WSO2 MASTER CLASS ITALIA #9 - Come creare API di successo

  • 1.
  • 2. Iscriviti al gruppo Linkedin WSO2 Italia per entrare nella community italiana, conoscere la tecnologia WSO2 e condividere strategie di integrazione e use cases
  • 3. Cos’è una API “di successo”? ● Production grade: progettata per essere sfruttata in maniera intensiva e frequente e durevole nel tempo ● API non è il servizio: è il biglietto da visita con la quale si presenta la propria applicazione o parte di essa ● È studiata per essere conforme all'architettura ● La sua dissemination deve essere in grado di raggiungere tutte le figure professionali ● Deve essere adeguata per essere utilizzabile su strumenti di collaborazione
  • 4. Architetture e APIs ● Non si sceglie mai lo stile architetturale del proprio sistema a valle della scelta tecnologica, bensì il contrario! ● Il primo passo per definire una buona architettura è la comprensione della data exchange tra i sistemi ● Lo sviluppo di una buona API è alla base della data exchange: l’API è un contratto a supporto della data exchange ● L’API è prima di tutto un tema di natura architetturale
  • 5. Architetture e APIs ● Uno stile architetturale è determinato dalle proprietà dell’architettura ● Le proprietà dell’architettura sono la conseguenza dei vincoli imposti per l’architettura (vincoli di business, tecnici o, anche, sociali) ● Come ci sono diversi stili architetturali, esistono diversi stili di APIs ● Non esiste un stile architetturale universalmente valido per tutte le esigenze… ...e per le APIs?
  • 6. Tipologie di APIs API Timeline < 1999 1991: CORBA 1993: RDA 1998: XML-RPC SOAP 1999 2000 REST 2015 GRAPHQL 2005: JSON-RPC 2007: ODATA 2005-2007 gRPC 2016
  • 7. Tipologie di APIs API Styles W E B A P I s RPC APIs STREAM ING APIs QUERY APIs F L A T F I L E S A P I s
  • 8. Tipologie di APIs SOAP vs REST vs GraphQL vs gRPC SOAP REST GraphQL gRPC HTTP, SMTP, FTP,... Precursore di successo delle web APIs Numerose specifiche di I/O Natura prolissa XML + namespaces + text-based = messaggi voluminosi -> minore efficienza HTTP Semplice da interpretare Produttività pressoché immediata Request/response in HTTP 1.1: meno efficiente (vedi HTTP/2) Struttura dati della response immutabile Adeguato sia per server-to-server che client-to-server (soprattutto per state machine/CRUD) Flessibile Perfetto per comunicazioni client-to-server Adatto per reportistica Non efficiente per comunicazioni server-to-server Deve prevedere un cambio di mentalità HTTP/2 Binario (non text-based): protobuf Bi-direzionale su singola connessione (streaming) Perfetto per comunicazioni server-to-server Non adeguato per comunicazioni client-to-server (non tutte le applicazioni supportano HTTP/2) Necessario coordinamento in caso di cambiamento della struttura del .protobuf
  • 9. Tipologie di API ...e quindi? “THERE IS NO UNIVERSAL BEST API STYLE. THERE IS ALWAYS A BEST API STYLE FOR YOUR PROBLEM” Per un'azienda che è avversa al rischio e vuole utilizzare un formato collaudato oppure preferisce uniformare un unico stile di API per tutte le comunicazioni, REST è probabilmente più adatto per soddisfare la necessità Se la stessa società ha bisogno, per una propria webapp, di fornire la massima flessibilità per supportare interazioni tra client e server sia sincrone che asincrone o necessita di effettuare parecchie interazioni query-style su dati distribuiti, GraphQL è da tenere in considerazione Se si necessita di implementare una data exchange più efficiente e real-time, sia mono-direzionale che bi-direzionale (streaming), gRPC è la soluzione più opportuna
  • 10. Approccio allo sviluppo di APIs: Design-first vs Code-first Design API Document API Code Code Design API Document API ● Adeguato per approccio sia agile che waterfall ● Continuo scambio con gli stakeholders/utenti finali PRIMA di sviluppare codice ● API parlanti per qualunque attore ● Comunicazione e specifiche chiare ● Adeguato per API da esporre pubblicamente ● Non adeguato per approccio agile ● L’API rispecchia il codice: costi per riscrittura del codice se API non adeguata alle aspettative ● Bassa standardizzazione ● Adeguato per approccio speed to delivery e per applicazioni legacy ● Scambio con gli stakeholders macchinoso
  • 11. REST API Standardization Naming convention Business terms (vedi approccio Domain-Driven: ubiquitous language). Termini chiari e facilmente comprensibili KO: controller-impl, Dao, Dto, main, RestRequest, RestResponse,... OK: valid-orders (or ValidOrders), Cart, Payments, Fault, Result,... Oggetto di business (o main object) compliant Nome degli elementi compliant allo scopo dell’API GET /order-details: $.OrderDetails.List[] Resources al plurale KO: GET /order (senza ulteriori parametri: chi legge lo swagger riesce a capire se l’api restituirà un singolo ordine or restituisce più ordini?) OK: GET /orders + GET /orders/1 (si sa, a colpo d’occhio, che nel primo caso restituisce tutti gli ordini, nel secondo solo uno)
  • 12. REST API Standardization Structure convention Hierarchical URI per identificare il contesto (vedi approccio Domain-Driven: bounded context) /sales/order/item /finance/invoice/item Evitare ridondanze /sales/sales-order/validated/valid-orders Evitare ovvietà /api/sales/resource/orders Non usare HTTP verbs in URI KO: GET /orders/get or POST /orders/doUpsert OK: GET /orders (per retrieve) and POST /orders (per upsert)
  • 13. REST API Standardization Structure convention Nested resources Approccio deprecato. Sfruttare url parameters invece delle risorse innestate per creare relazioni KO: GET /orders/customer/999/invoice/12345 OK: GET /orders?customerId=999&invoiceId=12345 Abuso safe HTTP methods Usare GET per fare una DELETE Error Handling ● Sfruttare (adeguatamente) HTTP error codes: 5xx per errori server-side, 4xx per errori client-side (con un 400 bad request, il client non DOVREBBE ritentare la chiamata) ● Strutture di Fault univoche e parlanti { "fault" : { "errorCode" : "ERR-00001", "errorMsg" : "The combination of given parameter is not correct", "errorClass" : "ParameterException", "errorDetails" : { "error": "Magnitude XYZ is not correct for the given pod 123"} } }
  • 14. REST API Standardization Alcuni suggerimenti ● Sfruttare sistemi di versioning delle API ● Appoggiarsi a tool per la definizione di regole di standardizzazione (es: SwaggerHub*) ● Sfruttare strumenti di collaboration per evolvere le API *https://swagger.io/tools/swaggerhub/
  • 15. API Products ● E’ un meccanismo di bundling delle API ● Definire un bundle di risorse selezionate da una o più API così da essere esposte come una API separata ● Creare diverse API come combinazione di quelle già esistenti ● Fornire un prodotto (API) su misura per particolari stakeholders https://apim.docs.wso2.com/en/latest/design/create-api-product/api-product-overview/
  • 16. Throttling e Rate Limit ● Non confondere throttling/rate limit policies con resiliency patterns ● Throttling/Rate limit: limita il numero di risorse utilizzabili da un client (o da una sua componente o servizio) così che il proprio servizio continui a funzionare soddisfando le SLA anche in situazioni di pieno carico ● Resiliency: è la capacità di un sistema di riprendere senza impatti sui consumers la sua funzionalità a seguito di fallimenti
  • 17. Throttling e Rate Limit ● Rate limit: impone un numero massimo di richieste che possono giungere all’API in una determinata finestra di tempo. L’API rifiuta le richieste che superano quel limite ● Throttling: accoda quelle richieste giunte all’API che superano un determinato limite ed eventualmente le processa nella finestra temporale successiva. L’API può rifiutare le richieste dopo un certo numero di tentativi ● Rate limit e throttling limitano entrambi l’accesso all’API: il primo impone un limite fisso di accesso, il secondo controlla le richieste all’API livellando i picchi di traffico
  • 18. Throttling e Rate Limit WSO2 Throttling/Rate Limit Policies Application-level: Per-token quota Applied to users of the applications Applied to a single user (token) accessing all APIs of the application (es: 10perMin) Subscription-level: Subscription tiers Applied to applications that consume that API Applied across all users of the application. A shared quota among all users of an application that access that API (es: 10KperMin) Subscription-level: API published Applied to single API ● Quota Limits: Request count (es: 5KperMin) or Request Bandwith (es: 500 MBperHour) ● Burst Control: Spike Arrest Policy API-level Applied to API and API resources ● Limit on Resource (es: 2KperMin) ● Request Filtering (IP address/Address range, HTTP Request Headers, JWT Claims, Query params) Maximum backend throughput Applied to full backend system/service In TPS
  • 19. Throttling e Rate Limit WSO2 Throttling/Rate Limit Policies
  • 20. Monitoring ● Monitorare il traffico e il lineage della propria API ● API è il biglietto da visita dell’azienda (o parte di essa): monitorare l’API è monitorare l’azienda ● Capire chi chiama cosa e come ● Avere una visione near-realtime dell’andamento di un’azienda api-centric
  • 21. Summary ● API è un tema di natura architetturale ● Non esiste uno stile di API valido per tutte le esigenze ● Design-first ● Standardizzazione e naming convention ● Garantire l’affidabilità delle proprie API ● Combinare le soluzioni per un’offerta su misura ● Monitoring
  • 22. Q&A?
  • 24.
  • 25. Contatti DOVE SIAMO Milano - Torino - Padova - Roma TELEFONO Torino +39-011-0120371 EMAIL wso2.sales@profesia.it @