{"id":344,"date":"2013-03-04T10:50:36","date_gmt":"2013-03-04T09:50:36","guid":{"rendered":"https:\/\/alistapart.com\/it\/article\/siti-dal-doppio-volto\/"},"modified":"2013-03-04T10:50:36","modified_gmt":"2013-03-04T09:50:36","slug":"siti-dal-doppio-volto","status":"publish","type":"article","link":"https:\/\/alistapart.com\/it\/article\/siti-dal-doppio-volto\/","title":{"rendered":"Siti dal doppio volto"},"content":{"rendered":"<p><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2013\/03\/n69webdual.png\" border=\"0\" width=\"30%\" style=\"float: left;\" \/>Come il dio romano <a href=\"http:\/\/it.wikipedia.org\/wiki\/Giano_(divinit\u00e0)\">Giano<\/a> (e molti politici), ogni applicazione web ha due facce: quella umana che interagisce con le persone e quella della macchina che interagisce con i sistemi di computer, spesso come risultato delle interazioni con l&#8217;utente. Mostrare troppo una delle due facce al pubblico sbagliato crea l&#8217;opportunit\u00e0 di sbagliare.<\/p>\n<p>Quando un&#8217;interfaccia utente, pensata per l&#8217;utilizzo umano, riflette troppo il funzionamento interno di un sistema nel suo design e nel suo linguaggio, \u00e8 probabile che confonda le persone che la utilizzano. Ma allo stesso tempo, se i dati non sono conformi a una specifica struttura, \u00e8 probabile che confondano le macchine che devono usarli, per cui non possiamo nemmeno ignorare i requisiti di sistema.<\/p>\n<p>Le persone e le macchine manipolano le informazioni in maniera completamente diversa. Dobbiamo trovare un modo per equilibrare i bisogni di entrambe.<\/p>\n<div class=\"paragrafo\">\n<h2>Faccia il suo ingresso il Principio di Robustezza<\/h2>\n<p>Nel 1980, l&#8217;informatico <a href=\"http:\/\/it.wikipedia.org\/wiki\/Jon_Postel\">Jon Postel<\/a> pubblic\u00f2 una <a href=\"http:\/\/tools.ietf.org\/html\/rfc761\">prima specifica<\/a> del Transmission Control Protocol, che rimane un meccanismo di comunicazione fondamentale di internet. In quella specifica, enunci\u00f2 il Principio di Robustezza:<\/p>\n<blockquote>\n<p>Siate conservativi in quello che fate, siate liberal in quello che accettate dagli altri.<\/p>\n<\/blockquote>\n<p>Sebbene spesso applicato a protocolli tecnici di basso livello come il TCP, questa regola d&#8217;oro dell&#8217;informatica ha una vasta applicazione anche nel campo della user experience.<\/p>\n<p>Per creare un&#8217;esperienza positiva, dobbiamo dare alle applicazioni un volto umano che sia liberal: empatico, flessibile e tollerante di qualunque numero di azioni l&#8217;utente possa fare. Ma perch\u00e9 un sistema sia davvero robusto, il suo volto da macchina deve anche prestare molta cura ai dati che gestisce: trattare l&#8217;input dell&#8217;utente come <a href=\"https:\/\/www.owasp.org\/index.php\/Data_Validation#Sanitize_with_Whitelist\">malevolo di default<\/a> e validare il formato di tutto quello che manda ai sistemi pi\u00f9 in basso nel flusso.<\/p>\n<p>Creare un sistema che adotti questi insieme radicalmente differenti di vincoli non \u00e8 facile. Ad alto livello potremmo dire che una <em>applicazione web robusta<\/em> \u00e8 una che:<\/p>\n<ol>\n<li>accetta l&#8217;input degli utenti in una variet\u00e0 di forme, basandosi prima sui bisogni e sulle preferenze degli umani piuttosto che sulle macchine;<\/li>\n<li>accetta la responsabilit\u00e0 di tradurre quell&#8217;input umano per soddisfare i requisiti dei sistemi di computer;<\/li>\n<li>definisce i limiti di ci\u00f2 che \u00e8 ragionevole in un dato contesto;<\/li>\n<li>fornisce un chiaro feedback all&#8217;utente, specialmente quando l&#8217;input tradotto eccede i limiti definiti.<\/li>\n<\/ol>\n<p>Sia che si tratti di una semplice form o di un&#8217;applicazione sofisticata, ogni volta che chiediamo dell&#8217;input agli utenti, le loro aspettative sono quasi sicuramente diverse in qualche modo da quelle del computer. I nostri cervelli non sono fatti di silicio, ma pensare nei termini del Principio di Robustezza pu\u00f2 aiutarci a chiudere il gap tra l&#8217;uomo e la macchina in una gran variet\u00e0 di circostanze.<\/p>\n<h3>Numeri<\/h3>\n<p>Gli umani capiscono che i termini &#8220;uno&#8221;, &#8220;1&#8221; e &#8220;1.00&#8221; grossomodo si equivalgono. Tuttavia, questi stessi sono molto differenti per un computer. Nella maggior parte dei linguaggi di programmazione, ognuno di questi \u00e8 un diverso <a href=\"http:\/\/en.wikipedia.org\/wiki\/Data_type\">tipo<\/a> di dato con caratteristiche uniche. Cercare di fare delle operazioni matematiche sul tipo di dato sbagliato pu\u00f2 portare a risultati inattesi. Quindi, se un&#8217;applicazione web ha bisogno che l&#8217;utente inserisca un numero, i suoi sviluppatori dovranno assicurarsi che quell&#8217;input soddisfi la definizione del computer. Ai nostri utenti non interessano queste sottigliezze, che per\u00f2 possono facilmente emergere nelle interfacce utente.<\/p>\n<p>Quando si compra qualcosa al telefono, la persona che prende l&#8217;ordine non deve mai dire &#8220;Per favore, mi dia il numero della sua carta di credito usando solo cifre, senza spazi o trattini&#8221;, non si confonde se vi fermate durante il discorso o se includete qualche &#8220;mmm&#8221;: \u00e8 in grado di riconoscere un numero quando ne sente uno. Tuttavia, questi suggerimenti riempiono di solito le form web, istruendo gli utenti ad adeguarsi alle esigenze del computer. Non sarebbe bello se il computer potesse soddisfare invece i bisogni della persona?<\/p>\n<p>Spesso pu\u00f2, se mettiamo al lavoro il Principio di Robustezza per far s\u00ec che la nostra applicazione accetti una variet\u00e0 di input da parte dell&#8217;utente e li trasformi in qualcosa che soddisfa i bisogni di una macchina.<\/p>\n<p>Per esempio, potremmo farlo proprio a livello dell&#8217;interfaccia, modificando i campi per fare un pre-process dell&#8217;input dell&#8217;utente, fornendo un feedback immediato all&#8217;utente riguardo a quello che sta succedendo. Considerate il campo di input che richiede un valore di una valuta:<\/p>\n<div class=\"illustration full left margin\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2013\/03\/01-currency-input.png\" border=\"0\" alt=\"Form che richiede l'input di un valore di una moneta\" \/><\/div>\n<p><a href=\"articoli\/28-numero-15-5-ottobre-2010\/107-validazione-innovativa-delle-form\">HTML 5 introduce<\/a> dei nuovi attributi per l&#8217;elemento <code>input<\/code>, incluso un <code>tipo<\/code> di <code>numero<\/code> e un attributo <code>pattern<\/code>, il cui scopo \u00e8 quello di dare agli sviluppatori un modo per definire il formato atteso di un&#8217;informazione. Sfortunatamente, il supporto nei browser di questi attributi rimane <a href=\"http:\/\/www.quirksmode.org\/html5\/inputs.html\">limitato<\/a> e inconsistente. Ma con un po&#8217; di JavaScript si pu\u00f2 fare lo stesso lavoro. Per esempio:<\/p>\n<pre><code class=\"language-javascript\">&lt;input onkeyup=\"value=value.replace(\/[^0-9\\.]\/g,'')\" \/&gt;\n&lt;input onblur=\"if(value.match(\/[^0-9\\.]\/)) raise_alert(this)\" \/&gt;<\/code><\/pre>\n<p>Il primo input semplicemente blocca l&#8217;immissione di qualunque carattere che non sia un cifra o un punto inserito dall&#8217;utente. Il secondo fa invece partire una notifica.<\/p>\n<p>Possiamo rendere questi semplici esempi molto pi\u00f9 <a href=\"http:\/\/www.alistapart.com\/articles\/inline-validation-in-web-forms\/\">sofisticati<\/a>, ma queste tecniche lasciano ancora le regole del computer tra i piedi dell&#8217;utente. Un&#8217;alternativa potrebbe essere quella di accettare silenziosamente qualunque cosa l&#8217;utente scelga di fornire e poi di usare la stessa espressione regolare<sup><a href=\"#note1\">1<\/a><\/sup> per trasformarla lato server in un valore decimale. Seguendo la linea guida numero tre, l&#8217;applicazione fa un controllo di buonsenso sul risultato e riporta un errore se un utente ha inserito qualcosa di incomprensibile o al di fuori del range atteso.<\/p>\n<p>Il volto umano liberal della nostra applicazione supporr\u00e0 che questi eventi siano delle eccezioni: se abbiamo progettato ed etichettato bene le nostre interfacce, la maggior parte delle persone fornir\u00e0 un input ragionevole la maggior parte delle volte. Sebbene possa variare quello che le persone immettono (&#8220;$10.00&#8221; o &#8220;10&#8221;), il computer potr\u00e0 processare facilmente la maggior parte di questi valori immessi per dedurne il valore decimale di cui ha bisogno, sia che lo faccia inline o lato-server. Ma il suo volto cauto, machine-oriented, controller\u00e0 quella supposizione prima di fare qualsiasi azione. Se la transazione \u00e8 importante, come quando un utente immette il valore di una donazione, il sistema avr\u00e0 bisogno di fornire un feedback chiaro e di chiedere la conferma prima di procedere, anche se il valore ricade all&#8217;interno dei limiti della normalit\u00e0. Altrimenti, la riduzione aggressiva di testo in numero potrebbe risultare in un risultato inaspettato, e potenzialmente molto problematico, per l&#8217;utente:<\/p>\n<div class=\"illustration full left margin\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2013\/03\/02-donation.png\" border=\"0\" alt=\"Semplificazione oltremodo aggressiva di input testuale in numeri porta a risultati inattesi\" \/><\/div>\n<h3>Date<\/h3>\n<p>Per un computer le date e le ore sono solo casi speciali di numeri. Nei sistemi UNIX-based, ad esempio, il tempo \u00e8 spesso rappresentato come il numero di <a href=\"http:\/\/www.epochconverter.com\/\">secondi trascorsi<\/a> dal primo Gennaio 1970.<\/p>\n<p>Tuttavia, per una persona, il contesto \u00e8 la chiave per interpretare le date. Quando Alice chiede &#8220;Possiamo incontrarci Gioved\u00ec?&#8221; Bob pu\u00f2 tranquillamente assumere che il gioved\u00ec in questione sia il prossimo sul calendario e sicuramente non deve chiedere se intende il gioved\u00ec di settimana prossima. Gli interface designer dovrebbero cercare di avvicinarsi quanto pi\u00f9 possibile a questa esperienza umana considerando il contesto in cui viene richiesta una data.<\/p>\n<p>Possiamo fare ci\u00f2 rivisitando alcuni metodi tipici per richiedere una data agli utenti:<\/p>\n<ul>\n<li>Un input testuale, spesso con delle richieste di formattazione specifica (<em>MM\/DD\/YYYY<\/em>, ad esempio)<\/li>\n<li>Una widget di un calendario in miniatura, che sistema le date in una griglia mese per mese<\/li>\n<\/ul>\n<p>Questi pattern non sono mutualmente esclusivi e un&#8217;applicazione robusta potrebbe offrirne uno o entrambe, a seconda del contesto.<\/p>\n<p>Ci sono casi in cui la widget del calendario pu\u00f2 essere molto utile, come l&#8217;identificazione di una data futura che non \u00e8 nota (scegliendo il secondo gioved\u00ec del prossimo Febbraio). Ma per la maggior parte delle volte, un input testuale offre probabilmente il percorso migliore per inserire una data nota, specialmente se \u00e8 in un futuro molto vicino. Se Bob vuole farsi un appunto per l&#8217;incontro di gioved\u00ec, potrebbe essere pi\u00f9 efficiente per lui inserire la parola &#8220;Gioved\u00ec&#8221; o l&#8217;abbreviazione &#8220;Giov&#8221; piuttosto che richiamare un calendario e spostare il mouse (o peggio il suo dito su un touchscreen) per scegliere il piccolo box giusto.<\/p>\n<p>Ma quando imponiamo dei requisiti di formattazione troppo restrittivi, danneggiamo quel vantaggio: se Bob deve capire la data numerica corretta e inserirla in un modo molto specifico, potrebbe aver ancora bisogno del calendario. O, se un&#8217;applicazione richiede che la data di nascita di Alice sia nel formato <em>MM\/DD\/YYYY<\/em>, perch\u00e9 dovrebbe dare errore se inserisce 1\/1\/1970, omettendo gli zeri antecedenti i numeri di mese e giorno? Nella sua testa \u00e8 una data facilmente comprensibile.<\/p>\n<p>Un&#8217;applicazione che abbracci il Principio di Robustezza accetterebbe dall&#8217;utente qualunque cosa che assomigli a una data, fornendo ancora un <em>feedback<\/em> per confermare l&#8217;input, ma riportandolo come <em>problema<\/em> solo se l&#8217;interpretazione fallisse o se eccedesse i limiti. <a href=\"http:\/\/natty.joestelmach.com\/\">Esiste<\/a> un certo numero di <a href=\"http:\/\/php.net\/manual\/en\/function.strtotime.php\">librerie<\/a> <a href=\"http:\/\/lee.jarvis.co\/chronic\/\">software<\/a> per aiutare i computer a tradurre le descrizioni umane delle date come &#8220;domani&#8221;, &#8220;il prossimo Venerd\u00ec&#8221; o &#8220;11 Aprile&#8221; nei loro equivalenti valori machine-oriented strutturati. Sebbene molte siano piuttosto sofisticate, hanno comunque dei limiti: quindi, quando le usate, \u00e8 utile fornire agli utenti anche degli esempi dei pattern pi\u00f9 affidabili, anche se il sistema pu\u00f2 accettare altre forme di input.<\/p>\n<h3>Indirizzi<\/h3>\n<p>Forse pi\u00f9 spesso che qualunque altro tipo di input, i campi per l&#8217;indirizzo tendono ad essere basati sulla progettazione del database piuttosto che sulla convenienza degli utenti umani. Considerate questo comune layout:<\/p>\n<div class=\"illustration full left margin\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2013\/03\/03-address.png\" border=\"0\" alt=\"Un tipico insieme di input per catturare un indirizzo\" \/><\/div>\n<p>Questo insieme di campi pu\u00f2 coprire la maggioranza dei casi per gli indirizzi degli USA, ma non si adatta molto bene agli utenti <a href=\"http:\/\/www.columbia.edu\/~fdc\/postal\/\">internazionali<\/a>. E anche negli USA ci sono indirizzi che non rientrano bene in questo schema.<\/p>\n<p>Un&#8217;applicazione che vuole accettare completamente l&#8217;input umano potrebbe adottare il coraggioso approccio dell&#8217;uso di una singola <code>textarea<\/code> per catturare l&#8217;indirizzo, permettendo all&#8217;utente di strutturarlo proprio come farebbe se stesse scrivendo una lettera. E se l&#8217;indirizzo sar\u00e0 usato solo ed esclusivamente nella sua interezza, memorizzarlo come un singolo blocco di testo potrebbe essere tutto quello che \u00e8 richiesto. Vale la pena chiedere che livello di dettaglio \u00e8 davvero necessario per usare i dati.<\/p>\n<p>Tuttavia, spesso abbiamo un bisogno preciso legato al nostro business per memorizzare l&#8217;informazione in campi discreti. Ci sono molti servizi basati sul web e applicazioni che girano in locale che possono accettare una variet\u00e0 di formati di indirizzo e li standardizzano, sia che siano stati raccolti mediante un singolo input o con un insieme minimo di elementi strutturati.<\/p>\n<p>Considerate l&#8217;indirizzo seguente:<\/p>\n<div class=\"illustration full left margin\">\n<address> Avenue Appia 20<br \/> 1211 Gen\u00e8ve 27<br \/> SUISSE<\/address>\n<\/div>\n<p>Ad esempio, la <a href=\"https:\/\/developers.google.com\/maps\/documentation\/geocoding\/\">Google Geocoding API<\/a> potrebbe tradurlo in qualcosa di simile a quello che segue, con un alto livello di granularit\u00e0 per le applicazioni di mapping:<\/p>\n<pre><code>\"address_components\" : [\n  {\n     \"long_name\" : \"20\",\n     \"short_name\" : \"20\",\n     \"types\" : [ \"street_number\" ]\n  },\n  {\n     \"long_name\" : \"Avenue Appia\",\n     \"short_name\" : \"Avenue Appia\",\n     \"types\" : [ \"route\" ]\n  },\n  {\n     \"long_name\" : \"Geneva\",\n     \"short_name\" : \"Geneva\",\n     \"types\" : [ \"locality\", \"political\" ]\n  },\n  {\n     \"long_name\" : \"Gen\u00e8ve\",\n     \"short_name\" : \"Gen\u00e8ve\",\n     \"types\" : [ \"administrative_area_level_2\", \"political\" ]\n  },\n  {\n     \"long_name\" : \"Geneva\",\n     \"short_name\" : \"GE\",\n     \"types\" : [ \"administrative_area_level_1\", \"political\" ]\n  },\n  {\n     \"long_name\" : \"Switzerland\",\n     \"short_name\" : \"CH\",\n     \"types\" : [ \"country\", \"political\" ]\n  },\n  {\n     \"long_name\" : \"1202\",\n     \"short_name\" : \"1202\",\n     \"types\" : [ \"postal_code\" ]\n  }\n]<\/code><\/pre>\n<p>I dettagli (e i termini della licenza) di questi sistemi di standardizzazione variano e potrebbero non essere adeguati per tutte le applicazioni. Gli indirizzi complessi potrebbero essere un problema e avremo bisogno di dare all&#8217;applicazione un modo alternativo per gestirli. Sar\u00e0 necessario pi\u00f9 lavoro, ma per ottenere la miglior user experience, dovrebbe essere responsabilit\u00e0 dell&#8217;applicazione cercare prima di dare un senso a un input ragionevole. Non \u00e8 probabile che gli utenti si preoccupino se un database CRM vuole memorizzare il loro numero di appartamento separatamente dal nome della via.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>L&#8217;eccezione o la regola<\/h2>\n<p>Fare il parsing del linguaggio umano per trasformarlo in dati strutturati non funziona sempre. Sotto la linea guida numero quattro, un sistema robusto individuer\u00e0 e gestir\u00e0 gentilmente e con <a href=\"articoli\/25-numero-13-31-agosto-2010\/98-un-valido-aiuto-e-difficile-da-trovare\">rispetto<\/a> i casi limite, contemporaneamente cercando di minimizzare la loro frequenza. Questa lunga coda di user experience non dovrebbe far scodinzolare il proverbiale cane. In altre parole, se possiamo creare un&#8217;interfaccia che funziona senza errori nel 96% dei casi, riducendo il tempo per completare i task e mostrando un livello di empatia che supera le aspettative degli utenti, probabilmente vale lo sforzo necessario per creare un loop di feedback extra che gestisca il restante 5%.<\/p>\n<p>Pensate ancora al processo con cui si fa un ordine al telefono, parlando ad una persona. Se non comprende qualcosa che dite, potrebbe chiedervi di chiarire. Anche quando capisce, potrebbe rileggervi i dettagli per avere una vostra conferma. Quelle interazioni sono normali e solitamente cortesi. Infatti, rassicurano tutti noi che il risultato finale dell&#8217;interazione sar\u00e0 quello che ci aspettiamo.<\/p>\n<p>Tuttavia, probabilmente non vi dar\u00e0 un insieme di istruzioni rigide non appena risponde al telefono e poi vi <a href=\"http:\/\/en.wikipedia.org\/wiki\/The_Soup_Nazi\">rimprovera<\/a> se non riuscite a rispettarne alcune. Nonostante ci\u00f2, le applicazioni web creano sempre la stessa interazione (a volte saltando le istruzioni e andando direttamente alla sgridata).<\/p>\n<p>Per la maggior parte degli sviluppatori, l&#8217;integrit\u00e0 del sistema \u00e8 una priorit\u00e0 comprensibilmente alta. Una struttura migliore nei dati forniti dall&#8217;utente implica che possiamo gestirli in maniera pi\u00f9 affidabile. Vogliamo sistemi affidabili, cos\u00ec diventiamo avvocati dei bisogni della macchina. Quando l&#8217;input non passa la validazione, tendiamo a vederlo come un fallimento dell&#8217;utente, un errore, un tentativo di mandare dei dati cattivi nella <em>nostra<\/em> applicazione progettata cos\u00ec attentamente.<\/p>\n<p>Ma sia che i nostri <a href=\"http:\/\/archive.aneventapart.com\/alasurvey2011\/00.html#jt\">job title<\/a> includano la frase &#8220;user experience&#8221; sia che non lo contengano, dobbiamo sostenere almeno le persone che usano il nostro software tanto quanto facciamo per i nostri sistemi di computer. Qualsiasi problema stia risolvendo un&#8217;applicazione web, in ultima analisi \u00e8 stata creata per il beneficio di un essere umano. Chiunque lavori nella realizzazione di un&#8217;applicazione influenza l&#8217;esperienza, quindi migliorarla \u00e8 il nostro lavoro. Pensare in termini di robustezza pu\u00f2 aiutarci a bilanciare i bisogni sia delle persone sia dei computer.<\/p>\n<p>La legge di Postel ha provato il suo valore facendo funzionare internet per pi\u00f9 di tre decenni. Mi auguro che noi si possa realizzare software (e le esperienze che questo crea) con uno standard cos\u00ec alto.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Note<\/h2>\n<ul class=\"the-footnotes\">\n<li id=\"note1\"><a class=\"count\" href=\"#ref1\">1. <\/a>Gran parte del text processing si basa sulle espressioni regolari per fare il match dei pattern. Questa tecnologia ha una lunga storia nell&#8217;informatica, ma spesso la si trova anche in applicazioni meno tecniche. Le espressioni regolari possono <a href=\"http:\/\/www.zytrax.com\/tech\/web\/regex.htm#intro\">far paura<\/a> sulle prime perch\u00e9 spesso coinvolgono molte notazioni &#8220;shorthand&#8221;, ma vale la pena imparare come funzionano perch\u00e9 hanno un valore inestimabile per chiunque lavori con il testo, che sia un programmatore o uno scrittore. Online abbondano i <a href=\"http:\/\/www.regular-expressions.info\/tutorial.html\">tutorial<\/a>, i <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/JavaScript\/Guide\/Regular_Expressions\">riferimenti<\/a> e i <a href=\"http:\/\/gskinner.com\/blog\/archives\/2008\/03\/regexr_free_onl.html\">tool per i test<\/a>.<\/li>\n<\/ul>\n<p>Illustrazioni: {carlok}<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>I siti web devono essere utili alle persone e ai robot master. Un&#8217;interfaccia che riflette troppo il funzionamento interno di un sistema confonder\u00e0 gli utenti umani, ma se i dati non sono conformi ad una specifica struttura, \u00e8 probabile che confondano le macchine che devono usarli. In che modo pu\u00f2 il design servire due diversi padroni? Il principio di robustezza di Jon Postel, sebbene di solito si applichi a protocolli di basso livello come TCP, offre una chiave per la progettazione di esperienze che vanno incontro ai bisogni di uomini e macchine con la stessa grazia. Lyle Mullican ci spiega tutto questo.<\/p>\n","protected":false},"author":818,"featured_media":7000688,"comment_status":"open","ping_status":"open","template":"","categories":[269,279,84,9],"tags":[],"coauthors":[284],"class_list":["post-344","article","type-article","status-publish","has-post-thumbnail","hentry","category-application-development","category-interaction-design","category-numero-69-5-marzo-2013","category-usabilita"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article\/344","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article"}],"about":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/types\/article"}],"author":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/users\/818"}],"replies":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/comments?post=344"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media\/7000688"}],"wp:attachment":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media?parent=344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/categories?post=344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/tags?post=344"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/coauthors?post=344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}