{"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\/es\/mapeo-relacional-de-objetos-con-marco-de-entidad\/","title":{"rendered":"Mapeo relacional de objetos con Entity Framework"},"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\">A pesar del r\u00e1pido desarrollo de la tecnolog\u00eda, el lenguaje principal para gestionar bases de datos relacionales sigue siendo SQL o Lenguaje de consulta estructurado, que con muchos derivados personalizados (PostgreSQL, MySQL...) tiene sus ra\u00edces en los a\u00f1os 70 del siglo pasado.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Escribir consultas SQL a menudo resulta ser un trabajo que requiere bastante tiempo, especialmente con estructuras de bases de datos m\u00e1s complejas. En lugar de escribir manualmente consultas y conversiones a objetos t\u00edpicos de los lenguajes de programaci\u00f3n orientados a objetos, es mucho m\u00e1s natural y, a menudo, m\u00e1s sencillo asignar clases desde el c\u00f3digo fuente al esquema de datos y no al rev\u00e9s. Esto ahorra tiempo de desarrollo y al mismo tiempo es mucho m\u00e1s f\u00e1cil reconocer las relaciones entre entidades. Este m\u00e9todo se llama mapeo relacional de objetos (ORM).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para el entorno .NET, Microsoft ofrece el marco de c\u00f3digo abierto Entity Framework Core (EF Core para abreviar), que permite el desarrollo orientado a datos (el enfoque Code First), donde los datos interconectados simplemente se recopilan en clases que representan tablas. y el marco se basa en ellos, comprende las relaciones y crea un esquema de base de datos en su propio formato. La mayor ventaja de este enfoque es la posibilidad de instalar el esquema de datos en la base de datos deseada sin conocer SQL.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">EF Core se comunica con las bases de datos a trav\u00e9s de bibliotecas de complementos llamadas proveedores de bases de datos, por lo que cambiar a otra base de datos es f\u00e1cil. El usuario puede instalarlos a trav\u00e9s del administrador de paquetes (NuGet para C#). Las bibliotecas oficiales s\u00f3lo est\u00e1n disponibles para las soluciones SQL Server y Azure Cosmos DB de Microsoft y el proyecto SQLite, y gracias a la s\u00f3lida comunidad de c\u00f3digo abierto, el marco soporta pr\u00e1cticamente todas las principales bases de datos relacionales (MySQL, PostgreSQL...).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como ejemplo de modelado de datos, echemos un vistazo a la tabla &quot;Estudiante&quot;, que tiene los atributos nombre (cadena de hasta veinte caracteres), apellido (cadena de hasta veinte caracteres) e identificador \u00fanico (entero).&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 (fuente propia)<\/sub><\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">En PostgreSQL, definimos esta tabla de la siguiente manera:<\/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>Definici\u00f3n de tabla de estudiantes en PostgreSQL (fuente propia)<\/sub><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s de las definiciones de los tipos b\u00e1sicos de nombre y apellido, tambi\u00e9n requerimos que nunca est\u00e9n vac\u00edos (NO NULL). El tipo SERIAL representa un n\u00famero entero \u00fanico, que en nuestro caso sirve como clave principal del Id. Para cada entidad agregada, se determina autom\u00e1ticamente en funci\u00f3n del ID de la identidad agregada anteriormente, que simplemente se incrementa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin embargo, es mucho m\u00e1s f\u00e1cil definir la tabla como una clase en el c\u00f3digo fuente de la l\u00f3gica de la aplicaci\u00f3n utilizando un ORM que crea por s\u00ed mismo el objeto y los requisitos de la base de datos correspondientes. La etiqueta Clave encima del atributo de clase indica la clave principal y Requerido indica que el atributo no debe estar vac\u00edo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s del desarrollo, el marco EF Core nos permite generar autom\u00e1ticamente un esquema de datos a partir del c\u00f3digo e implementarlo en la base de datos seleccionada a trav\u00e9s de las herramientas de l\u00ednea de comandos que se incluyen en el marco. Los cambios graduales en el esquema de la base de datos se gestionan a trav\u00e9s de estas migraciones, que garantizan que la base de datos permanezca sincronizada con el modelo de datos de la aplicaci\u00f3n. Las nuevas migraciones, que se almacenan en EF Core en forma de clases especiales, se crean comparando el modelo de datos actual con el esquema de base de datos actual (estado de la \u00faltima migraci\u00f3n).<\/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>Definici\u00f3n de tabla de estudiantes usando EF Core en entorno .NET (fuente propia)<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La conexi\u00f3n de la base de datos es abstra\u00edda por una clase que hereda de la clase DbContext. Sus atributos son colecciones de entidades de tipo DbSet que se asignan a tablas.<\/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>Clase de conexi\u00f3n de base de datos y tabla de estudiantes definida (fuente propia)<\/sub><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">El marco mencionado anteriormente para escribir consultas utiliza la sintaxis LINQ, que representa una forma unificada de recuperar y procesar datos de diferentes fuentes. Luego, la consulta se traduce a SQL y el resultado en s\u00ed se vuelve a traducir a un objeto, su atributo o una tabla de objetos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El siguiente ejemplo muestra una consulta para un estudiante con un n\u00famero de inscripci\u00f3n conocido. Basta con una sola llamada al m\u00e9todo Find con el valor de la clave principal (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>Ejemplo de consulta de estudiante con EF Core (fuente propia)<\/sub><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Si queremos lograr el mismo resultado sin utilizar una herramienta ORM, se requiere mucho m\u00e1s c\u00f3digo. Se muestra un ejemplo utilizando la biblioteca NpgSql. Primero, necesitamos crear objetos que representen la consulta SQL y leer la base de datos, mientras que debemos tener cuidado de incluir el par\u00e1metro correctamente para evitar posibles vulnerabilidades, como por ejemplo. Inyecci\u00f3n SQL. Esta vez tenemos que crear el objeto de estudiante nosotros mismos, pero debemos tener cuidado con el orden de los atributos en la consulta y la posibilidad de que se produzca un error en la consulta.<\/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>Ejemplo de consulta de estudiante usando la biblioteca NpgSql (fuente propia)<\/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>Respuesta a la consulta anterior (fuente propia)<\/sub><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">El mapeo relacional de objetos nos ofrece as\u00ed una capa de abstracci\u00f3n que acelera significativamente el desarrollo de software debido a su mapeo desde un plan de desarrollo orientado a objetos, porque el c\u00f3digo SQL no necesita escribirse por separado del c\u00f3digo fuente (a menudo orientado a objetos). Un ORM bien escrito admite buenos patrones y pr\u00e1cticas de desarrollo para el dise\u00f1o de aplicaciones, al tiempo que permite a los desarrolladores que no utilizan SQL integrar m\u00e1s f\u00e1cilmente una base de datos relacional en su aplicaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin embargo, es importante enfatizar que ORM no es una soluci\u00f3n perfecta. La debilidad radica precisamente en la abstracci\u00f3n que nos ofrece. Genera significativamente m\u00e1s c\u00f3digo SQL del que escribir\u00eda un desarrollador, lo que puede afectar en gran medida la velocidad de la aplicaci\u00f3n, puede ocultar malas pr\u00e1cticas de acceso a la base de datos y es un problema de compatibilidad con versiones anteriores. Aunque el c\u00f3digo generado es correcto en la mayor\u00eda de los casos, se recomienda verificarlo y probarlo manualmente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El mapeo relacional de objetos es una funcionalidad que no es nativa del entorno .NET. La mayor\u00eda de los marcos y bibliotecas proporcionan funcionalidad para diferentes idiomas. Algunos ejemplos son Django para Python, Gorm para Go, Spring para Java, Prisma para JavaScript (o 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\/es\/wp-json\/wp\/v2\/posts\/5308\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/mapeo-relacional-de-objetos-con-marco-de-entidad\/\" \/>\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=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"sinusiks\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\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\":\"es\",\"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\":\"es\"},{\"@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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/5308","og_locale":"es_ES","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\/es\/mapeo-relacional-de-objetos-con-marco-de-entidad\/","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":{"Escrito por":"sinusiks","Tiempo de lectura":"4 minutos"},"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":"es","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":"es"},{"@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\/es\/author\/sinusiks\/"}]}},"_links":{"self":[{"href":"https:\/\/viva.racunalniske-novice.com\/es\/wp-json\/wp\/v2\/posts\/5308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/viva.racunalniske-novice.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/viva.racunalniske-novice.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/es\/wp-json\/wp\/v2\/comments?post=5308"}],"version-history":[{"count":0,"href":"https:\/\/viva.racunalniske-novice.com\/es\/wp-json\/wp\/v2\/posts\/5308\/revisions"}],"wp:attachment":[{"href":"https:\/\/viva.racunalniske-novice.com\/es\/wp-json\/wp\/v2\/media?parent=5308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/es\/wp-json\/wp\/v2\/categories?post=5308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/es\/wp-json\/wp\/v2\/tags?post=5308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}