SlideShare a Scribd company logo
Web app slots and WebAPI versioning
WebApp Slots and WebAPI versioning
Nicolò Carandini [MVP]
n.carandini@outlook.com
@TPCWare
Argomenti trattati
Oggi parliamo di:
- WebApp slots
- WebAPI versioning
Il contesto d’uso è:
- Azure
- ASP.NET Core
- Visual Studio 2017
…e se rimane tempo, altri scenari di versioning and update
WebApp Slots
In generale si usano almeno tre slots:
• Develop
• Staging
• Production
Ma nessuno vieta di usarne altri:
• Test
• Q&A
• …
Slot di uso comune
Development
• L’ambiente di sviluppo è quello in cui si pubblica una versione durante lo
sviluppo di una o più funzionalità
Staging
• Per convenzione è l’ambiente in cui si fanno gli ultimi controlli prima di andare
in produzione, quindi è un ambiente che ricrea il più fedelmente possibile le
condizioni d’uso dell’ambiente di produzione.
Production
• Questo ambiente è quello che usano gli utenti quindi qui deve arrivare solo
ciò che funziona, dopo aver passato tutti i test funzionali e di integrazione,
con tutti i requisiti di quality assurance.
WebApp Slots in Azure
Per usare gli slot in Azure, occorre utilizzare un piano Standard o Premium
Creazione degli slot
Dal portale Azure, selezionare la Web App e aggiungere gli slot:
Swapping
Dal portale Azure, selezionare gli slot di sorgente e destinazione:
Configurazione degli slot
Per utilizzare i diversi slot occorre definire:
• Le impostazioni di slot che vengono scambiate
• Le impostazioni di slot che non vengono scambiate
• I diversi profili di pubblicazione su Visual Studio e/o gli strumenti di CI/CD
Impostazioni che vengono scambiate tra slot
Vi sono impostazioni che devono essere scambiate durante uno swap, perché
sono proprie dell’applicazione che viene spostata da uno slot all’altro:
• Impostazioni generali, quali la versione del framework, 32/64 bit, i socket Web
• Impostazioni app configurate per adattarsi a uno slot
• Stringhe di connessione configurate per adattarsi a uno slot
• Mapping dei gestori
• Impostazioni di monitoraggio e diagnostica
• Contenuto WebJobs
Impostazioni che non vengono scambiate tra slot
Vi sono impostazioni che non devono essere modificate durante uno swap,
perché sono proprie di quello specifico slot:
• Endpoint di pubblicazione
• Nomi di dominio personalizzati
• Certificati e associazioni SSL
• Impostazioni di scalabilità
• Utilità di pianificazione WebJobs
• Stringhe di connessione specifiche di uno slot
Gestione della connessione al database
Database di sviluppo ≠ Database di produzione !!!
Quello di sviluppo conterrà dati di prova utili ai diversi test di integrazione e
sarà oggetto di modifiche sia strutturali che di contenuto.
Per quanto riguarda lo staging, il discorso si fa più complesso e andrà applicata
la strategia più adatta per il progetto in questione, come l’intera replica del
database di produzione oppure solo di un suo sottoinsieme significativo.
Configurazione delle impostazioni di slot
Selezionando il flag di slot setting, l’impostazione non viene scambiata tra slot:
Slot App Settings
Le impostazioni dell’app si riferiscono allo slot di default (production). Per
modificare le impostazioni degli altri slot, selezionare prima lo slot:
Scambio con anteprima (swap multifase)
Quando si usa l'opzione Scambio con anteprima vengono effettuate le seguenti
operazioni:
• Lo slot di destinazione non viene modificato.
• Vengono applicati gli elementi di configurazione dello slot di destinazione allo slot
di origine.
• Riavvio dei processi di lavoro nello slot di origine usando la nuova configurazione.
• Al completamento dello scambio: lo slot di origine viene spostato nello slot di
destinazione e lo slot di destinazione viene spostato nello slot di origine come in
uno scambio manuale.
• In caso di annullamento dello scambio: gli elementi di configurazione dello slot di
origine vengono riapplicati allo slot di origine.
Scambio automatico
Lo scambio automatico semplifica gli scenari nei quali si vuole distribuire
continuamente l'app senza avvio a freddo e senza tempi di inattività.
Quando uno slot di distribuzione viene configurato per lo scambio automatico
in produzione, ogni volta che si esegue il push dell'aggiornamento del codice in
tale slot, il servizio app eseguirà automaticamente lo scambio dell'app in
produzione dopo che è stato eseguito il warm up nello slot di origine.
Demo
WebApp slots in Azure
WebApp Slots in ASP.NET Core
• ASP.NET Core è già da qualche mese in RTM
• Visual Studio 2017 è in dirittura d’arrivo.
• Le novità sono tantissime e i vantaggi offerti da ASP.NET Core sono tali da
renderlo sicuramente preferibile a molti altri framework di sviluppo di
applicazioni Web e WebAPI, incluso NodeJS.
Per questo motivo è importante vedere cosa cambia nell’uso degli slot per
quanto riguarda le Web App realizzate in ASP.NET Core.
Lavorare in ambienti multipli con ASP.NET Core
• ASP.NET Core introduce un miglior supporto per la gestione e il controllo del
comportamento dell’applicazione nei diversi slot di sviluppo, staging e
produzione.
• Valori di ambiente vengono utilizzati per indicare l’ambiente in cui
l’applicazione sta girando, consentendo un’appropriata configurazione della
stessa.
Impostare l’ambiente
• Utilizzare una variabile di configurazione del progetto può essere molto
pericoloso, perché è facile dimenticare una impostazione utilizzata per lo
sviluppo che viene poi pubblicata insieme al progetto nell’ambiente di
produzione.
• Per questo motivo ASP.NET Core utilizza valori propri del contesto di
esecuzione:
• In locale, vengono usate le variabili d’ambiente del PC.
• Su Azure, vengono utilizzati gli App Settings.
• Per convenzione, il nome della variabile è ASPNETCORE_ENVIRONMENT.
• Se su Azure la variabile non è definita, il valore d’ambiente è Production.
Gestire l’impostazione di ambiente con VS 2017
Per quanto riguarda l’ambiente di sviluppo da Visual Studio è facile definire la
variabile ASPNETCORE_ENVIRONMENT (ed eventuali altre variabili) via GUI, i
cui valori verranno salvati nel file launchSettings.json
Gestire l’impostazione di ambiente senza VS 2017
Se non si utilizza Visual Studio, è sempre possibile impostare manualmente la
variabile da Windows, Unix e OSX:
Utilizzare la variabile d’ambiente a runtime
• ASP.NET Core offre un servizio IHostingEnvironment che può essere
iniettato nella logica di startup o nei controller.
• Ad esempio, nella classe startup.cs generata dal template di VS:
IHostingEnvironment
• Il servizio IHostingEnvironment un’astrazione di base per lavorare con i diversi
ambienti (locale o di pubblicazione)
• Tramite l’istanza di una classe che implementa l’interfaccia di tale servizio, è
possibile conoscere l’ambiente in cui sta girando l’applicazione.
• Se occorre sapere il nome, basta utilizzare la proprietà EnvironmentName.
• Altrimenti è preferibile utilizzare il metodo
IsEnvironment(string environmentName)
che ignora i caratteri in maiuscolo, sia nella variabile di ambiente sia nel
parametro passato al metodo.
Environment tag helper
Nelle View è possibile utilizzare sia la tecnica di service injection sia il tag helper
Environment:
Demo
ASP.NET Core WebApp Environments
WebAPI con ASP.NET Core
• Se prima esistevano due tipi di progetto diversi, uno per le Web App e l’altro
per le WebAPI, con funzionamento simile ma basato su librerie differenti, ora
con ASP.NET Core abbiamo tutto nello stesso progetto.
• La gestione del Routing viene fatta come prima, a livello di Controller:
WebAPI Netiquette
Poiché una WebAPI altro non è che un servizio RESTful che viene esposto
all’esterno per essere utilizzato da altri, è molto importante:
• Definire una strategia di versioning
• Documentare in moto puntuale l’API (Application Program Interface)
WebAPI Versioning
Poiché l’API esposta da un servizio è inevitabilmente soggetta a cambiamento
nel corso del tempo, una corretta strategia di versioning consente tali modifiche
senza "rompere" il funzionamento di altre applicazioni che utilizzano tale
servizio.
Un metodo molto semplice è quello di utilizzare nelle classi Controller una
dichiarazione di Route che contenga esplicitamente il numero di versione:
Documentazione dell’API
Un ottimo sistema di documentazione è Swagger, che consente di descrivere
l’API di un servizio REST con un linguaggio JSON-like.
Per i progetti ASP.NET Core è disponibile sotto forma di pacchetto NuGet la
libreria Swashbuckle.AspNetCore, che è in grado di produrre tale
documentazione in modo automatico a partire dal codice contenuto nelle varie
classi Controller.
Le informazioni d’uso si trovano su GitHub all’indirizzo:
https://github.com/domaindrivendev/Swashbuckle.AspNetCore
Demo
ASP.NET Core WebAPI Versioning
Question time
Thanks to our Sponsors
Feedback Form
Compilate il feedback form!!
Aiutateci a migliorare la qualità degli eventi!!!
Track A
http://svy.mk/2l9THNc
Track B
http://svy.mk/2leDPWR

More Related Content

Similar to Web app slots and WebAPI versioning (20)

PPTX
Sviluppare Azure Web Apps
Andrea Dottor
 
PPTX
Introduzione ad ASP.NET Core
Andrea Dottor
 
ODP
Net core base
Beniamino Ferrari
 
PPTX
Swagger pertutti
Nicolò Carandini
 
PPTX
Il buon programmatore - consigli pratici per una vita felice
Andrea Dottor
 
PPTX
Meetup ASP.NET Core Angular
dotnetcode
 
PPTX
Cosa c'è di nuovo in asp.net core 2 0
Andrea Dottor
 
PDF
ASP.NET Core essentials
Andrea Saltarello
 
PDF
EtnaDev 2015 - Windows Bridge
Gaetano Paternò
 
PPTX
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Andrea Dottor
 
PPTX
Crea servizi REST per la tua App con ASP.NET 5
Andrea Dottor
 
PDF
Blazor ha vinto? Storie di casi reali
Andrea Dottor
 
PPTX
Azure Web Apps: portare il tuo sito sul cloud
Davide Benvegnù
 
PPTX
Universal Store Apps - Mobile day by DotNetCampania
Emanuele Garofalo
 
PDF
Microsoft Azure for DreamSpark Academic Tour - 22/01/2016
Gaetano Paternò
 
PDF
Spa with Blazor
Nicolò Carandini
 
PPTX
Web api 2.0
Nicolò Carandini
 
PPTX
Introduzione a .Net Core
Antonio Di Motta
 
PDF
Programmiamo iPhone e iPad (e non solo!) con MonoTouch
Stefano Ottaviani
 
PPTX
Sviluppo di App cross-platform con Cordova e HTML5
Gabriele Gaggi
 
Sviluppare Azure Web Apps
Andrea Dottor
 
Introduzione ad ASP.NET Core
Andrea Dottor
 
Net core base
Beniamino Ferrari
 
Swagger pertutti
Nicolò Carandini
 
Il buon programmatore - consigli pratici per una vita felice
Andrea Dottor
 
Meetup ASP.NET Core Angular
dotnetcode
 
Cosa c'è di nuovo in asp.net core 2 0
Andrea Dottor
 
ASP.NET Core essentials
Andrea Saltarello
 
EtnaDev 2015 - Windows Bridge
Gaetano Paternò
 
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Andrea Dottor
 
Crea servizi REST per la tua App con ASP.NET 5
Andrea Dottor
 
Blazor ha vinto? Storie di casi reali
Andrea Dottor
 
Azure Web Apps: portare il tuo sito sul cloud
Davide Benvegnù
 
Universal Store Apps - Mobile day by DotNetCampania
Emanuele Garofalo
 
Microsoft Azure for DreamSpark Academic Tour - 22/01/2016
Gaetano Paternò
 
Spa with Blazor
Nicolò Carandini
 
Web api 2.0
Nicolò Carandini
 
Introduzione a .Net Core
Antonio Di Motta
 
Programmiamo iPhone e iPad (e non solo!) con MonoTouch
Stefano Ottaviani
 
Sviluppo di App cross-platform con Cordova e HTML5
Gabriele Gaggi
 

More from Nicolò Carandini (20)

PDF
Wasm and Blazor CDays keynote
Nicolò Carandini
 
PPTX
The absolute need of Secure Http
Nicolò Carandini
 
PPTX
Christmas greetings cards with blazor
Nicolò Carandini
 
PPTX
Xamarin DevOps
Nicolò Carandini
 
PDF
Code review e pair programming con Visual Studio Live Share
Nicolò Carandini
 
PPTX
Azure dev ops meetup one
Nicolò Carandini
 
PDF
The Hitchhiker's Guide to the Azure Galaxy
Nicolò Carandini
 
PPTX
Game matching with SignalR
Nicolò Carandini
 
PPTX
Swagger loves WebAPI
Nicolò Carandini
 
PPTX
Xamarin Workbooks
Nicolò Carandini
 
PPTX
Swagger per tutti
Nicolò Carandini
 
PDF
Web app slots and webapi versioning
Nicolò Carandini
 
PPTX
Intro xamarin forms
Nicolò Carandini
 
PPTX
Windows 10 design
Nicolò Carandini
 
PPTX
Windows 10 IoT
Nicolò Carandini
 
PPTX
Mobile services multi-piattaforma con Xamarin
Nicolò Carandini
 
PPTX
Universal Apps localization and globalization
Nicolò Carandini
 
PPTX
Applicazioni web con ASP.NET Owin e Katana
Nicolò Carandini
 
PPTX
Azure Mobile Services con il .NET Framework
Nicolò Carandini
 
PPTX
Sviluppare app per iOS e Android con Xamarin e Visual Studio
Nicolò Carandini
 
Wasm and Blazor CDays keynote
Nicolò Carandini
 
The absolute need of Secure Http
Nicolò Carandini
 
Christmas greetings cards with blazor
Nicolò Carandini
 
Xamarin DevOps
Nicolò Carandini
 
Code review e pair programming con Visual Studio Live Share
Nicolò Carandini
 
Azure dev ops meetup one
Nicolò Carandini
 
The Hitchhiker's Guide to the Azure Galaxy
Nicolò Carandini
 
Game matching with SignalR
Nicolò Carandini
 
Swagger loves WebAPI
Nicolò Carandini
 
Xamarin Workbooks
Nicolò Carandini
 
Swagger per tutti
Nicolò Carandini
 
Web app slots and webapi versioning
Nicolò Carandini
 
Intro xamarin forms
Nicolò Carandini
 
Windows 10 design
Nicolò Carandini
 
Windows 10 IoT
Nicolò Carandini
 
Mobile services multi-piattaforma con Xamarin
Nicolò Carandini
 
Universal Apps localization and globalization
Nicolò Carandini
 
Applicazioni web con ASP.NET Owin e Katana
Nicolò Carandini
 
Azure Mobile Services con il .NET Framework
Nicolò Carandini
 
Sviluppare app per iOS e Android con Xamarin e Visual Studio
Nicolò Carandini
 
Ad

Web app slots and WebAPI versioning

  • 2. WebApp Slots and WebAPI versioning Nicolò Carandini [MVP] [email protected] @TPCWare
  • 3. Argomenti trattati Oggi parliamo di: - WebApp slots - WebAPI versioning Il contesto d’uso è: - Azure - ASP.NET Core - Visual Studio 2017 …e se rimane tempo, altri scenari di versioning and update
  • 4. WebApp Slots In generale si usano almeno tre slots: • Develop • Staging • Production Ma nessuno vieta di usarne altri: • Test • Q&A • …
  • 5. Slot di uso comune Development • L’ambiente di sviluppo è quello in cui si pubblica una versione durante lo sviluppo di una o più funzionalità Staging • Per convenzione è l’ambiente in cui si fanno gli ultimi controlli prima di andare in produzione, quindi è un ambiente che ricrea il più fedelmente possibile le condizioni d’uso dell’ambiente di produzione. Production • Questo ambiente è quello che usano gli utenti quindi qui deve arrivare solo ciò che funziona, dopo aver passato tutti i test funzionali e di integrazione, con tutti i requisiti di quality assurance.
  • 6. WebApp Slots in Azure Per usare gli slot in Azure, occorre utilizzare un piano Standard o Premium
  • 7. Creazione degli slot Dal portale Azure, selezionare la Web App e aggiungere gli slot:
  • 8. Swapping Dal portale Azure, selezionare gli slot di sorgente e destinazione:
  • 9. Configurazione degli slot Per utilizzare i diversi slot occorre definire: • Le impostazioni di slot che vengono scambiate • Le impostazioni di slot che non vengono scambiate • I diversi profili di pubblicazione su Visual Studio e/o gli strumenti di CI/CD
  • 10. Impostazioni che vengono scambiate tra slot Vi sono impostazioni che devono essere scambiate durante uno swap, perché sono proprie dell’applicazione che viene spostata da uno slot all’altro: • Impostazioni generali, quali la versione del framework, 32/64 bit, i socket Web • Impostazioni app configurate per adattarsi a uno slot • Stringhe di connessione configurate per adattarsi a uno slot • Mapping dei gestori • Impostazioni di monitoraggio e diagnostica • Contenuto WebJobs
  • 11. Impostazioni che non vengono scambiate tra slot Vi sono impostazioni che non devono essere modificate durante uno swap, perché sono proprie di quello specifico slot: • Endpoint di pubblicazione • Nomi di dominio personalizzati • Certificati e associazioni SSL • Impostazioni di scalabilità • Utilità di pianificazione WebJobs • Stringhe di connessione specifiche di uno slot
  • 12. Gestione della connessione al database Database di sviluppo ≠ Database di produzione !!! Quello di sviluppo conterrà dati di prova utili ai diversi test di integrazione e sarà oggetto di modifiche sia strutturali che di contenuto. Per quanto riguarda lo staging, il discorso si fa più complesso e andrà applicata la strategia più adatta per il progetto in questione, come l’intera replica del database di produzione oppure solo di un suo sottoinsieme significativo.
  • 13. Configurazione delle impostazioni di slot Selezionando il flag di slot setting, l’impostazione non viene scambiata tra slot:
  • 14. Slot App Settings Le impostazioni dell’app si riferiscono allo slot di default (production). Per modificare le impostazioni degli altri slot, selezionare prima lo slot:
  • 15. Scambio con anteprima (swap multifase) Quando si usa l'opzione Scambio con anteprima vengono effettuate le seguenti operazioni: • Lo slot di destinazione non viene modificato. • Vengono applicati gli elementi di configurazione dello slot di destinazione allo slot di origine. • Riavvio dei processi di lavoro nello slot di origine usando la nuova configurazione. • Al completamento dello scambio: lo slot di origine viene spostato nello slot di destinazione e lo slot di destinazione viene spostato nello slot di origine come in uno scambio manuale. • In caso di annullamento dello scambio: gli elementi di configurazione dello slot di origine vengono riapplicati allo slot di origine.
  • 16. Scambio automatico Lo scambio automatico semplifica gli scenari nei quali si vuole distribuire continuamente l'app senza avvio a freddo e senza tempi di inattività. Quando uno slot di distribuzione viene configurato per lo scambio automatico in produzione, ogni volta che si esegue il push dell'aggiornamento del codice in tale slot, il servizio app eseguirà automaticamente lo scambio dell'app in produzione dopo che è stato eseguito il warm up nello slot di origine.
  • 18. WebApp Slots in ASP.NET Core • ASP.NET Core è già da qualche mese in RTM • Visual Studio 2017 è in dirittura d’arrivo. • Le novità sono tantissime e i vantaggi offerti da ASP.NET Core sono tali da renderlo sicuramente preferibile a molti altri framework di sviluppo di applicazioni Web e WebAPI, incluso NodeJS. Per questo motivo è importante vedere cosa cambia nell’uso degli slot per quanto riguarda le Web App realizzate in ASP.NET Core.
  • 19. Lavorare in ambienti multipli con ASP.NET Core • ASP.NET Core introduce un miglior supporto per la gestione e il controllo del comportamento dell’applicazione nei diversi slot di sviluppo, staging e produzione. • Valori di ambiente vengono utilizzati per indicare l’ambiente in cui l’applicazione sta girando, consentendo un’appropriata configurazione della stessa.
  • 20. Impostare l’ambiente • Utilizzare una variabile di configurazione del progetto può essere molto pericoloso, perché è facile dimenticare una impostazione utilizzata per lo sviluppo che viene poi pubblicata insieme al progetto nell’ambiente di produzione. • Per questo motivo ASP.NET Core utilizza valori propri del contesto di esecuzione: • In locale, vengono usate le variabili d’ambiente del PC. • Su Azure, vengono utilizzati gli App Settings. • Per convenzione, il nome della variabile è ASPNETCORE_ENVIRONMENT. • Se su Azure la variabile non è definita, il valore d’ambiente è Production.
  • 21. Gestire l’impostazione di ambiente con VS 2017 Per quanto riguarda l’ambiente di sviluppo da Visual Studio è facile definire la variabile ASPNETCORE_ENVIRONMENT (ed eventuali altre variabili) via GUI, i cui valori verranno salvati nel file launchSettings.json
  • 22. Gestire l’impostazione di ambiente senza VS 2017 Se non si utilizza Visual Studio, è sempre possibile impostare manualmente la variabile da Windows, Unix e OSX:
  • 23. Utilizzare la variabile d’ambiente a runtime • ASP.NET Core offre un servizio IHostingEnvironment che può essere iniettato nella logica di startup o nei controller. • Ad esempio, nella classe startup.cs generata dal template di VS:
  • 24. IHostingEnvironment • Il servizio IHostingEnvironment un’astrazione di base per lavorare con i diversi ambienti (locale o di pubblicazione) • Tramite l’istanza di una classe che implementa l’interfaccia di tale servizio, è possibile conoscere l’ambiente in cui sta girando l’applicazione. • Se occorre sapere il nome, basta utilizzare la proprietà EnvironmentName. • Altrimenti è preferibile utilizzare il metodo IsEnvironment(string environmentName) che ignora i caratteri in maiuscolo, sia nella variabile di ambiente sia nel parametro passato al metodo.
  • 25. Environment tag helper Nelle View è possibile utilizzare sia la tecnica di service injection sia il tag helper Environment:
  • 26. Demo ASP.NET Core WebApp Environments
  • 27. WebAPI con ASP.NET Core • Se prima esistevano due tipi di progetto diversi, uno per le Web App e l’altro per le WebAPI, con funzionamento simile ma basato su librerie differenti, ora con ASP.NET Core abbiamo tutto nello stesso progetto. • La gestione del Routing viene fatta come prima, a livello di Controller:
  • 28. WebAPI Netiquette Poiché una WebAPI altro non è che un servizio RESTful che viene esposto all’esterno per essere utilizzato da altri, è molto importante: • Definire una strategia di versioning • Documentare in moto puntuale l’API (Application Program Interface)
  • 29. WebAPI Versioning Poiché l’API esposta da un servizio è inevitabilmente soggetta a cambiamento nel corso del tempo, una corretta strategia di versioning consente tali modifiche senza "rompere" il funzionamento di altre applicazioni che utilizzano tale servizio. Un metodo molto semplice è quello di utilizzare nelle classi Controller una dichiarazione di Route che contenga esplicitamente il numero di versione:
  • 30. Documentazione dell’API Un ottimo sistema di documentazione è Swagger, che consente di descrivere l’API di un servizio REST con un linguaggio JSON-like. Per i progetti ASP.NET Core è disponibile sotto forma di pacchetto NuGet la libreria Swashbuckle.AspNetCore, che è in grado di produrre tale documentazione in modo automatico a partire dal codice contenuto nelle varie classi Controller. Le informazioni d’uso si trovano su GitHub all’indirizzo: https://github.com/domaindrivendev/Swashbuckle.AspNetCore
  • 33. Thanks to our Sponsors
  • 34. Feedback Form Compilate il feedback form!! Aiutateci a migliorare la qualità degli eventi!!! Track A http://svy.mk/2l9THNc Track B http://svy.mk/2leDPWR