{"id":5310,"date":"2024-08-20T08:35:00","date_gmt":"2024-08-20T06:35:00","guid":{"rendered":"https:\/\/viva.racunalniske-novice.com\/primer-implementacije-sprotnega-tekstovnega-pogovora-s-knjiznico-signalr\/"},"modified":"2024-08-20T08:35:00","modified_gmt":"2024-08-20T06:35:00","slug":"primer-implementacije-sprotnega-tekstovnega-pogovora-s-knjiznico-signalr","status":"publish","type":"post","link":"https:\/\/viva.racunalniske-novice.com\/it\/esempio-di-implementazione-della-conversazione-testuale-in-tempo-reale-con-la-libreria-signalr\/","title":{"rendered":"Un esempio di implementazione di una conversazione di testo in tempo reale con la libreria SignalR"},"content":{"rendered":"<p><em>Autore: Denis Balant, Enej Hudobreznik<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>Il protocollo HTTP (Hypertext Transfer Protocol) viene ancora utilizzato principalmente per la trasmissione di dati su Internet. \u00e8 il derivato crittografato HTTPS (HTTP Secure) pi\u00f9 moderno e pi\u00f9 sicuro. Si basano sull&#039;architettura client-server, in cui il client (client inglese) invia una richiesta (richiesta HTTP inglese) al server (server inglese) e il server risponde con una risposta (risposta HTTP inglese).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/08\/image.png\" alt=\"Richieste e risposte HTTP (fonte: https:\/\/www.telerik.com\/blogs\/real-time-communication-techniques)\" class=\"wp-image-2538892\"\/><figcaption><sub>Richieste e risposte HTTP (fonte: <a href=\"https:\/\/www.telerik.com\/blogs\/real-time-communication-techniques\">https:\/\/www.telerik.com\/blogs\/real-time-communication-techniques<\/a>)<\/sub><\/figcaption><\/figure>\n\n\n\n<p>HTTP e HTTPS sono adatti per semplici trasferimenti di tipo richiesta-risposta (ad esempio, il download di un file HTML su richiesta di un client). Utilizzando questi due protocolli, l&#039;utente pu\u00f2 ottenere dati aggiornati solo quando viene effettuata una nuova richiesta, quindi non sono adatti al trasferimento di dati in tempo reale (ad esempio, chat online, videogiochi online, tracciamento della posizione, ecc.), su cui si basa gran parte delle funzionalit\u00e0 delle moderne applicazioni web. Esistono molti modi diversi e migliori per implementare l&#039;agilit\u00e0, ognuno con i suoi vantaggi e svantaggi. <\/p>\n\n\n\n<p>Il metodo di implementazione pi\u00f9 semplice \u00e8 il polling regolare, in cui il client invia ripetutamente richieste di nuovi dati al server ad ogni intervallo di polling, indipendentemente dal fatto che il contenuto sia cambiato o meno. Nonostante la sua semplicit\u00e0, questo approccio non \u00e8 adatto a servizi pi\u00f9 grandi dove l&#039;accesso al server richiede molti client, perch\u00e9 una grande quantit\u00e0 di richieste inutili e ripetute possono sovraccaricarlo e quindi rallentare le prestazioni del servizio. &nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/08\/image-2.png\" alt=\"\" class=\"wp-image-2538894\"\/><figcaption><sub>Interrogatorio attuale (fonte: <a href=\"https:\/\/www.telerik.com\/blogs\/real-time-communication-techniques\">https:\/\/www.telerik.com\/blogs\/real-time-communication-techniques<\/a>)<\/sub><\/figcaption><\/figure>\n\n\n\n<p>Il miglioramento si ottiene introducendo il polling a lungo termine, in cui il client invia richieste al server allo stesso modo, ma il server non risponde finch\u00e9 non rileva la presenza di nuovi dati. Lo svantaggio di un simile approccio \u00e8 che il client deve avere definito un determinato intervallo di tempo dopo il quale riconosce l&#039;inattivit\u00e0 del server come un errore. Ci\u00f2 aggiunge un ulteriore livello di complessit\u00e0 alla configurazione del client e del server.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/08\/image-3.png\" alt=\"\" class=\"wp-image-2538896\"\/><figcaption><sub>Interrogatorio prolungato (fonte: <a href=\"https:\/\/www.telerik.com\/blogs\/real-time-communication-techniques\">https:\/\/www.telerik.com\/blogs\/real-time-communication-techniques<\/a>)<\/sub><\/figcaption><\/figure>\n\n\n\n<p>Il moderno standard HTML5 fornisce anche un&#039;API chiamata Server-Sent Events. \u00c8 un protocollo in cui il client non deve inviare periodicamente richieste al server, ma il server invia nuovamente i dati necessari quando vengono apportate modifiche, facilitando cos\u00ec la comunicazione in tempo reale.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/08\/image-4.png\" alt=\"\" class=\"wp-image-2538898\"\/><figcaption><sub>Eventi inviati dal server (fonte: <a href=\"https:\/\/www.telerik.com\/blogs\/real-time-communication-techniques\">https:\/\/www.telerik.com\/blogs\/real-time-communication-techniques<\/a>)<\/sub><\/figcaption><\/figure>\n\n\n\n<p>Lo standard HTML5 offre anche il protocollo WebSockets, che consente una vera comunicazione bidirezionale in tempo reale. All&#039;inizio dell&#039;istituzione, viene eseguito un handshake, in cui il client e il server concordano sull&#039;insieme di standard che utilizzeranno. Dopo una stretta di mano riuscita, tra i due partecipanti viene aperta una connessione permanente con un piccolo ritardo. Questo protocollo \u00e8 particolarmente utile quando si tratta di una connessione punto a punto (una connessione diretta tra un client e un server).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/08\/image-5-e1724134052479.png\" alt=\"\" class=\"wp-image-2538902\"\/><\/figure>\n\n\n\n<p>Oltre alla classica architettura client-server, esistono altre soluzioni in cui la connessione tra client non avviene attraverso server, ma direttamente tra client che svolgono sia il ruolo di client che di server (queste reti peer-to-peer). Un protocollo popolare per la comunicazione in tempo reale in tali reti \u00e8 WebRTC.<\/p>\n\n\n\n<p>Nell&#039;ambiente .NET per la comunicazione in tempo reale, possiamo utilizzare la libreria open source SignalR, che fa parte del framework web ASP.NET Core, quindi \u00e8 facile aggiungerla ai progetti esistenti come livello middleware aggiuntivo durante l&#039;elaborazione richieste in arrivo. La libreria simula chiamate al metodo sul client dal lato server e chiamate al metodo sul server dal lato client (Remote Procedure Call - RPC), ma non garantisce la congruit\u00e0 del n. parametri e i loro tipi. Dal server possiamo chiamare metodi su tutti i client, su un gruppo specifico di client o su un solo client.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/08\/image-6.png\" alt=\"\" class=\"wp-image-2538908\"\/><figcaption><sub>Diagramma di come funziona la libreria SignalR (<a href=\"https:\/\/learn.microsoft.com\/en-us\/aspnet\/signalr\/overview\/getting-started\/introduction-to-signalr\">https:\/\/learn.microsoft.com\/en-us\/aspnet\/signalr\/overview\/getting-started\/introduction-to-signalr<\/a>)<\/sub><\/figcaption><\/figure><\/div>\n\n\n\n<p>Il suo principale vantaggio \u00e8 la semplicit\u00e0 di implementazione grazie ai pacchetti di sviluppo software (SDK) per molte piattaforme diverse, che nascondono il funzionamento interno del servizio ai programmatori, e la possibilit\u00e0 di un facile hosting con il servizio Azure SignalR. Un ulteriore vantaggio \u00e8 che \u00e8 il servizio stesso a scegliere il tipo di connessione pi\u00f9 appropriato (descritto sopra) tra il client e il server.<\/p>\n\n\n\n<p>L&#039;utilizzo della libreria si basa su classi speciali chiamate hub, che rappresentano un&#039;astrazione della connessione tra client e server. Per loro definiamo i metodi che i client possono chiamare sul server.<\/p>\n\n\n\n<p>L&#039;esempio seguente mostra un esempio di una semplice implementazione di una conversazione di testo. Per prima cosa definiamo il nodo base per la conversazione sul server. I metodi di questa classe rappresentano metodi che possono essere chiamati dai client sul server. Quando viene chiamato il metodo SendMessage, il client invia l&#039;ID utente (userId) e il contenuto del messaggio (message), mentre il server chiama il metodo ReceiveMessage su tutti i client con i parametri specificati.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/08\/image-7.png\" alt=\"\" class=\"wp-image-2538942\"\/><figcaption><sub>Implementazione della conversazione testuale sul server in ambiente .NET (fonte propria)<\/sub><\/figcaption><\/figure>\n\n\n\n<p>L&#039;esempio seguente mostra un&#039;implementazione del client Web JavaScript utilizzando la libreria ufficiale (@microsoft\/signalr). I client si connettono all&#039;URL del nodo (\/chat nell&#039;esempio seguente). Una connessione \u00e8 rappresentata dall&#039;oggetto connessione. Il metodo on rappresenta un ascoltatore della chiamata al metodo, il cui nome viene fornito come primo parametro e come secondo la funzione che viene eseguita sull&#039;evento. Implementiamo i metodi sul server tramite il metodo invoke dell&#039;oggetto connessione, che richiede come primo argomento il nome del metodo, seguito dai suoi parametri.<\/p>\n\n\n\n<p>Per impostazione predefinita, i dati vengono trasferiti tra il server e i client in formato JSON, ma la libreria supporta anche il formato MessagePack pi\u00f9 efficiente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/08\/image-8.png\" alt=\"\" class=\"wp-image-2538944\"\/><figcaption><sub>Implementazione del client web in linguaggio JavaScript (fonte propria)<\/sub><\/figcaption><\/figure>\n\n\n\n<p>Sebbene la libreria faciliti notevolmente lo sviluppo, presenta i suoi svantaggi. Uno dei principali \u00e8 la scalabilit\u00e0 del sistema nel proprio hosting e la garanzia di un funzionamento ininterrotto, poich\u00e9 la sua implementazione \u00e8 molto difficile da distribuire su pi\u00f9 server separati. Ci\u00f2 risulta particolarmente difficile se vogliamo ridurre la latenza per gli utenti remoti e ospitare pi\u00f9 sedi diverse, poich\u00e9 la progettazione della soluzione \u00e8 limitata a una sola. Inoltre, la biblioteca non garantisce la consegna e l&#039;ordinamento affidabili dei messaggi, il che pu\u00f2 peggiorare l&#039;esperienza dell&#039;utente.<\/p>","protected":false},"excerpt":{"rendered":"<p>Autori: Denis Balant, Enej Hudobreznik Il protocollo HTTP (Hypertext Transfer Protocol) o il suo derivato crittografato pi\u00f9 moderno e sicuro HTTPS (HTTP Secure) \u00e8 ancora utilizzato principalmente per il trasferimento di dati su Internet. Si basano sull&#039;architettura client-server, in cui il client invia una richiesta (richiesta HTTP) al server e il server risponde con una risposta [\u2026]<\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[66],"tags":[],"class_list":["post-5310","post","type-post","status-publish","format-standard","hentry","category-programi"],"acf":{"subtitle":"Kljub nenehnemu razvoju spletnih strani so tehnologije v ozadju skozi \u010das ostale zelo podobne. Ker splet ni dom le sodobnim stranem, ampak tudi starej\u0161im, ki morajo delovati tudi v sodobnih brskalnikih, so dana\u0161nje tehnologije pogosto le izbolj\u0161ane in dopolnjene razli\u010dic tistih, ki so nastale \u017ee ob samem za\u010detku svetovnega spleta. Naprednej\u0161e sodobne funkcije, ki jih te re\u0161itve ne podpirajo, pa omogo\u010dajo novi standardi.","heading":"","summary":"Kljub nenehnemu razvoju spletnih strani so tehnologije v ozadju skozi \u010das ostale zelo podobne. ","thumbnail_small":"https:\/\/racunalniske-novice.com\/wp-content\/uploads\/2024\/08\/coding-560x315.jpg","thumbnail_large":"https:\/\/racunalniske-novice.com\/wp-content\/uploads\/2024\/08\/coding-1024x682.jpg","thumbnail_caption":"Fotografija je ilustrativna. (Foto: Pixabay)","gallery":"","video_gallery":null,"author":"","links":null,"sources":null,"skip_language":[]},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Primer implementacije sprotnega tekstovnega pogovora s knji\u017enico SignalR - Ra\u010dunalni\u0161ke novice<\/title>\n<meta name=\"description\" content=\"Kljub nenehnemu razvoju spletnih strani so tehnologije v ozadju skozi \u010das ostale zelo podobne.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/viva.racunalniske-novice.com\/it\/wp-json\/wp\/v2\/posts\/5310\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Primer implementacije sprotnega tekstovnega pogovora s knji\u017enico SignalR - Ra\u010dunalni\u0161ke novice\" \/>\n<meta property=\"og:description\" content=\"Avtorja: Denis Balant, Enej Hudobreznik Za prenos podatkov preko spletu se \u0161e danes primarno uporablja protokol HTTP (angl. Hypertext Transfer Protocol) oz. njegova sodobnej\u0161a in varnej\u0161a \u0161ifrirana izpeljanka HTTPS (angl. HTTP Secure). Osnovana sta na arhitekturi odjemalec-stre\u017enik, kjer odjemalec (angl. client) po\u0161lje stre\u017eniku (angl. Server) zahtevo (angl. HTTP request), stre\u017enik pa nanj odgovori z odzivom [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/viva.racunalniske-novice.com\/it\/esempio-di-implementazione-della-conversazione-testuale-in-tempo-reale-con-la-libreria-signalr\/\" \/>\n<meta property=\"og:site_name\" content=\"Ra\u010dunalni\u0161ke novice\" \/>\n<meta property=\"article:published_time\" content=\"2024-08-20T06:35:00+00:00\" \/>\n<meta name=\"author\" content=\"sinusiks\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"sinusiks\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/viva.racunalniske-novice.com\/primer-implementacije-sprotnega-tekstovnega-pogovora-s-knjiznico-signalr\/\",\"url\":\"https:\/\/viva.racunalniske-novice.com\/primer-implementacije-sprotnega-tekstovnega-pogovora-s-knjiznico-signalr\/\",\"name\":\"Primer implementacije sprotnega tekstovnega pogovora s knji\u017enico SignalR - Ra\u010dunalni\u0161ke novice\",\"isPartOf\":{\"@id\":\"https:\/\/viva.racunalniske-novice.com\/en\/#website\"},\"datePublished\":\"2024-08-20T06:35:00+00:00\",\"dateModified\":\"2024-08-20T06:35:00+00:00\",\"author\":{\"@id\":\"https:\/\/viva.racunalniske-novice.com\/en\/#\/schema\/person\/afb62e36efa34516d50249517e4cdbb4\"},\"breadcrumb\":{\"@id\":\"https:\/\/viva.racunalniske-novice.com\/primer-implementacije-sprotnega-tekstovnega-pogovora-s-knjiznico-signalr\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/viva.racunalniske-novice.com\/primer-implementacije-sprotnega-tekstovnega-pogovora-s-knjiznico-signalr\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/viva.racunalniske-novice.com\/primer-implementacije-sprotnega-tekstovnega-pogovora-s-knjiznico-signalr\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/viva.racunalniske-novice.com\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Primer implementacije sprotnega tekstovnega pogovora s knji\u017enico SignalR\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/viva.racunalniske-novice.com\/en\/#website\",\"url\":\"https:\/\/viva.racunalniske-novice.com\/en\/\",\"name\":\"Ra\u010dunalni\u0161ke novice\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/viva.racunalniske-novice.com\/en\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/viva.racunalniske-novice.com\/en\/#\/schema\/person\/afb62e36efa34516d50249517e4cdbb4\",\"name\":\"sinusiks\",\"sameAs\":[\"https:\/\/ml.racunalniske-novice.com\"],\"url\":\"https:\/\/viva.racunalniske-novice.com\/it\/author\/sinusiks\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Primer implementacije sprotnega tekstovnega pogovora s knji\u017enico SignalR - Ra\u010dunalni\u0161ke novice","description":"Kljub nenehnemu razvoju spletnih strani so tehnologije v ozadju skozi \u010das ostale zelo podobne.","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:\/\/viva.racunalniske-novice.com\/it\/wp-json\/wp\/v2\/posts\/5310","og_locale":"it_IT","og_type":"article","og_title":"Primer implementacije sprotnega tekstovnega pogovora s knji\u017enico SignalR - Ra\u010dunalni\u0161ke novice","og_description":"Avtorja: Denis Balant, Enej Hudobreznik Za prenos podatkov preko spletu se \u0161e danes primarno uporablja protokol HTTP (angl. Hypertext Transfer Protocol) oz. njegova sodobnej\u0161a in varnej\u0161a \u0161ifrirana izpeljanka HTTPS (angl. HTTP Secure). Osnovana sta na arhitekturi odjemalec-stre\u017enik, kjer odjemalec (angl. client) po\u0161lje stre\u017eniku (angl. Server) zahtevo (angl. HTTP request), stre\u017enik pa nanj odgovori z odzivom [&hellip;]","og_url":"https:\/\/viva.racunalniske-novice.com\/it\/esempio-di-implementazione-della-conversazione-testuale-in-tempo-reale-con-la-libreria-signalr\/","og_site_name":"Ra\u010dunalni\u0161ke novice","article_published_time":"2024-08-20T06:35:00+00:00","author":"sinusiks","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"sinusiks","Tempo di lettura stimato":"5 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/viva.racunalniske-novice.com\/primer-implementacije-sprotnega-tekstovnega-pogovora-s-knjiznico-signalr\/","url":"https:\/\/viva.racunalniske-novice.com\/primer-implementacije-sprotnega-tekstovnega-pogovora-s-knjiznico-signalr\/","name":"Primer implementacije sprotnega tekstovnega pogovora s knji\u017enico SignalR - Ra\u010dunalni\u0161ke novice","isPartOf":{"@id":"https:\/\/viva.racunalniske-novice.com\/en\/#website"},"datePublished":"2024-08-20T06:35:00+00:00","dateModified":"2024-08-20T06:35:00+00:00","author":{"@id":"https:\/\/viva.racunalniske-novice.com\/en\/#\/schema\/person\/afb62e36efa34516d50249517e4cdbb4"},"breadcrumb":{"@id":"https:\/\/viva.racunalniske-novice.com\/primer-implementacije-sprotnega-tekstovnega-pogovora-s-knjiznico-signalr\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/viva.racunalniske-novice.com\/primer-implementacije-sprotnega-tekstovnega-pogovora-s-knjiznico-signalr\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/viva.racunalniske-novice.com\/primer-implementacije-sprotnega-tekstovnega-pogovora-s-knjiznico-signalr\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/viva.racunalniske-novice.com\/en\/"},{"@type":"ListItem","position":2,"name":"Primer implementacije sprotnega tekstovnega pogovora s knji\u017enico SignalR"}]},{"@type":"WebSite","@id":"https:\/\/viva.racunalniske-novice.com\/en\/#website","url":"https:\/\/viva.racunalniske-novice.com\/en\/","name":"Ra\u010dunalni\u0161ke novice","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/viva.racunalniske-novice.com\/en\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/viva.racunalniske-novice.com\/en\/#\/schema\/person\/afb62e36efa34516d50249517e4cdbb4","name":"sinusiks","sameAs":["https:\/\/ml.racunalniske-novice.com"],"url":"https:\/\/viva.racunalniske-novice.com\/it\/author\/sinusiks\/"}]}},"_links":{"self":[{"href":"https:\/\/viva.racunalniske-novice.com\/it\/wp-json\/wp\/v2\/posts\/5310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/viva.racunalniske-novice.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/viva.racunalniske-novice.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/it\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/it\/wp-json\/wp\/v2\/comments?post=5310"}],"version-history":[{"count":0,"href":"https:\/\/viva.racunalniske-novice.com\/it\/wp-json\/wp\/v2\/posts\/5310\/revisions"}],"wp:attachment":[{"href":"https:\/\/viva.racunalniske-novice.com\/it\/wp-json\/wp\/v2\/media?parent=5310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/it\/wp-json\/wp\/v2\/categories?post=5310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/it\/wp-json\/wp\/v2\/tags?post=5310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}