Post

Visualizzazione dei post con l'etichetta REST

Load tests, Stress tests e performance di un servizio REST

A fine 2012 ho iniziato ad avvertire una maggiore sensibilità dei clienti riguardo il tema delle prestazioni di un sistema basato sul web. Parecchi degli applicativi a cui stavo lavorando in quel periodo erano già basati su architetture con piattaforme REST e dati in formato JSON, che si adattavano molto bene al tema della "misurazione dei tempi di risposta". La separazione dei moduli applicativi e - in particolare - del "presentation layer" dallo strato di servizi, è a mio parere una caratteristica essenziale per ottenere una metrica dell'applicazione sotto carico. Faccio subito una precisazione ritengo doverosa. In ogni situazione - ed in particolar modo se si lavora con SPA (Single Page Application) - è fondamentale distinguere tra le problematiche prestazioni dovute ad un codice client "lento", magari non adeguatamente ottimizzato, da una piattaforma di servizi che fatica a fornire risposte nei tempi desiderati. In questo post mi soffermerò su qu...

Upload di un file e un form su una action ASP.NET Web Api con MultiPartFormDataContent

Lavorando con ASP.NET Web Api vi sarà sicuramente capitato di dover caricare lato server un file presente sul computer dell'utente. Se state usando un client basato su JavaScript - magari jQuery, se non volete farvi del male con XHR - è certamente una cosa piuttosto semplice: sono decide, per non dire centinaia, i controlli che si trovano in rete che già fanno quello che vi serve; basta trovare quello giusto che risponde alle vostre esigenze, aggiungere il riferimeto allo script, e....via! Se poi, come sovente accade, dovete passare anche dei dati "form" nella richiesta di upload - magari per associare il file caricato sul server ad una entità presente nella vostra base dati - l'operazione richiede qualche sforzo in più, pur rimanendo fattibile e molto documentata. Parlo sempre di JavaScript, eh... Ma se dovete fare questa cosa da .NET, magari un'applicazione WPF o una semplice console application, anche eseguire un semplice upload non è banalissimo. I post che ...

Authentication vs Authorization

Ancora una volta mi trovo in mezzo ad una diatriba; se vogliamo un dilemma semantico, o semplicemente due concetti che vengono erroneamente usati in maniera interscambiabile nel comune linguaggio tecnico. Mi sto riferendo alle due parole Authentication e Authorization che da molti anni calcano la scena IT per dei sistemi più o meno complessi, web e desktop. La sicurezza in questi ultimi tempi - come mai in passato - ha assunto un ruolo non solo importante, ma fondamentale per ogni architettura che si rispetti; tanto, che non solo è basilare creare e nutrire il dato, ma preservarlo incontaminato, sicuro, protetto proporzionalmente al suo valore. E' così che, ogni due/tre anni nascono nuovi tecniche per difendere l'informazione, che vanno a braccetto con altrettante tecniche di "hacking" - perdonatemi il termine non propriamente preciso - per forzare o addirittura distruggere le informazioni stesse. Ma oggi non sono qui a parlare relativamente a specifiche di sic...

Throttling monitor con ASP.NET MVC

Il "throttling" spiegato in due parole? Capacità di un sistema informativo di tracciare l'occorrenza delle chiamate ad un particolare risorsa (o una funzione) disponibile nel sistema stesso; identificando il chiamante ed, eventualmente, imponendo delle limitazione all'utilizzo della risorsa in funzione di alcune policy prestabilite. A cosa serve e come è possibile sfruttarlo? Il campo di applicabilità è certamente molto vasto, ma è una tecnica maggiormente utilizzata per la sicurezza dei sistemi, e la misurazione della responsività degli stessi a fronte di un elevato numero di richieste. Per esempio è possibile monitorare il numero di invocazioni ad un particolare metodo esposto da un vostro servizio web, e la frequenza con cui avvengono. Questo, per prevenire attacchi esterni, provenienti da malintenzionati che vogliono mettere in crisi il servizio che offrite. Ultimamente mi è capitato di dover realizzare una serie di servizi - esposti pubblicamente su rete inte...

ASP.NET: WebForms vs MVC

Quanto Microsoft, nel lontano 2009, ha rilasciato ASP.NET MVC, mi sono chiesto il motivo per cui è stato scelto di mettere a disposizione un framework web che affiancasse ASP.NET WebForms. Ad una prima occhiata non sono riuscito a vedere i vantaggi della nuova tecnologia, rispetto ad un'altra, solida, ben collaudata e diffusa come WebForms. E' da sottolineare che il grande merito di quest'ultima, all'inizio del nuovo millennio, è stato avvicinare una massa di sviluppatori desktop (la maggior parte dei quali legati al buon vecchio Visual Basic 6.0), al mondo web. Il paradigma di programmazione che veniva proposto - nella sua semplicità concettuale - era geniale: simulare il modello "ad eventi" (tipico dei desktop, appunto) applicato al web. La magia realizzata da "postback" e "viewstate" ha quindi permesso, solo con l'introduzione di qualche nuovo concetto, di aumentare esponenzialmente il numero di web-developers Microsoft, qu...

ActionFilter: tracciamento di request e response di un metodo MVC

Immagine
Sviluppando una SPA (Single Page Application) ci si trova spesso a doversi confrontare con problemi di serializzazione e deserializzazione di dati in formato JSON (Javascript Object Notation), da e verso il server remoto. La tecnologia che ho scelto per il mio server-side backend è ASP.NET MVC: a mio parare la scelta più naturale e sensata per uno sviluppatore che ha un forte background .NET. In fase di sviluppo, una delle attività che maggiormente fanno perdere tempo, è proprio comprendere perchè questo o quel metodo non risponde correttamente: errore nel passaggio dei parametri, problemi di formattazione, variabili e fields passati con la denominazione errata, etc. E la problematica si ingigantisce quando ci si trova a sviluppare il backend per dei colleghi che si occuperanno solo della parte client dell'applicativo: due mondi completamente isolati, dove la firma dei metodi server rappresenta l'unico "contratto" a garanzia delle due parti. Ma i contratti e gli...

Chrome Development : RESTful Stress

Negli ultimi mesi sto lavorando sempre più spesso nello sviluppo di applicazioni "service oriented". Sviluppare piattaforme di servizi web è sicuramente una delle cose che preferisco, perchè mi permette di lavorare molto a livello funzionale ed architetturale, e meno sulla parte front-end; quest'ultima...beh, diciamo che non è "nelle mie corde". Mi considero una capra (con tutto il rispetto per gli ovini) nella realizzazione di interfacce uomo macchina e, in generale, in tutto quello che va sotto la definizione di "user experience". In realtà con il "gusto per l'estetica" ci devi nascere; se non se ne è dotati, meglio limitarsi delle cose semplici ed essenziali, lasciando la gloria ai colleghi "web designer"... Quello che è fondamentale tenere in considerazione quando si lavora ad una piattaforma di puri servizi web, è che è necessario esporre pubblicamente solo le informazioni e le operazioni strettamente necessarie al corret...

Sfruttare le Action ASP.NET MVC da Silverlight: dalla teoria alla pratica

Come detto, in alcuni scenari legati a Silverlight, è possibile sostituire le funzionalità di WCF Ria Services con delle più “snelle” action ASP.NET MVC. L’obiettivo dichiarato è rimuovere la complessità di una piattaforma di servizi che, a volte, può risultare eccessivamente pesante da utilizzarsi in situazioni tutto sommato semplici. Se non si fa un massiccio uso del “tracking” (cioè del tracciamento dello stato di ogni modello emesso dal server), l'uso dei WCF Ria Services è rimpiazzabile con una soluzione, a mio parere, semplice e performante; una soluzione che rappresenta il giusto compromesso tra produttività e innovazione, orientata a tecnologie più moderne. Se siamo in una situazione in cui l'applicazione Silverlight (come detto, basata su WCF Ria Services) è già completa e funzionante - certo, se non volete farvi del male - vi esorterei a domandarvi se esiste una reale necessità di cambiare il meccanismo per migliorare le performance. Se invece l'applicazi...

WCF RESTful service: esposizione del servizio

Previously on "Zen Programming"... Nel precedente post abbiamo visto come realizzare un servizio RESTful basato su WCF; ma ci siamo fermato al più bello, cioè a come "hostare" il servizio web su IIS. Prima di tutto abbiamo bisogno di un file ".svc"...eh, ma sarebbe troppo facile...no? Quindi ho colto l'occasione per illustrarvi un'altra meravigliosa caratteristica di WCF, detta "service activation": l'handler del servizio sarà generato utilizzando solo la configurazione dell'applicazione, senza un file reale che funga da endpoint per l'invocazione. Per far questo abbiamo bisogno di un "service host factory", cioè una classe che eseguirà la generazione (la "produzione", essendo "factory") dell'istanza del servizio basato sull'interfaccia "ISimpleRestService". Il codice è autoesplicativo: basta derivare la classe base "ServiceHostFactoryBase" ed eseguire l'over...

WCF RESTful service: cuocere per 5 minuti e servire

Spesso mi capita di lavorare con soluzioni architetturalmente articolate, che magari prevedono l'esposizione di servizi web in grado di permettere una certa interoperabilità o comunicazioni con sistemi esterni. Sempre più di frequente l'interoperabilità di cui parlo si applica anche all'interno della stessa piattaforma software, tra moduli divesi; tutte queste entità devono collaborare insieme con lo scopo prefissato dal flusso funzionale. Quando l'obiettivo è creare un servizio web, la scelta che nella maggior parte delle volte si fa è quella di SOAP, cioè quella di un web service "standard", che si basa su un contratto che l'utilizzatore deve "accettare" prima di poter dialogare con l'entità che "offre" il servizio. Naturalmente io non ho mai fatto eccezione a questa regola, se non quando mi sono dovuto confrontare con una soluzione che basava sulla comunicazioni tra servizi web, la maggior parte del proprio source code. Con i...