<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>architettura Archivi - Cesare Bordi | Innovation Manager &amp; Back-end Developer</title>
	<atom:link href="https://www.cesarebordi.it/tag/architettura/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.cesarebordi.it/tag/architettura/</link>
	<description>Innovare con soluzioni software efficaci e gioco di squadra</description>
	<lastBuildDate>Fri, 24 Apr 2020 11:01:40 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.3</generator>

<image>
	<url>https://www.cesarebordi.it/wp-content/uploads/2016/02/CB-logo-88x88.png</url>
	<title>architettura Archivi - Cesare Bordi | Innovation Manager &amp; Back-end Developer</title>
	<link>https://www.cesarebordi.it/tag/architettura/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Architettura REST per sviluppare Web Service</title>
		<link>https://www.cesarebordi.it/architettura-rest-per-sviluppare-web-service/</link>
					<comments>https://www.cesarebordi.it/architettura-rest-per-sviluppare-web-service/#respond</comments>
		
		<dc:creator><![CDATA[cesarebordi]]></dc:creator>
		<pubDate>Wed, 22 Apr 2020 17:55:01 +0000</pubDate>
				<category><![CDATA[Articoli]]></category>
		<category><![CDATA[Categorie]]></category>
		<category><![CDATA[Lezioni]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[TechNerd]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[architettura]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[lezioni]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[restfull]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web service]]></category>
		<category><![CDATA[webservice]]></category>
		<guid isPermaLink="false">https://www.cesarebordi.it/?p=833</guid>

					<description><![CDATA[<p>L'architettura REST è oggi una delle più utilizzate nell'ambito dei Web Service. Ci si trova spesso a dover implementare api RESTful ed è importante avere una precisa conoscenza di questo modello di progettazione.</p>
<p>L'articolo <a href="https://www.cesarebordi.it/architettura-rest-per-sviluppare-web-service/">Architettura REST per sviluppare Web Service</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>L&#8217;<strong>architettura REST</strong> è oggi una delle più utilizzate nell&#8217;ambito dei <strong>Web Service</strong>. Ci si trova spesso a dover <strong>implementare api RESTful</strong> ed è importante avere una precisa conoscenza di questo modello di progettazione.</p>



<h2 class="wp-block-heading">Architettura REST: cos&#8217;è?</h2>



<blockquote class="wp-block-quote"><p>Additional constraints can then be applied to form a new architectural style that better reflects the desired properties of a modern Web architecture.</p></blockquote>



<p><strong>REST</strong> vede la luce dieci anni dopo la nascita del <strong>World Wide Web</strong>, piattaforma per la condivisione di documenti distribuiti su server connessi tra loro. L’acronimo REST (<strong><span style="text-decoration: underline;">RE</span>presentational <span style="text-decoration: underline;">S</span>tate <span style="text-decoration: underline;">T</span>ransfer</strong>) viene introdotto nel 2000 nella tesi &#8220;<em><a rel="noreferrer noopener" href="https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm" target="_blank">Architectural Styles and the Design of Network-based Software Architectures</a></em>&#8221; di <a href="https://it.wikipedia.org/wiki/Roy_Fielding">Roy Fielding</a> definendo così uno&nbsp;<strong>stile architetturale</strong> basato sul Web che fissa un <strong>insieme di principi</strong> per la progettazione di un <a rel="noreferrer noopener" href="https://it.wikipedia.org/wiki/Sistema_distribuito" target="_blank">sistema hypermedia distribuito</a>.</p>



<p><strong>REST</strong> è quindi un modello di progettazione e non va confuso con un protocollo (non definisce messaggi) nè con una specifica (non definisce uno standard), ma opera ad un livello di astrazione superiore.<br />Non è quindi del tutto corretto confrontarlo con il <strong>protocollo <a rel="noreferrer noopener" href="https://it.wikipedia.org/wiki/SOAP" target="_blank">SOAP</a></strong> anche se entrambi sono oggi ampiamente usati nello <strong>sviluppo dei  Web Service</strong>.</p>



<p>In estrema sintesi:</p>



<blockquote class="wp-block-quote"><p>REST detta le regole per creare una piattaforma per l’elaborazione distribuita dei dati sfruttando l&#8217;architettura Web già dotata di tutto ciò che occorre: da una parte un&#8217;infrastruttura basata su protocolli ben definiti (<a rel="noreferrer noopener" href="https://it.wikipedia.org/wiki/Hypertext_Transfer_Protocol" target="_blank">HTTP</a> in primis) dall&#8217;altra le informazioni viste come risorse mappate univocamente (<a rel="noreferrer noopener" href="https://it.wikipedia.org/wiki/Uniform_Resource_Identifier" target="_blank">URI</a>).</p></blockquote>



<h2 class="wp-block-heading">I principi dell&#8217;architettura REST</h2>



<h3 class="wp-block-heading">Iniziare con un approccio &#8220;Null Style&#8221;</h3>



<p>Il &#8220;<strong>Null Style</strong>&#8221; è il punto di partenza: un sistema in cui non ci sono confini distinti tra i componenti (risorse) che andranno connessi. I seguenti <strong>principi dell&#8217;architettura REST</strong> rappresentano i <strong>vincoli</strong> per standardizzare l&#8217;accesso alle risorse distribuite in questo scenario.</p>



<h3 class="wp-block-heading">Client-Server </h3>



<p>L&#8217;<strong>architettura REST</strong> applica il paradigma <strong>SoC</strong> (<strong><span style="text-decoration: underline;">S</span>eparation <span style="text-decoration: underline;">o</span>f <span style="text-decoration: underline;">C</span>oncerns</strong>),  <em>&#8220;separazione dei compiti</em>“, al sistema di funzionamento Client-Server (<strong>Richiesta-Risposta</strong>). Il <strong>vincolo Client-Server</strong> favorisce un&#8217;architettura distribuita in cui lo sviluppo applicativo lato client è indipendente da quello lato server. Questo spiega anche perché REST non si preoccupa dei linguaggi e dei metodi di sviluppo.</p>



<h3 class="wp-block-heading">Stateless</h3>



<p>La comunicazione tra <strong>utente del servizio</strong> (<strong>client</strong>) ed il <strong>servizio</strong> (<strong>server</strong>) deve essere <strong>priva di stato</strong>: ogni richiesta del client deve contenere tutte le informazioni necessarie al server per comprendere la richiesta e non deve sfruttare informazioni di sessione memorizzate sul server. E&#8217; il client a gestire la sessione e, se necessario, dovrà ricevere opportune informazioni nella risposta del server.<br />Il <strong>vincolo stateless</strong> ha benefici sul monitoraggio delle richieste, sull&#8217;<strong>affidabilità</strong> e sulla <strong>scalabilità</strong>: non dovendo mantenere dati in sessione sarà più facile scalare orizzontalmente il servizio creando istanze parallele poste dietro ad un load balancer.</p>



<h3 class="wp-block-heading">Cache</h3>



<p>Nell&#8217;<strong>architettura REST</strong> il <strong>vincolo di Cache</strong> impone che le risposte siano etichettate come memorizzabili nella cache o meno. L&#8217;utilizzo della cache da parte di client, server o componenti middleware consente di ridurre le interazioni con la rete a tutto vantaggio delle performance.</p>



<h3 class="wp-block-heading">Uniform Interface</h3>



<p>L&#8217;<strong>architettura REST</strong> impone un <strong>vincolo di uniformità dell&#8217;interfaccia di accesso ai dati</strong> gestiti dal servizio, svincolandolo dalla specifica implementazione sottostante. Questo deve avvenire attraverso ulteriori sotto-vincoli.</p>



<h4 class="wp-block-heading"><span class="has-inline-color has-medium-gray-color">Identificazione delle risorse</span></h4>



<p>In REST ogni informazione è una<strong> risorsa</strong>, vista come qualsiasi cosa possa essere nominata: un documento, un&#8217;immagine, il meteo di oggi, &#8230;<br />Una risorsa può essere mutabile (l&#8217;ultima revisione di un documento) o immutabile nel tempo (la specifica revisione di un documento), l&#8217;unica cosa che deve essere statica è la semantica della sua mappatura, per questo motivo viene data una grande importanza all&#8217;<strong>identificazione univoca di una risorsa</strong> (<strong><a rel="noreferrer noopener" href="https://it.wikipedia.org/wiki/Uniform_Resource_Identifier" target="_blank">URI</a></strong>) e alla necessità di mantenerla nel tempo.<br />Tale sotto-vincolo sottolinea lo scopo organizzativo proprio dei nomi di domino Internet.</p>



<h4 class="wp-block-heading"><span class="has-inline-color has-medium-gray-color">Rappresentazione delle risorse</span></h4>



<p>Una risorsa può essere rappresentata in molti modi diversi (HTML, XML, JSON, SVG, JPG, &#8230;) attraverso <strong>dati</strong>, <strong>metadati</strong> descrittivi ed eventuali &#8220;<strong>control data</strong>&#8220;. I dati di controllo possono definire lo scopo di un messaggio di richiesta o risposta, il suo comportamento o stato. Ad esempio possono specificare come gestire la cache di una riposta o la necessità di creare una risorsa sulla base dei dati e delle caratteristiche presenti nella richiesta.<br /></p>



<h4 class="wp-block-heading"><span class="has-inline-color has-medium-gray-color">Collegamenti tra risorse</span></h4>



<p>L&#8217;architettura <strong>REST</strong> è pensata per <strong>connettere risorse tramite collegamenti ipertestuali</strong>. Questo principio è anche noto come <strong>HATEOAS</strong> (Hypermedia As The Engine Of Application State). Un Client deve quindi apprendere dalla rappresentazione di un risorsa fornita dal server (risposta) l&#8217;eventuale relazione con ulteriori risorse.<br />Ad esempio, richiedendo una fattura, la risposta dovrebbe contenere anche il link alla relativa anagrafica cliente.</p>



<h3 class="wp-block-heading">Layered System</h3>



<p>Un&#8217;architettura REST prevede più livelli architettonici, indipendenti l&#8217;uno dall&#8217;altro, frapposti fra client e server.<br />Gli strati intermedi possono avere scopi specifici durate il transito dei dati come ad esempio la sicurezza, il caching o il balancing.<br />I livelli potranno essere modificati in base all&#8217;evolversi dello scenario.</p>



<h3 class="wp-block-heading">Code-On-Demand</h3>



<p>L&#8217;ultimo <strong>vincolo di code-on-demand</strong> è facoltativo e consente ad un&#8217;implementazione REST di estendere le funzionalità del client scaricando ed eseguendo il codice sotto forma di applet o script. Ciò appare oggi abbastanza scontato e potrebbe rendere questo vincolo facoltativo quasi paradossale, ma non lo era nel 2000 quando i contenuti Web erano per lo più pagine statiche renderizzate dal browser.</p>



<h2 class="wp-block-heading">Differenza tra architettura REST ed servizio RESTful</h2>



<p>Eroneamente usati come sinonimi, <strong>REST</strong> è il nome dello “stile architetturale” mentre <strong>RESTful</strong> viene utilizzato per qualificare un Web Service che rispetta i vincoli dell&#8217;architettura REST.</p>



<h2 class="wp-block-heading">Architettura REST: i contro</h2>



<ul><li>L&#8217;architettura REST si può applicare solo in ambito Web a differenza del protocollo SOAP.</li><li>A causa del vincolo stateless c&#8217;è la possibilità di un aumento dei dati di ambiente restituiti ripetutamente in una serire di richieste (overhead per interazione). Il vincolo di Cache cerca di compensare questo aspetto.</li><li>A causa del vincolo stateless, spostando il controllo sul client si riduce il controllo da parte del server sul comportamento coerente dell&#8217;applicazione.</li></ul>
<p>L'articolo <a href="https://www.cesarebordi.it/architettura-rest-per-sviluppare-web-service/">Architettura REST per sviluppare Web Service</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cesarebordi.it/architettura-rest-per-sviluppare-web-service/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
