{"id":4588,"date":"2022-06-10T09:00:00","date_gmt":"2022-06-10T07:00:00","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=4588"},"modified":"2022-06-10T12:56:08","modified_gmt":"2022-06-10T10:56:08","slug":"come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/","title":{"rendered":"Come costruire un URL shortener completamente Serverless utilizzando solo una manciata di servizi AWS"},"content":{"rendered":"\n

Al giorno d’oggi, sfruttare a pieno le potenzialit\u00e0 del cloud \u00e8 essenziale per realizzare progetti efficienti e di successo. <\/p>\n\n\n\n

Uno dei paradigmi che pi\u00f9 ha rivoluzionato, e sta tutt’ora rivoluzionando il settore \u00e8 sicuramente serverless<\/strong>.<\/p>\n\n\n\n

Sfruttando i principi del serverless computing \u00e8 possibile costruire applicazioni in cui la componente infrastrutturale scala in modo automatico seguendo perfettamente la curva delle richieste. Una buona infrastruttura serverless permette di abbattere i costi infrastrutturali e di manutenzione<\/strong> riducendo l’area di competenza del cliente. L’intera infrastruttura, infatti, risulta essere in alta disponibilit\u00e0, scalabile ed elastica by design<\/strong>.<\/p>\n\n\n\n

In questo articolo, vogliamo presentare una soluzione completamente serverless per creare un URL shortener. Nei paragrafi seguenti ripercorremo uno use case completo partendo dai requisiti e arrivando fino alla progettazione di una soluzione semplice basata su servizi AWS completamente gestiti e serverless.<\/p>\n\n\n\n

I requirements<\/h2>\n\n\n\n

Lo shortener dovr\u00e0 fornire un’API per la creazione dei link accorciati.<\/p>\n\n\n\n

L’API dovr\u00e0 rispondere a una richiesta GET cos\u00ec composta: https:\/\/example.com\/api\/v1\/action\/shorten?url=[URI]<\/p>\n\n\n\n

La risposta dovr\u00e0 essere in text\/plain ed il corpo deve contenere l’URL abbreviato https:\/\/example.com\/f\/7427<\/p>\n\n\n\n

Quando un utente visiter\u00e0 l’URL abbreviato, il sistema dovr\u00e0 reindirizzare il visitatore all’URL completo.<\/p>\n\n\n\n

Non \u00e8 necessaria alcuna autorizzazione n\u00e9 autenticazione per questa PoC.<\/p>\n\n\n\n

Lo shortener dovr\u00e0 obbligare l\u2019utilizzo di HTTPS per tutte le redirect fornite.<\/p>\n\n\n\n

La nostra soluzione<\/h2>\n\n\n\n

Cercheremo di non utilizzare la soluzione ovvia di esporre semplicemente un’API RESTFul pubblica utilizzando API Gateway, Lamba e DynamoDB perch\u00e9 non sarebbe divertente \ud83d\ude42 e, cosa pi\u00f9 importante, non \u00e8 la soluzione pi\u00f9 efficiente in termini di costi e scalabilit\u00e0.<\/p>\n\n\n\n

Combineremo invece i seguenti servizi AWS:<\/p>\n\n\n\n

  • Amazon S3<\/strong> come Object storage per i link e come motore di reindirizzamento.<\/li>
  • Amazon CloudFront<\/strong> come CDN e punto di ingresso unico per tutte le richieste.<\/li>
  • AWS Lambda@Edge<\/strong> per l’elaborazione back-end <\/li>
  • Amazon Route53<\/strong> per gestire le voci DNS.<\/li>
  • AWS Amazon Certificate Manager<\/strong> per generare e rinnovare automaticamente i certificati HTTPS.<\/li><\/ul>\n\n\n\n

    L’idea \u00e8 quella di creare una semplice API sfruttando Lambda@Edge.<\/p>\n\n\n\n

    Lambda@Edge<\/strong> \u00e8 una feature di Amazon CloudFront che permette di renderlo il punto di ingresso<\/strong> del codice ed eseguire Lambda pi\u00f9 vicino agli utenti<\/strong> che effettuano le richieste. Ci\u00f2 migliora le prestazioni e riduce la latenza<\/strong>; ha anche funzionalit\u00e0 di caching integrata<\/strong> sfruttando l\u2019infrastruttura di CloudFront. Lambda@Edge consente di creare un’applicazione davvero globale senza gestire l’infrastruttura in pi\u00f9 region in tutto il mondo.<\/p>\n\n\n\n

    Quando l’utente chiama l’API dello shortneer, la richiesta raggiunge il miglior nodo CloudFront per l’utente in base al traffico ed alla zona del mondo di origine. CloudFront avvier\u00e0 quindi un lambda nella posizione pi\u00f9 vicina.<\/p>\n\n\n\n

    La logica del backend su lambda dovrebbe essere molto semplice; fondamentalmente calcola k<\/strong>, una stringa univoca di 8 caratteri composta da lettere maiuscole, lettere minuscole e numeri. Il numero totale di collegamenti che possono essere contemporaneamente attivi \u00e8, quindi, 218.340.105.584.896 (218+ collegamenti Tera).<\/p>\n\n\n\n

    Ora abbiamo bisogno di un posto dove archiviare la nostra chiave univoca e l’URL corrispondente<\/strong>, e DynamoDB sembrerebbe la scelta pi\u00f9 ovvia.<\/p>\n\n\n\n

    C’\u00e8 per\u00f2 una caratteristica di Amazon S3 quasi sconosciuta, che pu\u00f2 essere utilizzata per diminuire ulteriormente il costo della soluzione, mantenendo prestazioni e scalabilit\u00e0 eccellenti.<\/p>\n\n\n\n

    Reindirizzare le richieste ad un oggetto S3<\/h2>\n\n\n\n

    \u00c8 possibile reindirizzare le richieste di un oggetto a un altro oggetto o a un URL arbitrario impostando la posizione di reindirizzamento nei metadati dell’oggetto. L’aggiunta della propriet\u00e0 x-amz-website-redirect-location ai metadati dell’oggetto S3 \u00e8 tutto ci\u00f2 che serve per ottenere un reindirizzamento 301 ogni volta che si richiede la chiave dell’oggetto. Inoltre, l’oggetto pu\u00f2 essere vuoto (0 byte).<\/p>\n\n\n\n

    Possiamo sfruttare questa funzione utilizzando S3 come archivio dati integrato con CloudFront come nostro database key-value, creando oggetti di 0 byte denominati utilizzando k come chiave e impostando x-amz-website-redirect-location sull\u2019 URL originale.<\/p>\n\n\n\n

    Tornando al nostro scenario: Lambda@edge archivia un oggetto vuoto in un bucket Amazon S3. La chiave dell’oggetto \u00e8 impostata a k e la propriet\u00e0 x-amz-website-redirect-location \u00e8 imposta sull’URL originale.<\/p>\n\n\n\n

    Gli oggetti contenuti nel Bucket S3 vengono utilizzati per causare il reindirizzamento HTTP quando l’utente segue il collegamento tramite CloudFront.<\/p>\n\n\n\n

    Dobbiamo configurare la nostra distribuzione CloudFront per utilizzare il bucket S3 come origine.<\/p>\n\n\n\n

    Questa soluzione \u00e8 economica e veloce, grazie alla distribuzione CloudFront. Utilizza solo servizi serverless e pu\u00f2 scalare in modo rapido e affidabile fino a milioni di impressioni.<\/p>\n\n\n\n

    \u00c8 anche possibile configurare un meccanismo per eliminare i vecchi collegamenti utilizzando le lifecycle policies di S3.<\/p>\n\n\n\n

    Infrastruttura AWS<\/h2>\n\n\n\n

    Quello che segue \u00e8 lo schema infrastrutturale della soluzione.<\/p>\n\n\n\n

    <\/p>\n\n\n

    \n
    \"serverless<\/figure><\/div>\n\n\n

    <\/p>\n\n\n\n

    Il punto di ingresso del sistema \u00e8 sempre CloudFrontCDN; integra sia Lambda@Edge per l’API che Amazon S3 per i reindirizzamenti dei link. Il routing \u00e8 basato sul percorso.<\/p>\n\n\n\n

    La CDN pu\u00f2 o meno memorizzare nella cache i risultati dell’API; pertanto, puoi configurare CloudFront per memorizzare nella cache le risposte API, riducendo il costo di calcolo della soluzione. Se abiliti la memorizzazione nella cache, le chiamate successive per abbreviare lo stesso URL otterranno la stessa versione abbreviata e non eseguiranno una funzione Lambda. In caso contrario, ogni richiesta attiver\u00e0 Lambda e produrr\u00e0 collegamenti abbreviati diversi e univoci.<\/p>\n\n\n\n

    Si noti che per questa soluzione, il servizio VPC non viene utilizzato affatto, in quanto la soluzione sfrutta i servizi completamente gestiti nello spazio di rete AWS.<\/p>\n\n\n\n

    Motore di reindirizzamento<\/h2>\n\n\n\n

    Il motore di reindirizzamento viene realizzato utilizzando Amazon S3.<\/p>\n\n\n\n

    Il Bucket \u00e8 configurato come Web hosting statico pubblico, ci\u00f2 \u00e8 richiesto dal motore di reindirizzamento per funzionare. Ogni oggetto ha metadati per istruire l’hosting web a reindirizzare l’utente con un codice di stato HTTP 301.<\/p>\n\n\n\n

    Questo bucket viene utilizzato come una delle origini per la CDN, pertanto la redirect viene servita tramite CDN, non direttamente da S3. Possiamo configurare S3 in modo che il contenuto possa essere richiesto solo tramite CloudFront, riducendo il rischio di accessi S3 indesiderati e i relativi costi.<\/p>\n\n\n\n

    Il reindirizzamento per ogni chiave univoca viene memorizzato nella cache nella rete CDN per risparmiare sui costi e prestazioni.<\/p>\n\n\n\n

    Logging e Dubbing<\/h2>\n\n\n\n

    Lambda \u00e8 configurato per eseguire lo streaming dei log in AWS CloudWatch ed \u00e8 possibile impostare il periodo di conservazione per ciascun gruppo di log.<\/p>\n\n\n\n

    Poich\u00e9 i log di Lambda@Edge vengono trasmessi in streaming alla regione AWS pi\u00f9 vicina, i log vengono archiviati nella stessa regione in cui viene creato il collegamento.<\/p>\n\n\n\n

    Wrap-up<\/h2>\n\n\n\n

    Quindi, per concludere, questa \u00e8 una soluzione multi-region, completamente serverless ed ad alta disponibilit\u00e0 per creare un semplice URL shortener. Un ottimo punto di partenza per ulteriori affinamenti e discussioni e per soluzioni pi\u00f9 complesse basate sugli stessi principi! <\/p>\n\n\n\n

    Avete realizzato soluzioni simili? Quali servizi avete utilizzato? Fatecelo sapere!<\/p>\n","protected":false},"excerpt":{"rendered":"

    Al giorno d’oggi, sfruttare a pieno le potenzialit\u00e0 del cloud \u00e8 essenziale per realizzare progetti efficienti e di successo.  Uno […]<\/p>\n","protected":false},"author":8,"featured_media":4593,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[477],"tags":[249,289,578,579,267],"yoast_head":"\nCome costruire un URL shortener completamente Serverless utilizzando solo una manciata di servizi AWS - Proud2beCloud Blog<\/title>\n<meta name=\"description\" content=\"In questo articolo vedremo come \u00e8 possibile creare una soluzione di URL shortening completamente Serverless basata sui servizi AWS\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Come costruire un URL shortener completamente Serverless basato su AWS\" \/>\n<meta property=\"og:description\" content=\"In questo articolo vedremo come \u00e8 possibile creare una soluzione di URL shortening completamente Serverless basata sui servizi AWS\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/\" \/>\n<meta property=\"og:site_name\" content=\"Proud2beCloud Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-10T07:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-06-10T10:56:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2022\/06\/Copertina-blog-10-06-22_10-06-22-social-ita.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Alessio Gandini\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Come costruire un URL shortener completamente Serverless basato su AWS\" \/>\n<meta name=\"twitter:description\" content=\"In questo articolo vedremo come \u00e8 possibile creare una soluzione di URL shortening completamente Serverless basata sui servizi AWS\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2022\/06\/Copertina-blog-10-06-22_10-06-22-social-ita.png\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alessio Gandini\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/\",\"url\":\"https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/\",\"name\":\"Come costruire un URL shortener completamente Serverless utilizzando solo una manciata di servizi AWS - Proud2beCloud Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\"},\"datePublished\":\"2022-06-10T07:00:00+00:00\",\"dateModified\":\"2022-06-10T10:56:08+00:00\",\"author\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/e7262d28e51528c2e420327f9b18cd43\"},\"description\":\"In questo articolo vedremo come \u00e8 possibile creare una soluzione di URL shortening completamente Serverless basata sui servizi AWS\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.besharp.it\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Come costruire un URL shortener completamente Serverless utilizzando solo una manciata di servizi AWS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\",\"url\":\"https:\/\/blog.besharp.it\/it\/\",\"name\":\"Proud2beCloud Blog\",\"description\":\"il blog di beSharp\",\"alternateName\":\"Proud2beCloud Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.besharp.it\/it\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/e7262d28e51528c2e420327f9b18cd43\",\"name\":\"Alessio Gandini\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/eeb98518768d999bff24f8358b464fe2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/eeb98518768d999bff24f8358b464fe2?s=96&d=mm&r=g\",\"caption\":\"Alessio Gandini\"},\"description\":\"Cloud-native Development Line Manager @ beSharp, DevOps Engineer e AWS expert. Computer geek da quando avevo 6 anni, appassionato di informatica ed elettronica a tutto tondo. Ultimamente sto esplorando l'esperienza utente vocale e il mondo dell'IoT. Appassionato di cinema e grande consumatore di serie TV, videogiocatore della domenica.\",\"url\":\"https:\/\/blog.besharp.it\/it\/author\/alessio-gandini\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Come costruire un URL shortener completamente Serverless utilizzando solo una manciata di servizi AWS - Proud2beCloud Blog","description":"In questo articolo vedremo come \u00e8 possibile creare una soluzione di URL shortening completamente Serverless basata sui servizi AWS","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/","og_locale":"it_IT","og_type":"article","og_title":"Come costruire un URL shortener completamente Serverless basato su AWS","og_description":"In questo articolo vedremo come \u00e8 possibile creare una soluzione di URL shortening completamente Serverless basata sui servizi AWS","og_url":"https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/","og_site_name":"Proud2beCloud Blog","article_published_time":"2022-06-10T07:00:00+00:00","article_modified_time":"2022-06-10T10:56:08+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2022\/06\/Copertina-blog-10-06-22_10-06-22-social-ita.png","type":"image\/png"}],"author":"Alessio Gandini","twitter_card":"summary_large_image","twitter_title":"Come costruire un URL shortener completamente Serverless basato su AWS","twitter_description":"In questo articolo vedremo come \u00e8 possibile creare una soluzione di URL shortening completamente Serverless basata sui servizi AWS","twitter_image":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2022\/06\/Copertina-blog-10-06-22_10-06-22-social-ita.png","twitter_misc":{"Scritto da":"Alessio Gandini","Tempo di lettura stimato":"6 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/","url":"https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/","name":"Come costruire un URL shortener completamente Serverless utilizzando solo una manciata di servizi AWS - Proud2beCloud Blog","isPartOf":{"@id":"https:\/\/blog.besharp.it\/it\/#website"},"datePublished":"2022-06-10T07:00:00+00:00","dateModified":"2022-06-10T10:56:08+00:00","author":{"@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/e7262d28e51528c2e420327f9b18cd43"},"description":"In questo articolo vedremo come \u00e8 possibile creare una soluzione di URL shortening completamente Serverless basata sui servizi AWS","breadcrumb":{"@id":"https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.besharp.it\/it\/come-costruire-un-url-shortener-completamente-serverless-utilizzando-solo-una-manciata-di-servizi-aws\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.besharp.it\/it\/"},{"@type":"ListItem","position":2,"name":"Come costruire un URL shortener completamente Serverless utilizzando solo una manciata di servizi AWS"}]},{"@type":"WebSite","@id":"https:\/\/blog.besharp.it\/it\/#website","url":"https:\/\/blog.besharp.it\/it\/","name":"Proud2beCloud Blog","description":"il blog di beSharp","alternateName":"Proud2beCloud Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.besharp.it\/it\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/e7262d28e51528c2e420327f9b18cd43","name":"Alessio Gandini","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/eeb98518768d999bff24f8358b464fe2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/eeb98518768d999bff24f8358b464fe2?s=96&d=mm&r=g","caption":"Alessio Gandini"},"description":"Cloud-native Development Line Manager @ beSharp, DevOps Engineer e AWS expert. Computer geek da quando avevo 6 anni, appassionato di informatica ed elettronica a tutto tondo. Ultimamente sto esplorando l'esperienza utente vocale e il mondo dell'IoT. Appassionato di cinema e grande consumatore di serie TV, videogiocatore della domenica.","url":"https:\/\/blog.besharp.it\/it\/author\/alessio-gandini\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/4588"}],"collection":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/comments?post=4588"}],"version-history":[{"count":0,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/4588\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media\/4593"}],"wp:attachment":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media?parent=4588"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/categories?post=4588"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/tags?post=4588"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}