{"id":88581,"date":"2020-07-15T01:42:09","date_gmt":"2020-07-14T23:42:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/unreal-features-of-real-types-ili-budte-ostorozhny-s-real"},"modified":"2020-07-15T01:42:09","modified_gmt":"2020-07-14T23:42:09","slug":"unreal-features-of-real-types-ili-budte-ostorozhny-s-real","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/unreal-features-of-real-types-ili-budte-ostorozhny-s-real","title":{"rendered":"Caratteristiche irreali dei tipi reali, o Fate attenzione ai REAL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Dopo la pubblicazione <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/tensor\/blog\/508038\/\">sul CommunityHelpWiki (sullo stesso dominio<\/a><\/noindex> sulle peculiarit\u00e0 della tipizzazione in PostgreSQL, il primo commento ha riguardato le difficolt\u00e0 nell'uso dei numeri reali. Ho deciso di dare un'occhiata veloce al codice delle query SQL a mia disposizione per vedere quanto spesso venisse utilizzato il tipo REAL. \u00c8 stato usato abbastanza frequentemente, come si \u00e8 rivelato, e non sempre gli sviluppatori comprendono i pericoli che lo accompagnano. Questo nonostante ci siano molte buone articoli su Internet e su Habr riguardo alle peculiarit\u00e0 della memorizzazione dei numeri reali nella memoria del computer e al loro utilizzo. Pertanto, in questo articolo cercher\u00f2 di applicare tali peculiarit\u00e0 a PostgreSQL, e prover\u00f2 a esaminare \u00abletteralmente\u00bb i problemi a essi associati, per facilitare agli sviluppatori di query SQL l'evitarli.<\/p>\n<p><\/p>\n<p>La documentazione di PostgreSQL contiene una frase concisa: \u00abLa gestione di tali errori e la loro diffusione nel corso dei calcoli \u00e8 oggetto di studio di un'intera branca della matematica e dell'informatica, e qui non viene trattata\u00bb (rimandando quindi saggiamente il lettore allo standard IEEE 754). Quali errori si intendono? Discutiamoli in ordine, e presto diventer\u00e0 chiaro perch\u00e9 ho deciso di riprendere la penna.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Prendiamo, ad esempio, una semplice query:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">********* QUERY *********\nSELECT 0.1::REAL;\n**************************\nfloat4\n--------\n    0.1\n(1 riga)\n<\/code><\/pre>\n<p><\/p>\n<p>Di conseguenza, non vedremo nulla di speciale: otterremo il previsto 0.1. Ma ora confrontiamolo con 0.1:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">********* QUERY *********\nSELECT 0.1::REAL = 0.1;\n**************************\n?colonna?\n----------\nf\n(1 riga)\n<\/code><\/pre>\n<p><\/p>\n<p>Non sono uguali! Quali meraviglie! Ma c'\u00e8 di pi\u00f9. Alcuni diranno che REAL si comporta male con i numeri frazionari, quindi inserir\u00f2 solo numeri interi, con quelli sicuramente andr\u00e0 tutto bene. Ok, riportiamo il numero 123&nbsp;456&nbsp;789 al tipo REAL:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">********* QUERY *********\nSELECT 123456789::REAL::INT;\n**************************\n   int4   \n-----------\n123456792\n(1 riga)\n<\/code><\/pre>\n<p><\/p>\n<p>E magicamente \u00e8 diventato pi\u00f9 grande di 3! La base ha completamente dimenticato come si fa a contare! O siamo noi a non comprendere qualcosa? Vediamo di chiarire.<\/p>\n<p><\/p>\n<p>Iniziamo rivedendo le basi. Come sappiamo, qualsiasi numero decimale pu\u00f2 essere scomposto in potenze di dieci. Cos\u00ec, il numero 123.456 sar\u00e0 uguale a 1*10\u00b2 + 2*10\u00b9 + 3*10\u2070 + 4*10\u207b\u00b9 + 5*10\u207b\u00b2 + 6*10\u207b\u00b3. Ma il computer opera con numeri in forma binaria, quindi \u00e8 necessario rappresentarli come scomposizione in potenze di due. Pertanto, il numero 5.625 in forma binaria si rappresenta come 101.101 e sar\u00e0 uguale a 1*2\u00b2 + 0*2\u00b9 + 1*2\u2070 + 1*2\u207b\u00b9 + 0*2\u207b\u00b2 + 1*2\u207b\u00b3. Mentre le potenze positive di due danno sempre numeri decimali interi (1, 2, 4, 8, 16, ecc.), le potenze negative sono pi\u00f9 complesse (0,5, 0,25, 0,125, 0,0625, ecc.). Il problema \u00e8 che <b>non ogni frazione decimale pu\u00f2 essere rappresentata come una frazione binaria finita<\/b>. Cos\u00ec, il nostro famoso 0.1 in forma di frazione binaria si presenta come valore periodico 0.0(0011). Di conseguenza, il valore finale di questo numero nella memoria del computer varier\u00e0 a seconda della larghezza di parola.<\/p>\n<p><\/p>\n<p>Ora \u00e8 il momento di ricordare come i numeri reali vengono memorizzati nella memoria del computer. Parlando in termini generali, un numero reale consiste di tre parti principali: segno, mantissa ed esponente. Il segno pu\u00f2 essere sia positivo che negativo, quindi occupa un bit. La quantit\u00e0 di bit per la mantissa e l'esponente \u00e8 definita dal tipo di dato reale. Per il tipo REAL, la lunghezza della mantissa \u00e8 di 23 bit (un bit, pari a 1, viene aggiunto implicitamente all'inizio della mantissa, per un totale di 24), mentre l'esponente \u00e8 di 8 bit. In totale, abbiamo 32 bit, ovvero 4 byte. Per il tipo DOUBLE PRECISION, la lunghezza della mantissa sar\u00e0 di 52 bit e l'esponente di 11 bit, per un totale di 64 bit, ovvero 8 byte. PostgreSQL non supporta una maggiore precisione per i numeri in virgola mobile.<\/p>\n<p><\/p>\n<p>Imballiamo il nostro numero 0.1 in forma decimale in entrambi i tipi: REAL e DOUBLE PRECISION. Poich\u00e9 il segno e il valore dell'esponente coincidono, concentriamoci sulla mantissa (sto intenzionalmente trascurando le particolarit\u00e0 non ovvie della memorizzazione dei valori esponenziali e dei valori reali nulli, in quanto appesantiscono la comprensione e distraggono dall'essenza del problema; se siete interessati, consultate lo standard IEEE 754). Cosa otteniamo? Nella riga superiore fornir\u00f2 la \"mantissa\" per il tipo REAL (considerando l'arrotondamento dell'ultimo bit in 1 al numero rappresentabile pi\u00f9 vicino, altrimenti otterremmo 0.099999\u2026), e nella riga inferiore per il tipo DOUBLE PRECISION:<\/p>\n<p><\/p>\n<blockquote><p><b>0.0001<\/b>1001100110011001100110<b>1<\/b><br \/>\n<b>0.0001<\/b>1001100110011001100110011001100110011001100110011001\n<\/p><\/blockquote>\n<p><\/p>\n<p>\u00c8 evidente che si tratta di due numeri completamente diversi! Pertanto, durante il confronto, il primo numero sar\u00e0 completato con zeri e, di conseguenza, sar\u00e0 maggiore del secondo (considerando l'arrotondamento \u2013 la singola unit\u00e0 in grassetto). Questo spiega l'ambiguit\u00e0 nei nostri esempi. Nel secondo esempio, il numero specificato 0.1 viene convertito nel tipo DOUBLE PRECISION, dopodich\u00e9 viene confrontato con un numero di tipo REAL. Entrambi sono convertiti nello stesso tipo, e abbiamo esattamente ci\u00f2 che vediamo sopra. Modifichiamo la query affinch\u00e9 tutto torni al suo posto:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">********* QUERY *********\nSELECT 0.1::REAL &gt; 0.1::DOUBLE PRECISION;\n**************************\n?column?\n----------\nt\n(1 riga)\n<\/code><\/pre>\n<p><\/p>\n<p>E infatti, eseguendo la doppia conversione del numero 0.1 in REAL e DOUBLE PRECISION otteniamo la risposta all'enigma:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">********* QUERY *********\nSELECT 0.1::REAL::DOUBLE PRECISION;\n**************************\n\n      float8       \n-------------------\n0.100000001490116\n(1 riga)\n<\/code><\/pre>\n<p><\/p>\n<p>Questo spiega anche il terzo esempio tra quelli citati sopra. Il numero 123&nbsp;456&nbsp;789 semplicemente <b>impossibile da adattare in 24 bit di mantissa<\/b> (23 espliciti + 1 implicito). Il massimo numero intero che pu\u00f2 essere rappresentato in 24 bit \u00e8 224-1 = 16&nbsp;777&nbsp;215. Pertanto, il nostro numero 123&nbsp;456&nbsp;789 viene arrotondato al pi\u00f9 vicino rappresentabile 123&nbsp;456&nbsp;792. Cambiando il tipo in DOUBLE PRECISION, non vedremo pi\u00f9 tale scenario:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">********* QUERY *********\nSELECT 123456789::DOUBLE PRECISION::INT;\n**************************\n   int4   \n-----------\n123456789\n(1 riga)\n<\/code><\/pre>\n<p><\/p>\n<p>Ecco fatto. Si rivela che non ci sono miracoli. Ma quanto descritto \u00e8 un buon motivo per riflettere su quanto sia davvero necessario il tipo REAL. Probabilmente, il maggior vantaggio del suo utilizzo \u00e8 la rapidit\u00e0 dei calcoli con una perdita di precisione gi\u00e0 nota. Ma sar\u00e0 questo uno scenario universale che giustifichi un uso cos\u00ec frequente di questo tipo? Non lo credo.<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/tensor\/blog\/508350\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 PostgreSQL, \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0431\u044b\u043b \u043f\u0440\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438. \u042f \u0440\u0435\u0448\u0438\u043b \u0431\u0435\u0433\u043b\u043e \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u043e\u0434\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043c\u043d\u0435 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u043e \u0432 \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0438\u043f REAL. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0437\u0430 \u043d\u0438\u043c. \u0418 \u044d\u0442\u043e \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-88581","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 PostgreSQL, \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0431\u044b\u043b \u043f\u0440\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/unreal-features-of-real-types-ili-budte-ostorozhny-s-real\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Unreal Features of Real Types, \u0438\u043b\u0438 \u0411\u0443\u0434\u044c\u0442\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b \u0441 REAL | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 PostgreSQL, \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0431\u044b\u043b \u043f\u0440\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/unreal-features-of-real-types-ili-budte-ostorozhny-s-real\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-14T23:42:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-14T23:42:09+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Caratteristiche irreali dei tipi reali, o Fate attenzione al REAL | ProHoster","description":"Dopo la pubblicazione dell'articolo sulle peculiarit\u00e0 della tipizzazione in PostgreSQL, il primo commento \u00e8 stato sui problemi di lavoro con.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/unreal-features-of-real-types-ili-budte-ostorozhny-s-real","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Unreal Features of Real Types, \u0438\u043b\u0438 \u0411\u0443\u0434\u044c\u0442\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b \u0441 REAL | ProHoster","og:description":"\u041f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 PostgreSQL, \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0431\u044b\u043b \u043f\u0440\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441.","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/unreal-features-of-real-types-ili-budte-ostorozhny-s-real","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-14T23:42:09+00:00","article:modified_time":"2020-07-14T23:42:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"88581","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:10:53","updated":"2022-10-03 00:47:31","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/88581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=88581"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/88581\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=88581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=88581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=88581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}