{"id":5308,"date":"2024-08-20T13:34:07","date_gmt":"2024-08-20T11:34:07","guid":{"rendered":"https:\/\/viva.racunalniske-novice.com\/objektno-relacijsko-mapiranje-z-entity-framework\/"},"modified":"2024-08-20T13:34:07","modified_gmt":"2024-08-20T11:34:07","slug":"objektno-relacijsko-mapiranje-z-entity-framework","status":"publish","type":"post","link":"https:\/\/viva.racunalniske-novice.com\/hr\/objektno-relacijsko-preslikavanje-s-okvirom-entiteta\/","title":{"rendered":"Objektno-relacijsko preslikavanje s Entity Frameworkom"},"content":{"rendered":"<p class=\"wp-block-paragraph\"><em>Autor: Denis Balant, Enej Hudobreznik<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Unato\u010d brzom razvoju tehnologije, glavni jezik za upravljanje relacijskim bazama podataka i dalje je SQL ili strukturirani upitni jezik, koji uz brojne prilago\u0111ene izvedenice (PostgreSQL, MySQL...) vu\u010de korijene iz 70-ih godina pro\u0161log stolje\u0107a.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pisanje SQL upita \u010desto se poka\u017ee dosta dugotrajnim poslom, posebno sa slo\u017eenijim strukturama baza podataka. Umjesto ru\u010dnog pisanja upita i pretvorbi u objekte, tipi\u010dnih za objektno orijentirane programske jezike, mnogo je prirodnije i \u010desto jednostavnije mapirati klase iz izvornog koda u shemu podataka, a ne obrnuto. Time se \u0161tedi vrijeme razvoja, a ujedno je puno lak\u0161e prepoznati odnose me\u0111u entitetima. Ova metoda se naziva objektno-relacijsko preslikavanje (ORM).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Za .NET okru\u017eenje, Microsoft u tu svrhu nudi Entity Framework Core (skra\u0107eno EF Core) okvir otvorenog koda, koji omogu\u0107uje razvoj orijentiran na podatke (pristup Code First), gdje se me\u0111usobno povezani podaci jednostavno prikupljaju u klasama koje predstavljaju tablice, a okvir se temelji na njihovoj osnovi, razumije odnose i stvara shemu baze podataka u vlastitom formatu. Najve\u0107a prednost ovakvog pristupa je mogu\u0107nost instaliranja podatkovne sheme na \u017eeljenu bazu podataka bez poznavanja SQL-a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">EF Core komunicira s bazama podataka putem biblioteka dodataka koje se nazivaju dobavlja\u010di baze podataka, tako da je prebacivanje na drugu bazu podataka jednostavno. Korisnik ih mo\u017ee instalirati putem upravitelja paketa (NuGet za C#). Slu\u017ebene biblioteke dostupne su samo za Microsoftova rje\u0161enja SQL Server i Azure Cosmos DB te projekt SQLite, a zahvaljuju\u0107i sna\u017enoj zajednici otvorenog koda okvir podr\u017eava prakti\u010dki sve glavne relacijske baze podataka (MySQL, PostgreSQL...).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kao primjer modeliranja podataka pogledajmo tablicu &quot;Student&quot; koja ima atribute ime (niz do dvadeset znakova), prezime (niz do dvadeset znakova) i jedinstveni identifikator (cijeli broj).&nbsp;<\/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-9.png\" alt=\"\" class=\"wp-image-2538966\"\/><figcaption><sub>Table Student (vlastiti izvor)<\/sub><\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">U PostgreSQL-u ovu tablicu definiramo na sljede\u0107i na\u010din:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/08\/image-10.png\" alt=\"\" class=\"wp-image-2538968\"\/><figcaption><sub>Definicija tablice u\u010denika u PostgreSQL (vlastiti izvor)<\/sub><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Uz definicije osnovnih tipova za ime i prezime, tako\u0111er zahtijevamo da nikada nisu prazni (NOT NULL). Tip SERIAL predstavlja jedinstveni cijeli broj, koji u na\u0161em slu\u010daju slu\u017ei kao primarni klju\u010d ID-a. Za svaki dodani entitet automatski se odre\u0111uje na temelju ID-a prethodno dodanog identiteta koji se jednostavno pove\u0107ava.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Me\u0111utim, puno je lak\u0161e definirati tablicu kao klasu u izvornom kodu logike aplikacije pomo\u0107u ORM-a koji sam stvara objekt i odgovaraju\u0107e zahtjeve baze podataka. Oznaka Key iznad atributa klase ozna\u010dava primarni klju\u010d, a Required ozna\u010dava da atribut ne smije biti prazan.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nakon razvoja, okvir EF Core omogu\u0107uje nam da automatski generiramo shemu podataka iz koda i implementiramo je u odabranu bazu podataka putem alata naredbenog retka koji su uklju\u010deni u okvir. Kroz ove migracije upravlja se postupnim promjenama sheme baze podataka, koje osiguravaju da baza podataka ostane sinkronizirana s podatkovnim modelom aplikacije. Nove migracije, koje su pohranjene u obliku posebnih klasa u EF Core, kreiraju se usporedbom trenutnog podatkovnog modela s trenutnom shemom baze podataka (stanje zadnje migracije).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/08\/image-11.png\" alt=\"\" class=\"wp-image-2538970\"\/><figcaption><em>Definicija tablice u\u010denika pomo\u0107u EF Core u .NET okru\u017eenju (vlastiti izvor)<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Veza s bazom podataka apstrahirana je klasom koja naslje\u0111uje od klase DbContext. Njegovi atributi su zbirke entiteta tipa DbSet koji se mapiraju u tablice.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/08\/image-12.png\" alt=\"\" class=\"wp-image-2538972\"\/><figcaption><sub>Definirana klasa veze s bazom podataka i tablica u\u010denika (vlastiti izvor)<\/sub><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Navedeni okvir za pisanje upita koristi sintaksu LINQ, koja predstavlja objedinjeni na\u010din dohva\u0107anja i obrade podataka iz razli\u010ditih izvora. Upit se zatim prevodi u SQL, a sam rezultat se prevodi natrag u objekt, njegov atribut ili tablicu objekata.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Primjer u nastavku prikazuje upit za studenta s poznatim upisnim brojem. Dovoljan je samo jedan poziv metode Find s vrijedno\u0161\u0107u primarnog klju\u010da (ID).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/08\/image-13.png\" alt=\"\" class=\"wp-image-2538974\"\/><figcaption><sub>Primjer studentskog upita s EF Core (vlastiti izvor)<\/sub><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ako \u017eelimo posti\u0107i isti rezultat bez kori\u0161tenja ORM alata, potrebno je znatno vi\u0161e koda. Prikazan je primjer kori\u0161tenja biblioteke NpgSql. Prvo moramo kreirati objekte koji predstavljaju SQL upit i \u010ditati bazu podataka, pri \u010demu moramo paziti da ispravno uklju\u010dimo parametar kako bismo izbjegli mogu\u0107e ranjivosti, kao \u0161to je npr. SQL injekcija. Ovaj put moramo sami kreirati studentski objekt, ali moramo paziti na redoslijed atributa u upitu i mogu\u0107nost gre\u0161ke u upitu.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/08\/image-14.png\" alt=\"\" class=\"wp-image-2538976\"\/><figcaption><sub>Primjer studentskog upita kori\u0161tenjem biblioteke NpgSql (vlastiti izvor)<\/sub><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/08\/image-15.png\" alt=\"\" class=\"wp-image-2538978\"\/><figcaption><sub>Odgovor na gornji upit (vlastiti izvor)<\/sub><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Objektno-relacijsko preslikavanje nam tako nudi sloj apstrakcije koji zna\u010dajno ubrzava razvoj softvera zbog preslikavanja iz objektno orijentiranog razvojnog plana, jer SQL kod ne treba pisati odvojeno od izvornog (\u010desto objektno orijentiranog) koda, dobro napisan ORM podr\u017eava dobre razvojne obrasce i prakse za dizajn aplikacija, dok omogu\u0107uje ne-SQL programerima da lak\u0161e integriraju relacijsku bazu podataka u svoju aplikaciju.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Me\u0111utim, va\u017eno je naglasiti da ORM nije savr\u0161eno rje\u0161enje. Slabost je upravo u apstrakciji koju nam nudi. Generira zna\u010dajno vi\u0161e SQL koda nego \u0161to bi programer napisao, \u0161to mo\u017ee uvelike utjecati na brzinu aplikacije, mo\u017ee sakriti lo\u0161e prakse pristupa bazi podataka i predstavlja problem kompatibilnosti s prethodnim verzijama. Iako je generirani kod u ve\u0107ini slu\u010dajeva ispravan, preporu\u010da se da ga provjerite i testirate ru\u010dno.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Objektno relacijsko preslikavanje je funkcionalnost koja nije izvorna za .NET okru\u017eenje. Funkcionalnost pru\u017ea ve\u0107ina okvira i biblioteka za razli\u010dite jezike. Primjeri su Django za Python, Gorm za Go, Spring za Javu, Prisma za JavaScript (ili Node.js)...<\/p>","protected":false},"excerpt":{"rendered":"<p>Avtorja: Denis Balant, Enej Hudobreznik Kljub hitremu razvoju tehnologije pa je glavni jezik za upravljanje z relacijskimi podatkovnimi bazami \u0161e vedno SQL oz. strukturirani poizvedbeni jezik, ki ima z mnogimi prilagojenimi izpeljankami (PostgreSQL, MySQL \u2026) korenine \u017ee v 70. letih prej\u0161njega stoletja.&nbsp; Pisanje SQL-poizvedb se pogosto izka\u017ee za dokaj zamudno delo, \u0161e posebej pri kompleksnej\u0161i [&hellip;]<\/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-5308","post","type-post","status-publish","format-standard","hentry","category-programi"],"acf":{"subtitle":"Danes je svetovni splet najpopularnej\u0161a storitev najve\u010djega ra\u010dunalni\u0161kega omre\u017eja Internet. Vsak dan se mu pridru\u017ei preko 100 000 novih spletnih strani, ki segajo od stati\u010dnih z minimalno podporo interakcije do dinami\u010dnih, ki za izvajanje svojih funkcij potrebujejo veliko koli\u010dino a\u017eurnih podatkov. ","heading":"","summary":"Danes je svetovni splet najpopularnej\u0161a storitev najve\u010djega ra\u010dunalni\u0161kega omre\u017eja Internet. Vsak dan se mu pridru\u017ei preko 100 000 novih spletnih strani, ki segajo od stati\u010dnih z minimalno podporo interakcije do dinami\u010dnih, ki za izvajanje svojih funkcij potrebujejo veliko koli\u010dino a\u017eurnih podatkov.","thumbnail_small":"https:\/\/racunalniske-novice.com\/wp-content\/uploads\/2024\/08\/computer-560x315.jpg","thumbnail_large":"https:\/\/racunalniske-novice.com\/wp-content\/uploads\/2024\/08\/computer-1024x678.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>Objektno-relacijsko mapiranje z Entity Framework - Ra\u010dunalni\u0161ke novice<\/title>\n<meta name=\"description\" content=\"Danes je svetovni splet najpopularnej\u0161a storitev najve\u010djega ra\u010dunalni\u0161kega omre\u017eja Internet. Vsak dan se mu pridru\u017ei preko 100 000 novih spletnih strani, ki segajo od stati\u010dnih z minimalno podporo int\" \/>\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\/hr\/wp-json\/wp\/v2\/posts\/5308\" \/>\n<meta property=\"og:locale\" content=\"hr_HR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Objektno-relacijsko mapiranje z Entity Framework - Ra\u010dunalni\u0161ke novice\" \/>\n<meta property=\"og:description\" content=\"Avtorja: Denis Balant, Enej Hudobreznik Kljub hitremu razvoju tehnologije pa je glavni jezik za upravljanje z relacijskimi podatkovnimi bazami \u0161e vedno SQL oz. strukturirani poizvedbeni jezik, ki ima z mnogimi prilagojenimi izpeljankami (PostgreSQL, MySQL \u2026) korenine \u017ee v 70. letih prej\u0161njega stoletja.&nbsp; Pisanje SQL-poizvedb se pogosto izka\u017ee za dokaj zamudno delo, \u0161e posebej pri kompleksnej\u0161i [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/viva.racunalniske-novice.com\/hr\/objektno-relacijsko-preslikavanje-s-okvirom-entiteta\/\" \/>\n<meta property=\"og:site_name\" content=\"Ra\u010dunalni\u0161ke novice\" \/>\n<meta property=\"article:published_time\" content=\"2024-08-20T11:34:07+00:00\" \/>\n<meta name=\"author\" content=\"sinusiks\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisao\/la\" \/>\n\t<meta name=\"twitter:data1\" content=\"sinusiks\" \/>\n\t<meta name=\"twitter:label2\" content=\"Procijenjeno vrijeme \u010ditanja\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/viva.racunalniske-novice.com\/objektno-relacijsko-mapiranje-z-entity-framework\/\",\"url\":\"https:\/\/viva.racunalniske-novice.com\/objektno-relacijsko-mapiranje-z-entity-framework\/\",\"name\":\"Objektno-relacijsko mapiranje z Entity Framework - Ra\u010dunalni\u0161ke novice\",\"isPartOf\":{\"@id\":\"https:\/\/viva.racunalniske-novice.com\/en\/#website\"},\"datePublished\":\"2024-08-20T11:34:07+00:00\",\"dateModified\":\"2024-08-20T11:34:07+00:00\",\"author\":{\"@id\":\"https:\/\/viva.racunalniske-novice.com\/en\/#\/schema\/person\/afb62e36efa34516d50249517e4cdbb4\"},\"breadcrumb\":{\"@id\":\"https:\/\/viva.racunalniske-novice.com\/objektno-relacijsko-mapiranje-z-entity-framework\/#breadcrumb\"},\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/viva.racunalniske-novice.com\/objektno-relacijsko-mapiranje-z-entity-framework\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/viva.racunalniske-novice.com\/objektno-relacijsko-mapiranje-z-entity-framework\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/viva.racunalniske-novice.com\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Objektno-relacijsko mapiranje z Entity Framework\"}]},{\"@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\":\"hr\"},{\"@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\/hr\/author\/sinusiks\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Objektno-relacijsko mapiranje z Entity Framework - Ra\u010dunalni\u0161ke novice","description":"Danes je svetovni splet najpopularnej\u0161a storitev najve\u010djega ra\u010dunalni\u0161kega omre\u017eja Internet. Vsak dan se mu pridru\u017ei preko 100 000 novih spletnih strani, ki segajo od stati\u010dnih z minimalno podporo int","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\/hr\/wp-json\/wp\/v2\/posts\/5308","og_locale":"hr_HR","og_type":"article","og_title":"Objektno-relacijsko mapiranje z Entity Framework - Ra\u010dunalni\u0161ke novice","og_description":"Avtorja: Denis Balant, Enej Hudobreznik Kljub hitremu razvoju tehnologije pa je glavni jezik za upravljanje z relacijskimi podatkovnimi bazami \u0161e vedno SQL oz. strukturirani poizvedbeni jezik, ki ima z mnogimi prilagojenimi izpeljankami (PostgreSQL, MySQL \u2026) korenine \u017ee v 70. letih prej\u0161njega stoletja.&nbsp; Pisanje SQL-poizvedb se pogosto izka\u017ee za dokaj zamudno delo, \u0161e posebej pri kompleksnej\u0161i [&hellip;]","og_url":"https:\/\/viva.racunalniske-novice.com\/hr\/objektno-relacijsko-preslikavanje-s-okvirom-entiteta\/","og_site_name":"Ra\u010dunalni\u0161ke novice","article_published_time":"2024-08-20T11:34:07+00:00","author":"sinusiks","twitter_card":"summary_large_image","twitter_misc":{"Napisao\/la":"sinusiks","Procijenjeno vrijeme \u010ditanja":"4 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/viva.racunalniske-novice.com\/objektno-relacijsko-mapiranje-z-entity-framework\/","url":"https:\/\/viva.racunalniske-novice.com\/objektno-relacijsko-mapiranje-z-entity-framework\/","name":"Objektno-relacijsko mapiranje z Entity Framework - Ra\u010dunalni\u0161ke novice","isPartOf":{"@id":"https:\/\/viva.racunalniske-novice.com\/en\/#website"},"datePublished":"2024-08-20T11:34:07+00:00","dateModified":"2024-08-20T11:34:07+00:00","author":{"@id":"https:\/\/viva.racunalniske-novice.com\/en\/#\/schema\/person\/afb62e36efa34516d50249517e4cdbb4"},"breadcrumb":{"@id":"https:\/\/viva.racunalniske-novice.com\/objektno-relacijsko-mapiranje-z-entity-framework\/#breadcrumb"},"inLanguage":"hr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/viva.racunalniske-novice.com\/objektno-relacijsko-mapiranje-z-entity-framework\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/viva.racunalniske-novice.com\/objektno-relacijsko-mapiranje-z-entity-framework\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/viva.racunalniske-novice.com\/en\/"},{"@type":"ListItem","position":2,"name":"Objektno-relacijsko mapiranje z Entity Framework"}]},{"@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":"hr"},{"@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\/hr\/author\/sinusiks\/"}]}},"_links":{"self":[{"href":"https:\/\/viva.racunalniske-novice.com\/hr\/wp-json\/wp\/v2\/posts\/5308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/viva.racunalniske-novice.com\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/viva.racunalniske-novice.com\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/hr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/hr\/wp-json\/wp\/v2\/comments?post=5308"}],"version-history":[{"count":0,"href":"https:\/\/viva.racunalniske-novice.com\/hr\/wp-json\/wp\/v2\/posts\/5308\/revisions"}],"wp:attachment":[{"href":"https:\/\/viva.racunalniske-novice.com\/hr\/wp-json\/wp\/v2\/media?parent=5308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/hr\/wp-json\/wp\/v2\/categories?post=5308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/hr\/wp-json\/wp\/v2\/tags?post=5308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}