{"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\/de\/objektrelationale-zuordnung-mit-entity-framework\/","title":{"rendered":"Objektrelationales Mapping mit Entity Framework"},"content":{"rendered":"<p><em>Autor: Denis Balant, Enej Hudobreznik<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>Trotz der rasanten technologischen Entwicklung ist SQL immer noch die Hauptsprache f\u00fcr die Verwaltung relationaler Datenbanken. strukturierte Abfragesprache, die mit vielen angepassten Derivaten (PostgreSQL, MySQL...) ihre Wurzeln in den 70er Jahren des letzten Jahrhunderts hat.&nbsp;<\/p>\n\n\n\n<p>Gerade bei komplexeren Datenbankstrukturen erweist sich das Schreiben von SQL-Abfragen oft als recht zeitaufw\u00e4ndige Arbeit. Anstatt manuell Abfragen und Konvertierungen f\u00fcr Objekte zu schreiben, wie sie f\u00fcr objektorientierte Programmiersprachen typisch sind, ist es viel nat\u00fcrlicher und oft einfacher, Klassen vom Quellcode zum Datenschema zuzuordnen und nicht umgekehrt. Dadurch wird Entwicklungszeit gespart und gleichzeitig ist es viel einfacher, die Beziehungen zwischen Entit\u00e4ten zu erkennen. Diese Methode wird als objektrelationales Mapping (ORM) bezeichnet.<\/p>\n\n\n\n<p>F\u00fcr die .NET-Umgebung bietet Microsoft zu diesem Zweck das Open-Source-Framework Entity Framework Core (kurz EF Core) an, das eine datenorientierte Entwicklung erm\u00f6glicht (Code First-Ansatz), bei dem miteinander verbundene Daten einfach in Klassen gesammelt werden, die Tabellen darstellen, und das Framework baut auf dieser Grundlage auf, versteht Zusammenh\u00e4nge und erstellt ein Datenbankschema in seinem eigenen Format. Der gr\u00f6\u00dfte Vorteil eines solchen Ansatzes ist die M\u00f6glichkeit, das Datenschema ohne SQL-Kenntnisse auf der gew\u00fcnschten Datenbank zu installieren.<\/p>\n\n\n\n<p>EF Core kommuniziert mit Datenbanken \u00fcber Plug-in-Bibliotheken, sogenannte Datenbankanbieter, sodass der Wechsel zu einer anderen Datenbank einfach ist. Diese k\u00f6nnen vom Benutzer \u00fcber den Paketmanager (NuGet f\u00fcr C#) installiert werden. Offizielle Bibliotheken sind nur f\u00fcr Microsofts SQL Server- und Azure Cosmos DB-L\u00f6sungen sowie das SQLite-Projekt verf\u00fcgbar und dank der starken Open-Source-Community unterst\u00fctzt das Framework praktisch alle wichtigen relationalen Datenbanken (MySQL, PostgreSQL...).<\/p>\n\n\n\n<p>Schauen wir uns als Beispiel f\u00fcr die Datenmodellierung die Tabelle \u201eStudent\u201c an, die \u00fcber die Attribute Vorname (String mit bis zu zwanzig Zeichen), Nachname (String mit bis zu zwanzig Zeichen) und eindeutige Kennung (Ganzzahl) verf\u00fcgt.&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>Tabelle Student (eigene Quelle)<\/sub><\/figcaption><\/figure><\/div>\n\n\n\n<p>In PostgreSQL definieren wir diese Tabelle wie folgt:<\/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>Student-Tabellendefinition in PostgreSQL (eigene Quelle)<\/sub><\/figcaption><\/figure>\n\n\n\n<p>Zus\u00e4tzlich zu den Definitionen der Grundtypen f\u00fcr Vor- und Nachname verlangen wir auch, dass diese niemals leer sind (NOT NULL). Der Typ SERIAL stellt eine eindeutige Ganzzahl dar, die in unserem Fall als Prim\u00e4rschl\u00fcssel der Id dient. F\u00fcr jede hinzugef\u00fcgte Entit\u00e4t wird sie automatisch anhand der ID der zuvor hinzugef\u00fcgten Identit\u00e4t ermittelt, die einfach inkrementiert wird.<\/p>\n\n\n\n<p>Es ist jedoch viel einfacher, die Tabelle als Klasse im Quellcode der Anwendungslogik zu definieren, indem ein ORM verwendet wird, der das Objekt und die entsprechenden Datenbankanforderungen selbst erstellt. Das Key-Tag \u00fcber dem Klassenattribut gibt den Prim\u00e4rschl\u00fcssel an und Required gibt an, dass das Attribut nicht leer sein darf.<\/p>\n\n\n\n<p>Nach der Entwicklung k\u00f6nnen wir mit dem EF Core-Framework automatisch ein Datenschema aus dem Code generieren und es \u00fcber die im Framework enthaltenen Befehlszeilentools in der ausgew\u00e4hlten Datenbank bereitstellen. Durch diese Migrationen werden schrittweise \u00c4nderungen am Datenbankschema verwaltet, die sicherstellen, dass die Datenbank mit dem Datenmodell der Anwendung synchronisiert bleibt. Durch den Vergleich des aktuellen Datenmodells mit dem aktuellen Datenbankschema (dem Stand der letzten Migration) werden neue Migrationen erstellt, die in Form spezieller Klassen in EF Core gespeichert werden.<\/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>Definition der Sch\u00fclertabelle mit EF Core in der .NET-Umgebung (eigene Quelle)<\/em><\/figcaption><\/figure>\n\n\n\n<p>Die Datenbankverbindung wird von einer Klasse abstrahiert, die von der DbContext-Klasse erbt. Seine Attribute sind Sammlungen von Entit\u00e4ten vom Typ DbSet, die Tabellen zugeordnet werden.<\/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>Datenbankverbindungsklasse und Studententabelle definiert (eigene Quelle)<\/sub><\/figcaption><\/figure>\n\n\n\n<p>Das oben genannte Framework zum Schreiben von Abfragen verwendet die LINQ-Syntax, die eine einheitliche M\u00f6glichkeit zum Abrufen und Verarbeiten von Daten aus verschiedenen Quellen darstellt. Die Abfrage wird dann in SQL \u00fcbersetzt und das Ergebnis selbst wird zur\u00fcck in ein Objekt, sein Attribut oder eine Objekttabelle \u00fcbersetzt.<\/p>\n\n\n\n<p>Das folgende Beispiel zeigt eine Abfrage f\u00fcr einen Studenten mit bekannter Immatrikulationsnummer. Es ist lediglich ein Aufruf der Find-Methode mit dem Prim\u00e4rschl\u00fcsselwert (ID) erforderlich.<\/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>Beispiel f\u00fcr eine Sch\u00fclerabfrage mit EF Core (eigene Quelle)<\/sub><\/figcaption><\/figure>\n\n\n\n<p>Wenn wir das gleiche Ergebnis ohne den Einsatz eines ORM-Tools erzielen wollen, ist deutlich mehr Code erforderlich. Es wird ein Beispiel mit der NpgSql-Bibliothek gezeigt. Zuerst m\u00fcssen wir Objekte erstellen, die die SQL-Abfrage darstellen und die Datenbank lesen, wobei wir darauf achten m\u00fcssen, die Parameter korrekt einzubinden, um m\u00f6gliche Schwachstellen zu vermeiden, wie z.B. SQL-Injection. Dieses Mal m\u00fcssen wir das Studentenobjekt selbst erstellen, m\u00fcssen jedoch auf die Reihenfolge der Attribute in der Abfrage achten und auf die M\u00f6glichkeit eines Fehlers in der Abfrage achten.<\/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>Beispiel f\u00fcr eine Studentenabfrage mit der NpgSql-Bibliothek (eigene Quelle)<\/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>Antwort auf obige Frage (eigene Quelle)<\/sub><\/figcaption><\/figure>\n\n\n\n<p>Das objektrelationale Mapping bietet uns somit eine Abstraktionsebene, die die Softwareentwicklung aufgrund der Abbildung aus einem objektorientierten Entwicklungsplan erheblich beschleunigt, da SQL-Code nicht getrennt vom Quellcode (h\u00e4ufig objektorientiert) geschrieben werden muss. Ein gut geschriebenes ORM unterst\u00fctzt gute Entwicklungsmuster und -praktiken f\u00fcr das Anwendungsdesign und erm\u00f6glicht es Nicht-SQL-Entwicklern gleichzeitig, eine relationale Datenbank einfacher in ihre Anwendung zu integrieren.<\/p>\n\n\n\n<p>Es ist jedoch wichtig zu betonen, dass ORM keine perfekte L\u00f6sung ist. Die Schw\u00e4che liegt gerade in der Abstraktion, die es uns bietet. Es generiert deutlich mehr SQL-Code, als ein Entwickler schreiben w\u00fcrde, was sich stark auf die Anwendungsgeschwindigkeit auswirken kann, fehlerhafte Datenbankzugriffspraktiken verbergen kann und ein Problem der Abw\u00e4rtskompatibilit\u00e4t darstellt. Obwohl der generierte Code in den meisten F\u00e4llen korrekt ist, empfiehlt es sich dennoch, ihn manuell zu \u00fcberpr\u00fcfen und zu testen.<\/p>\n\n\n\n<p>Die objektrelationale Zuordnung ist eine Funktionalit\u00e4t, die nicht in der .NET-Umgebung enthalten ist. Funktionalit\u00e4t wird von den meisten Frameworks und Bibliotheken f\u00fcr verschiedene Sprachen bereitgestellt. Beispiele sind Django f\u00fcr Python, Gorm f\u00fcr Go, Spring f\u00fcr Java, Prisma f\u00fcr JavaScript (oder 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\/de\/wp-json\/wp\/v2\/posts\/5308\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/objektrelationale-zuordnung-mit-entity-framework\/\" \/>\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=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"sinusiks\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"4\u00a0Minuten\" \/>\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\":\"de\",\"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\":\"de\"},{\"@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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/5308","og_locale":"de_DE","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\/de\/objektrelationale-zuordnung-mit-entity-framework\/","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":{"Verfasst von":"sinusiks","Gesch\u00e4tzte Lesezeit":"4\u00a0Minuten"},"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":"de","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":"de"},{"@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\/de\/author\/sinusiks\/"}]}},"_links":{"self":[{"href":"https:\/\/viva.racunalniske-novice.com\/de\/wp-json\/wp\/v2\/posts\/5308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/viva.racunalniske-novice.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/viva.racunalniske-novice.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/de\/wp-json\/wp\/v2\/comments?post=5308"}],"version-history":[{"count":0,"href":"https:\/\/viva.racunalniske-novice.com\/de\/wp-json\/wp\/v2\/posts\/5308\/revisions"}],"wp:attachment":[{"href":"https:\/\/viva.racunalniske-novice.com\/de\/wp-json\/wp\/v2\/media?parent=5308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/de\/wp-json\/wp\/v2\/categories?post=5308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/viva.racunalniske-novice.com\/de\/wp-json\/wp\/v2\/tags?post=5308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}