{"id":2446,"date":"2018-01-21T18:13:57","date_gmt":"2018-01-21T17:13:57","guid":{"rendered":"https:\/\/www.addlance.com\/blog\/?p=2446"},"modified":"2021-02-17T23:35:32","modified_gmt":"2021-02-17T22:35:32","slug":"web-service","status":"publish","type":"post","link":"https:\/\/seven.addlance.com\/beta\/blog\/web-service\/","title":{"rendered":"Sai cos\u2019\u00e8 un Web Service? Eppure lo usi Tutti i Giorni!"},"content":{"rendered":"<p><img decoding=\"async\" class=\"alignright wp-image-2449 size-medium\" title=\"Web Service \" src=\"https:\/\/www.addlance.com\/wp-content\/uploads\/2018\/01\/web-service-300x216.jpg\" alt=\"Web Service \" width=\"300\" height=\"216\" srcset=\"https:\/\/seven.addlance.com\/beta\/blog\/wp-content\/uploads\/2018\/01\/web-service-300x216.jpg 300w, https:\/\/seven.addlance.com\/beta\/blog\/wp-content\/uploads\/2018\/01\/web-service-1024x737.jpg 1024w, https:\/\/seven.addlance.com\/beta\/blog\/wp-content\/uploads\/2018\/01\/web-service-768x553.jpg 768w, https:\/\/seven.addlance.com\/beta\/blog\/wp-content\/uploads\/2018\/01\/web-service-610x439.jpg 610w, https:\/\/seven.addlance.com\/beta\/blog\/wp-content\/uploads\/2018\/01\/web-service-1080x778.jpg 1080w, https:\/\/seven.addlance.com\/beta\/blog\/wp-content\/uploads\/2018\/01\/web-service.jpg 1500w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Un <strong>Web Service<\/strong> \u00e8 la disponibilit\u00e0 di un servizio attraverso il Web. Un esempio pratico di Web Service sono le prenotazioni online come un volo o una camera d\u2019albergo. Puoi compiere questa operazione perch\u00e9 il tuo computer interroga un server che colleziona tutte le diverse disponibilit\u00e0 (in base ai tuoi criteri di ricerca) e ti permette di scegliere.<\/p>\n<p>Mettiamo che tu debba viaggiare da X a Y in data Z. Il Server interroga le diverse linee aeree che compiono la tua tratta e ti restituisce online i risultati possibili. Attenzione a non confonderti: non si tratta di una interrogazione al data base, non sarebbe possibile per motivi di sicurezza. Le disponibilit\u00e0 di un posto \u00a0ti vengono restituite grazie ad un collegamento in tempo reale (collegamento real time), dato che le linee aree espongono i loro dati attraverso una API che il Server interroga con la tecnica del Web Service.<\/p>\n<p>In poche parole il <a href=\"https:\/\/www.addlance.com\/programmatore-Web-e-mobile\">Web Service<\/a> \u00e8 una piattaforma indipendente di comunicazione che permette, attraverso uno standard (di comunicazione), a diverse applicazioni di dialogare tra loro.<!--more--><\/p>\n<p>&nbsp;<\/p>\n<h3>Come funziona un Web Service, guida pratica<\/h3>\n<p>Abbiamo detto che il Web Service consente a diverse applicazioni di scambiarsi dati tra loro, dialogando attraverso uno standard di comunicazione. Questa \u00e8 una definizione piuttosto esaustiva di cosa sia un Web Service. Ma come avviene questo scambio di dati, nello specifico?<\/p>\n<p>Un PC (chiamiamolo anche Client o Service Consumer) \u00a0manda una richiesta a un Service Provider che risponde. Ad esempio, il tuo computer richiede un volo da X a Y in data Z. Affinch\u00e9 la comunicazione tra Client e Service Provider avvenga, \u00e8 necessario avere<\/p>\n<ul>\n<li>Un Medium, ovvero uno strumento della comunicazione (come il protocollo http\/internet)<\/li>\n<li>Un Formato, ovvero una lingua compresa dalle diverse applicazioni (come json\/Xml)<\/li>\n<\/ul>\n<p>Esistono due tipi di Web Service che si servono di differenti Medium e Formati: si chiamano SOAP (Simple Object Access Protocol) e REST (Representational State Transfer). Vediamo i loro dettagli:<\/p>\n<ul>\n<li>Web Service SOAP (Medium http (POST) e Formato Xml)<\/li>\n<li>Web Service REST (Medium http (POST, GET, PUT DELETE) e Formato Xml, Json, Text)<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3>Cosa sono i WSDL? Interfacce che descrivono le diverse funzionalit\u00e0 dei Web Service<\/h3>\n<p>Adesso che conosci (o hai rinfrescato, se lo conoscevi gi\u00e0) il concetto di Web Service, dei Medium e dei Formati per la comunicazione, introduciamo il concetto di <strong>WSDL<\/strong>. Questa sigla in inglese sta ad indicare un \u00a0<em>Web Services Description Language<\/em>, ovvero l\u2019interfaccia Xml che descrive le funzionalit\u00e0 dei Web Service. Online, esistono diversi esempi di WDSL. Come si vede in questo esempio di sito <strong><a href=\"http:\/\/www.WebServicex.com\/globalweather.asmx?\">Global Weather<\/a><\/strong>, WSDL \u00e8 scritto nel linguaggio Xml e contiene i parametri e la tipologia del servizio fornito.<\/p>\n<p>Come ultima cosa non ci resta che introdurre la sigla <strong>UDDI<\/strong> che sta per <em>Universal Description Discovery and Integration. <\/em>Si tratta di una directory (una cartella) dove il Service Consumer (che abbiamo anche chiamato Client) effettua la sua <em>query <\/em>(interrogazione), ottenendo i dati Web Service. Ogni Service provider, dunque, pubblica il proprio Web Service in una directory usando il WSDL. All\u2019interno di questa cartella il Service consumer effettua la sua ricerca. Possiamo quindi affermare che UDDI \u00e8 un Xml standard per pubblicare e trovare Web Services.<\/p>\n<p>&nbsp;<\/p>\n<h3>L\u2019universo dei SOAP e dei RESTFUL Web Service, i dettagli tecnici<\/h3>\n<p>Torniamo adesso alle nostre sigle SOAP e RESTFUL che altro non sono se non i due tipi di Web Service che abbiamo individuato prima. In questo paragrafo del nostro articolo troverai i dettagli tecnici.<\/p>\n<ol>\n<li><strong>SOAP<\/strong>, ovvero <em>Simple Object Access Protocol. <\/em>Questo protocollo stabilisce una serie di regole grazie alle quali Server consumer e Service provider possono dialogare tra loro. La comunicazione avviene attraverso il formato Xml. Ecco la struttura che i messaggi Xml devono avere per SOAP: avremo un <strong><em>Envelope<\/em><\/strong> (ovvero contenitore per Header e Body); un <strong><em>Header<\/em><\/strong> (che \u00e8 opzionale e contiene informazioni come routing e autenticazione) e per finire un <strong><em>Body<\/em><\/strong> (che altro non \u00e8 se non il contenuto del messaggio). Sempre nel tuo caso dell\u2019aereo, il <em>body<\/em> sono i dati che il Service consumer (o Client) ha chiesto al Server.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol start=\"2\">\n<li><strong>RESTFUL,<\/strong> ovvero <em>REpresentational State Transfer. <\/em>Questo secondo tipo di Web Service (come vedremo dai dettagli tecnici) \u00e8 molto pi\u00f9 popolare di SOAP, per la sua semplicit\u00e0. In SOAP infatti, per reperire una risorsa devi usare un <em>envelope <\/em>Xml, mentre in REST baster\u00e0 un link (metodo GET).<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>Affinch\u00e9 un Web Service sia RESTful, devono essere soddisfatti i seguenti principi:<\/p>\n<ul>\n<li><strong>Uniform Interface<\/strong>: le Resources, possono essere identificate da URI, attraverso http<\/li>\n<li><strong>Sateless:<\/strong> ogni richiesta tra consumer e provider \u00e8 indipendente e il server non ricorda nessuna informazione di una comunicazione precedente.<\/li>\n<li><strong>Cacheable:<\/strong> ogni dato inviato dal Server a seguito di una richiesta, contiene una informazione che identifica se deve essere ricordato dal <em>Client<\/em>. La risposta del server contiene un <em>header <\/em>con cache Control e last value.<\/li>\n<li><strong>Layers:<\/strong> livelli multipli possono esistere tra Client e Server<\/li>\n<li><strong>Code on Demand:<\/strong> possibilit\u00e0 di eseguire codice lato Client<\/li>\n<\/ul>\n<p>La REST Uniform Interface (Resources, URI, http) si basa sui concetti di Resources, URI e http. Vediamo pi\u00f9 nel dettaglio:<\/p>\n<ul>\n<li><strong>Resources:<\/strong> si tratta dei moduli\/dati che sono oggetto della comunicazione tra le due applicazioni. Le due applicazioni sono da un lato il Service provider, ovvero il fornitore del servizio e dall\u2019altro il Service consumer detto anche Client. Se facessimo l\u2019esempio di \u00a0un data base aziendale, Resources sono i dati relativi agli impiegati con la loro anagrafica. Oppure sono le diverse Direzioni, con gli uffici collegati. Oppure ancora sono le Filiali aziendali con le rispettive sedi geografiche e i settori organizzativi. Insomma, in REST ogni informazione pu\u00f2 essere una risorsa e viene \u00a0identificata da un nome.<\/li>\n<li><strong>URI:<\/strong> Attraverso il Uniform Access Identifier, detto appunto URI, si pu\u00f2 accedere ad ogni dato o risorsa. Tornando all\u2019esempio dell\u2019azienda e ammesso che questa azienda abbia un proprio sito internet in cui archivia le proprie risorse (dati) organizzative, avremo tutte le Risorse ospitate nel dominio <a href=\"http:\/\/www.nomedominio.com\">nomedominio.com<\/a> e in particolare:<\/li>\n<\/ul>\n<ol>\n<li>Elenco degli impiegati: <a href=\"http:\/\/www.nomedominio.com\/impiegati\">nomedominio.com\/impiegati<\/a><\/li>\n<li>Informazioni di un impiegato{nome}: <a href=\"http:\/\/www.nomedominio.com\/impiegati\/%7bnome%7d\">nomedominio.com\/impiegati\/{nome}<\/a><\/li>\n<li>Elenco delle Direzioni: <a href=\"http:\/\/www.nomedominio.com\/direzioni\">nomedominio.com\/direzioni<\/a><\/li>\n<li>Informazioni Direzione Personale: <a href=\"http:\/\/www.nomedominio.com\/direzioni\/Personale\">nomedominio.com\/direzioni\/Personale<\/a><\/li>\n<li>Impiegati Direzione Personale : <a href=\"http:\/\/www.nomedominio.com\/Personale\/Impiegati\">nomedominio.com\/Personale\/Impiegati<\/a><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ul>\n<li><strong>HTTP<\/strong>: ha dei metodi GET, POST, PUT; DELETE. Con questi pu\u00f2 essere creata una funzione chiamata CRUD. CRUD \u00e8 un acronimo che sta per il seguente processo<\/li>\n<\/ul>\n<p>C=CREATE=POST<\/p>\n<p>R=READ= GET<\/p>\n<p>U=UPDATE=PUT<\/p>\n<p>D= DELETE= DELETE<\/p>\n<p>Usando il metodo GET , descritto di seguito, la lista degli impiegati della nostra azienda-esempio, verr\u00e0 fornita digitando la seguente URL: \u00a0http\/\/: GET <a href=\"http:\/\/www.nomedominio.com\/impiegati\">www.nomedominio.com\/impiegati<\/a><\/p>\n<p>A questo punto, nel RESTful Web Service, ogni risorsa pu\u00f2 essere identificata attraverso un Nome, un URI e un http e manipolata attraverso la sua rappresentazione (Xml, Json ecc\u2026). La sintesi appena fatta \u00e8 in questo paragrafo \u00e8 importante per \u00a0identificare le differenze tra SOAP e RESTful. In pochissime parole, la differenza sta che in SOAP per reperire una risorsa devo usare un <em>envelope<\/em> Xml, in REST baster\u00e0 un link (grazie al metodo GET). Ecco perch\u00e9 REST \u00e8 molto piu\u2019 popolare di SOAP, per la sua semplicit\u00e0.<\/p>\n<p><em>Questo articolo \u00e8 un Guest Post di <strong>Walter Livio Bollini. <\/strong>Laureato in Matematica\/informatica, con un\u00a0 Master in tecnologia digitale, \u00e8 specializzato in linguaggio PHP. \u00c8 esperto del Web e della realizzazione di applicazioni tra cui l&#8217;e-commerce. Realizza anche campagne di Web Marketing, newsletter, gestione social network. Sito personale:\u00a0<a href=\"https:\/\/www.liviobollini.it\">https:\/\/www.liviobollini.it<\/a><\/em><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;    \t<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un Web Service \u00e8 la disponibilit\u00e0 di un servizio attraverso il Web. Un esempio pratico di Web Service sono le prenotazioni online come un volo o una camera d\u2019albergo. Puoi compiere questa operazione perch\u00e9 il tuo computer interroga un server che colleziona tutte le diverse disponibilit\u00e0 (in base ai tuoi criteri di ricerca) e ti [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":2449,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":""},"categories":[17],"tags":[18],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/seven.addlance.com\/beta\/blog\/wp-json\/wp\/v2\/posts\/2446"}],"collection":[{"href":"https:\/\/seven.addlance.com\/beta\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/seven.addlance.com\/beta\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/seven.addlance.com\/beta\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/seven.addlance.com\/beta\/blog\/wp-json\/wp\/v2\/comments?post=2446"}],"version-history":[{"count":1,"href":"https:\/\/seven.addlance.com\/beta\/blog\/wp-json\/wp\/v2\/posts\/2446\/revisions"}],"predecessor-version":[{"id":10996,"href":"https:\/\/seven.addlance.com\/beta\/blog\/wp-json\/wp\/v2\/posts\/2446\/revisions\/10996"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/seven.addlance.com\/beta\/blog\/wp-json\/wp\/v2\/media\/2449"}],"wp:attachment":[{"href":"https:\/\/seven.addlance.com\/beta\/blog\/wp-json\/wp\/v2\/media?parent=2446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/seven.addlance.com\/beta\/blog\/wp-json\/wp\/v2\/categories?post=2446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/seven.addlance.com\/beta\/blog\/wp-json\/wp\/v2\/tags?post=2446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}