{"id":669,"date":"2026-05-19T00:28:13","date_gmt":"2026-05-18T23:28:13","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=669"},"modified":"2026-06-17T00:29:04","modified_gmt":"2026-06-16T23:29:04","slug":"micronaut-schnellstartende-microservices-mit-compile-time-di","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=669","title":{"rendered":"Micronaut \u2014 Schnellstartende Microservices mit Compile-Time-DI"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Micronaut ist ein modernes JVM-Framework, das von Grund auf f\u00fcr Microservice-Architekturen entwickelt wurde. Anders als Spring Boot verzichtet Micronaut vollst\u00e4ndig auf Laufzeit-Reflection und setzt stattdessen auf&nbsp;<strong>Compile-Time Dependency Injection (DI)<\/strong>&nbsp;\u2014 die Verdrahtung der Beans erfolgt bereits w\u00e4hrend der Kompilierung.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Das Compile-Time-Prinzip<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In Spring Boot scannt der Application Context beim Start den Classpath, sucht nach Annotations wie&nbsp;<code>@Service<\/code>&nbsp;oder&nbsp;<code>@Component<\/code>&nbsp;und baut den Abh\u00e4ngigkeitsbaum per Reflection auf. Das kostet Zeit und Speicher. Micronaut macht all dies schon bei&nbsp;<code>javac<\/code>: Ein Annotation-Prozessor analysiert den Code zur Compile-Zeit und erzeugt alle n\u00f6tigen DI-Implementierungen direkt als Quellcode.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Ergebnis: Ein Micronaut-Service startet typischerweise in unter einer Sekunde \u2014 ohne Warm-up.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import io.micronaut.http.annotation.Controller;\nimport io.micronaut.http.annotation.Get;\n\n@Controller(<span class=\"hljs-string\">\"\/hello\"<\/span>)\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">HelloController<\/span> <\/span>{\n\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">final<\/span> GreetingService greetingService;\n\n    <span class=\"hljs-keyword\">public<\/span> HelloController(GreetingService greetingService) {\n        this.greetingService = greetingService;\n    }\n\n    @Get\n    <span class=\"hljs-keyword\">public<\/span> String hello() {\n        <span class=\"hljs-keyword\">return<\/span> greetingService.greet();\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> jakarta.inject.Singleton;\n\n@Singleton\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">GreetingService<\/span> <\/span>{\n    public <span class=\"hljs-built_in\">String<\/span> greet() {\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Hallo von Micronaut 5.1.0!\"<\/span>;\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Die Constructor Injection ist hier bevorzugt \u2014 sie funktioniert ohne Framework-Reflection und wird direkt vom Compile-Time-Prozessor aufgel\u00f6st.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">AOT und GraalVM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Durch den Verzicht auf Reflection ist Micronaut&nbsp;<strong>von Natur aus AOT-freundlich<\/strong>&nbsp;(Ahead-of-Time). Ein Micronaut-Service l\u00e4sst sich ohne aufwendige Reflection-Konfiguration in ein GraalVM Native Image kompilieren:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">.\/mvnw package -Dpackaging=native-image\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Das native Image startet in Millisekunden und belegt einen Bruchteil des Speichers einer JVM-basierten Ausf\u00fchrung. Micronaut 5.0 setzt zudem auf die neuen&nbsp;<strong>JSpecify-Nullability-Annotations<\/strong>&nbsp;und verwendet&nbsp;<strong>Jackson 3<\/strong>&nbsp;als Standard-JSON-Bibliothek.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deklarativer HTTP-Client<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Micronaut bringt einen deklarativen HTTP-Client mit, der zur Compile-Zeit generiert wird:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import io.micronaut.http.annotation.Get;\nimport io.micronaut.http.client.annotation.Client;\n\n@Client(<span class=\"hljs-string\">\"https:\/\/jsonplaceholder.typicode.com\"<\/span>)\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title\">PostClient<\/span> <\/span>{\n\n    @Get(<span class=\"hljs-string\">\"\/posts\/{id}\"<\/span>)\n    Post getPost(Long id);\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Kein Boilerplate, keine manuelle HTTP-Request-Erstellung \u2014 das Interface wird zur Compile-Zeit automatisch implementiert. Parameter wie Timeouts und Retries lassen sich direkt in der&nbsp;<code>@Client<\/code>-Annotation konfigurieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Micronaut 5.0 \u2014 die neueste Generation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mit Version 5.0 (ver\u00f6ffentlicht am 13. Mai 2026) vollzieht Micronaut einen gro\u00dfen Schritt. Die neue Major-Version setzt einen&nbsp;<strong>JDK 25-Baseline<\/strong>&nbsp;voraus. Wichtigste \u00c4nderungen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>RxJava 2 wurde entfernt<\/strong>\u00a0\u2014 der reaktive Stack setzt nun prim\u00e4r auf Project Reactor und Kotlin Coroutines; RxJava 3 wird als optionale Konfiguration weiterhin unterst\u00fctzt<\/li>\n\n\n\n<li><strong>Groovy 5<\/strong>\u00a0und\u00a0<strong>Kotlin 2.3<\/strong>\u00a0werden voll unterst\u00fctzt<\/li>\n\n\n\n<li><strong>JSpecify<\/strong>-Annotationen (<code>@NullMarked<\/code>-Adoption im gesamten Framework) f\u00fcr explizite Nullability-Metadaten<\/li>\n\n\n\n<li><strong>HTTP\/3-Support<\/strong>\u00a0(stabil auf dem Netty-Stack)<\/li>\n\n\n\n<li><strong>Jackson 3<\/strong>\u00a0als Standard-JSON-Bibliothek<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">&lt;em&gt;<span class=\"hljs-comment\">\/\/ build.gradle \u2014 Micronaut 5 mit Jackson 3&lt;\/em&gt;<\/span>\nplugins {\n    id(<span class=\"hljs-string\">\"io.micronaut.application\"<\/span>) version <span class=\"hljs-string\">\"4.4.4\"<\/span>\n}\n\nmicronaut {\n    version = <span class=\"hljs-string\">\"5.1.0\"<\/span>\n}\n\ndependencies {\n    annotationProcessor(<span class=\"hljs-string\">\"io.micronaut:micronaut-http-validation\"<\/span>)\n    implementation(<span class=\"hljs-string\">\"io.micronaut:micronaut-http-client\"<\/span>)\n    implementation(<span class=\"hljs-string\">\"io.micronaut:micronaut-jackson-databind\"<\/span>)\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Datenbankzugriff mit Micronaut Data<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Micronaut Data ist die Antwort auf Spring Data JPA \u2014 mit einem entscheidenden Unterschied: Alle Repository-Implementierungen werden zur Compile-Zeit generiert, nicht zur Laufzeit per Proxy:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">io<\/span><span class=\"hljs-selector-class\">.micronaut<\/span><span class=\"hljs-selector-class\">.data<\/span><span class=\"hljs-selector-class\">.annotation<\/span><span class=\"hljs-selector-class\">.Repository<\/span>;\n<span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">io<\/span><span class=\"hljs-selector-class\">.micronaut<\/span><span class=\"hljs-selector-class\">.data<\/span><span class=\"hljs-selector-class\">.repository<\/span><span class=\"hljs-selector-class\">.CrudRepository<\/span>;\n<span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">java<\/span><span class=\"hljs-selector-class\">.util<\/span><span class=\"hljs-selector-class\">.List<\/span>;\n\n<span class=\"hljs-keyword\">@Repository<\/span>\npublic interface BookRepository extends CrudRepository&lt;Book, Long&gt; {\n\n    <span class=\"hljs-selector-tag\">List<\/span>&lt;<span class=\"hljs-selector-tag\">Book<\/span>&gt; <span class=\"hljs-selector-tag\">findByTitleContaining<\/span>(<span class=\"hljs-selector-tag\">String<\/span> <span class=\"hljs-selector-tag\">titlePart<\/span>);\n\n    <span class=\"hljs-selector-tag\">List<\/span>&lt;<span class=\"hljs-selector-tag\">Book<\/span>&gt; <span class=\"hljs-selector-tag\">findByPriceLessThan<\/span>(<span class=\"hljs-selector-tag\">double<\/span> <span class=\"hljs-selector-tag\">maxPrice<\/span>);\n\n    <span class=\"hljs-selector-tag\">int<\/span> <span class=\"hljs-selector-tag\">countByAuthorId<\/span>(<span class=\"hljs-selector-tag\">Long<\/span> <span class=\"hljs-selector-tag\">authorId<\/span>);\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Die Methodensignaturen folgen den bekannten Spring-Data-Konventionen \u2014&nbsp;<code>findBy...<\/code>,&nbsp;<code>countBy...<\/code>,&nbsp;<code>deleteBy...<\/code>&nbsp;\u2014 und werden vom Compile-Time-Prozessor in fertige SQL-Queries \u00fcbersetzt. Keine Laufzeit-Proxies, kein Reflection-Overhead.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Micronaut Security<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Micronaut bringt ein eigenes, kompilierzeit-optimiertes Security-Modul mit. Die Integration mit JWT und OAuth2 ist direkt eingebaut:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span># application.yml<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span>\nmicronaut:\n  security:\n    authentication: bearer\n    token:\n      jwt:\n        signatures:\n          secret:\n            generator:\n              secret: \"${JWT_SECRET:geheim123geheim123geheim123}\"\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">io<\/span><span class=\"hljs-selector-class\">.micronaut<\/span><span class=\"hljs-selector-class\">.http<\/span><span class=\"hljs-selector-class\">.annotation<\/span><span class=\"hljs-selector-class\">.Controller<\/span>;\n<span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">io<\/span><span class=\"hljs-selector-class\">.micronaut<\/span><span class=\"hljs-selector-class\">.http<\/span><span class=\"hljs-selector-class\">.annotation<\/span><span class=\"hljs-selector-class\">.Get<\/span>;\n<span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">io<\/span><span class=\"hljs-selector-class\">.micronaut<\/span><span class=\"hljs-selector-class\">.security<\/span><span class=\"hljs-selector-class\">.annotation<\/span><span class=\"hljs-selector-class\">.Secured<\/span>;\n<span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">io<\/span><span class=\"hljs-selector-class\">.micronaut<\/span><span class=\"hljs-selector-class\">.security<\/span><span class=\"hljs-selector-class\">.rules<\/span><span class=\"hljs-selector-class\">.SecurityRule<\/span>;\n\n<span class=\"hljs-keyword\">@Controller<\/span>(\"\/api\")\n@Secured(SecurityRule.IS_AUTHENTICATED)\npublic class SecureController {\n\n    <span class=\"hljs-keyword\">@Get<\/span>(\"\/admin\")\n    @Secured(<span class=\"hljs-string\">\"ROLE_ADMIN\"<\/span>)\n    public String adminOnly() {\n        <span class=\"hljs-selector-tag\">return<\/span> \"<span class=\"hljs-selector-tag\">Nur<\/span> <span class=\"hljs-selector-tag\">f<\/span>\u00fc<span class=\"hljs-selector-tag\">r<\/span> <span class=\"hljs-selector-tag\">Administratoren<\/span>\";\n    }\n\n    <span class=\"hljs-keyword\">@Get<\/span>(\"\/public\")\n    @Secured(SecurityRule.IS_ANONYMOUS)\n    public String publicInfo() {\n        <span class=\"hljs-selector-tag\">return<\/span> \"\u00d6<span class=\"hljs-selector-tag\">ffentlich<\/span> <span class=\"hljs-selector-tag\">zug<\/span>\u00e4<span class=\"hljs-selector-tag\">nglich<\/span>\";\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Testen mit Micronaut<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Micronaut Test unterst\u00fctzt das schnelle Hochfahren des Application Context speziell f\u00fcr Tests:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> io.micronaut.test.extensions.junit5.annotation.MicronautTest;\n<span class=\"hljs-keyword\">import<\/span> org.junit.jupiter.api.Test;\n<span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-keyword\">static<\/span> org.junit.jupiter.api.Assertions.*;\n\n@MicronautTest\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">GreetingServiceTest<\/span> <\/span>{\n\n    @Inject\n    GreetingService greetingService;\n\n    @Test\n    <span class=\"hljs-keyword\">void<\/span> testGreeting() {\n        <span class=\"hljs-built_in\">String<\/span> result = greetingService.greet();\n        assertTrue(result.contains(<span class=\"hljs-string\">\"Micronaut\"<\/span>));\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr HTTP-Tests gibt es einen deklarativen Test-Client \u2014 ebenfalls zur Compile-Zeit generiert, ohne dass ein echter HTTP-Port ge\u00f6ffnet wird.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wann Micronaut und wann Spring Boot?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Micronaut gl\u00e4nzt in folgenden Szenarien:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Serverless-Funktionen, bei denen Kaltstartzeiten kritisch sind<\/li>\n\n\n\n<li>Microservices mit geringem Ressourcenbudget<\/li>\n\n\n\n<li>Projekte, die von Anfang an auf GraalVM abzielen<\/li>\n\n\n\n<li>Teams, die ohne Reflection auskommen wollen<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Spring Boot punktet dagegen mit einem gigantischen \u00d6kosystem aus Starter-Abh\u00e4ngigkeiten, Autokonfigurationen und Community-Know-how. Auch Micronaut holt hier stetig auf \u2014 Micronaut Data, Micronaut Security und Micronaut Kafka sind inzwischen produktionsreif und bieten eine vollwertige Alternative.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Micronaut ist ein modernes JVM-Framework, das von Grund auf f\u00fcr Microservice-Architekturen entwickelt wurde. Anders als Spring Boot verzichtet Micronaut vollst\u00e4ndig auf Laufzeit-Reflection und setzt stattdessen auf&nbsp;Compile-Time Dependency Injection (DI)&nbsp;\u2014 die Verdrahtung der Beans erfolgt bereits w\u00e4hrend der Kompilierung. Das Compile-Time-Prinzip In Spring Boot scannt der Application Context beim Start den Classpath, sucht nach Annotations wie&nbsp;@Service&nbsp;oder&nbsp;@Component&nbsp;und [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-669","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/669","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=669"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/669\/revisions"}],"predecessor-version":[{"id":670,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/669\/revisions\/670"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=669"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=669"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=669"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}