{"id":74793,"date":"2020-03-20T20:42:19","date_gmt":"2020-03-20T17:42:19","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/quarkus-sverhzvukovaya-subatomnaya-java-kratkij-obzor-frejmvorka"},"modified":"2020-03-20T20:42:19","modified_gmt":"2020-03-20T17:42:19","slug":"quarkus-sverhzvukovaya-subatomnaya-java-kratkij-obzor-frejmvorka","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/quarkus-sverhzvukovaya-subatomnaya-java-kratkij-obzor-frejmvorka","title":{"rendered":"Quarkus \u2014 overlyde subatom\u00e6r Java. Kort oversigt over rammev\u00e6rket","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Quarkus \u2014 overlyde subatom\u00e6r Java. Kort oversigt over rammev\u00e6rket\" src=\"\/wp-content\/uploads\/2020\/03\/b40e193b4a696206aad8b08a5e4795a1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"vvedenie\">Introduktion<\/h3>\n<p><\/p>\n<p>Den 7. marts annoncerede RedHat (snart IBM) <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2019\/03\/07\/quarkus-next-generation-kubernetes-native-java-framework\/\">pr\u00e6senterede<\/a><\/noindex> den nye rammev\u00e6rk \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/\">Quarkus<\/a><\/noindex>. If\u00f8lge udviklerne er dette rammev\u00e6rk bygget p\u00e5 GraalVM og OpenJDK HotSpot og er beregnet til Kubernetes. Quarkus-stack inkluderer: JPA\/Hibernate, JAX-RS\/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus og andre.<\/p>\n<p><\/p>\n<p>M\u00e5let med oprettelsen er at g\u00f8re Java til den f\u00f8rende platform for implementering i Kubernetes og udvikling af serverless-applikationer, ved at give udviklerne en ensartet tilgang til udvikling b\u00e5de i reaktiv og imperativ stil.<\/p>\n<p><\/p>\n<p>Hvis man ser p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/dzone.com\/articles\/classification-of-development-frameworks-for-enter\"><u>denne<\/u><\/a><\/noindex> klassificeringen af rammev\u00e6rkene placerer Quarkus et sted mellem \u00abAggregatorer\/Kodegeneratorer\u00bb og \u00abH\u00f8jt niveau fullstack rammer\u00bb. Det er mere end en aggregator, men n\u00e5r ikke helt op til full-stack, da det er fokuseret p\u00e5 backend-udvikling.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>En meget h\u00f8j opstartshastighed og lavt hukommelsesforbrug er lovet. Her er data fra udviklerens hjemmeside:<\/p>\n<p><\/p>\n<p>Tid fra start til f\u00f8rste svar (s):<\/p>\n<p><\/p>\n<p>Konfiguration<br \/>\nREST<br \/>\nREST+JPA<\/p>\n<p>Quarkus+GraalVM<br \/>\n0.014<br \/>\n0.055<\/p>\n<p>Quarkus+OpenJDK<br \/>\n0.75<br \/>\n2.5<\/p>\n<p>Traditionel Cloud Native Stack*<br \/>\n4.3<br \/>\n9.5<\/p>\n<p><\/p>\n<p>Hukommelsesforbrug (Mb):<\/p>\n<p><\/p>\n<p>Konfiguration<br \/>\nREST<br \/>\nREST+JPA<\/p>\n<p>Quarkus+GraalVM<br \/>\n13<br \/>\n35<\/p>\n<p>Quarkus+OpenJDK<br \/>\n74<br \/>\n130<\/p>\n<p>Traditionel Cloud Native Stack*<br \/>\n140<br \/>\n218<\/p>\n<p><\/p>\n<p>Imponerende, ikke?<\/p>\n<p><\/p>\n<p>*<em>Jeg fandt ikke informationer om denne teknologistack, man kan formode, at det er en slags Spring Boot med ekstra funktioner.<\/em>.<\/p>\n<p><\/p>\n<h3 id=\"hello-world\">Hello World!<\/h3>\n<p><\/p>\n<p>Det simpleste program skrevet i Quarkus vil se s\u00e5dan ud:<\/p>\n<p><\/p>\n<pre><code class=\"java\">@Path(\"\/hello\")\npublic class GreetingResource {\n\n   @GET\n   @Produces(MediaType.TEXT_PLAIN)\n   public String hello() {\n       return \"hello\";\n   }\n}<\/code><\/pre>\n<p><\/p>\n<p>Det er bogstaveligt talt \u00e9n klasse, og det er nok! Man kan starte applikationen med Maven i udviklingstilstand:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">mvn compile quarkus:dev\n\u2026\n$ curl http:\/\/localhost:8080\/hello\nhello<\/code><\/pre>\n<p><\/p>\n<p>Forskellen fra den s\u00e6dvanlige applikation er, at der ikke er en Application-klasse! Quarkus underst\u00f8tter hot reload, s\u00e5 man kan \u00e6ndre applikationen uden at genstarte den, hvilket g\u00f8r udviklingen hurtigere. <\/p>\n<p><\/p>\n<p>Hvad nu? Man kan tilf\u00f8je en service til controlleren ved hj\u00e6lp af annotationen <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/inject\/\" class=\"user_link\">Injection<\/a><\/noindex>. Servicens kode:<\/p>\n<p><\/p>\n<pre><code class=\"java\">@ApplicationScoped\npublic class GreetingService {\n\n   public String greeting(String name) {\n       return \"Hello \" + name + \"!\";\n   }\n}<\/code><\/pre>\n<p><\/p>\n<p>Controller:<\/p>\n<p><\/p>\n<pre><code class=\"java\">@Path(\"\/hello\")\npublic class GreetingResource {\n\n   @Inject\n   GreetingService service;\n\n   @GET\n   @Produces(MediaType.TEXT_PLAIN)\n   @Path(\"\/{name}\")\n   public String greeting(@PathParam(\"name\") String name) {\n       return service.greeting(name);\n   }\n}<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl http:\/\/localhost:8080\/hello\/developer\nHello developer!<\/code><\/pre>\n<p><\/p>\n<p>Bem\u00e6rk, at der i Quarkus anvendes standardannotationer fra velkendte rammev\u00e6rk \u2014 CDI og JAX-RS. Man skal ikke l\u00e6re noget nyt, hvis man har arbejdet med CDI og JAX-RS f\u00f8r, selvf\u00f8lgelig. <\/p>\n<p><\/p>\n<h3 id=\"rabota-s-bazoy-dannyh\">Arbejder med databasen<\/h3>\n<p><\/p>\n<p>Hibernate og standard JPA-annoteringer bruges til entiteter. Ligesom med REST-controllere er det n\u00f8dvendigt at skrive minimum kode. Det er tilstr\u00e6kkeligt at angive afh\u00e6ngigheder i build-filen og placere annoteringerne. <code>@Entity<\/code> og konfigurere datasource i application.properties. <\/p>\n<p><\/p>\n<p>Det er alt. Ingen sessionFactory, persistence.xml eller andre servicefiler. Vi skriver kun den n\u00f8dvendige kode. Hvis n\u00f8dvendigt, kan man dog oprette en persistence.xml-fil og konfigurere ORM-laget mere detaljeret. <\/p>\n<p><\/p>\n<p>Quarkus underst\u00f8tter caching af entiteter, kollektioner til en-til-mange-forhold samt foresp\u00f8rgsler. Det ser godt ud ved f\u00f8rste \u00f8jekast, men dette <em>er lokalt<\/em> cache, for en enkelt Kubernetes-node. Det vil sige, at caches fra forskellige noder ikke er synkroniseret med hinanden. Jeg h\u00e5ber, det er midlertidigt. <\/p>\n<p><\/p>\n<h3 id=\"asinhronnoe-vypolnenie-koda\">Asynkron udf\u00f8relse af kode<\/h3>\n<p><\/p>\n<p>Som n\u00e6vnt ovenfor underst\u00f8tter Quarkus ogs\u00e5 reaktiv programmeringsstil. Koden fra den forrige applikation kan skrives p\u00e5 en anden m\u00e5de.<\/p>\n<p><\/p>\n<pre><code class=\"java\">@Path(\"\/hello\")\npublic class GreetingResource {\n\n   @GET\n   @Produces(MediaType.TEXT_PLAIN)\n   @Path(\"\/{name}\")\n   public CompletionStage greeting(@PathParam(\"name\") String name) {\n       return CompletableFuture.supplyAsync(() -&gt; {\n           return \"Hello \" + name + \"!\";\n       });\n   }\n}<\/code><\/pre>\n<p><\/p>\n<p>Asynkron kode kan ogs\u00e5 flyttes til en service, resultatet vil v\u00e6re det samme. <\/p>\n<p><\/p>\n<h3 id=\"testirovanie\">Testning<\/h3>\n<p><\/p>\n<p>Tests for Quarkus-applikationer kan skrives med JUnit4 eller JUnit5. Nedenfor er et eksempel p\u00e5 en test for endpointet, det er skrevet med RestAssured, men man kan ogs\u00e5 bruge en anden ramme: <\/p>\n<p><\/p>\n<pre><code class=\"java\">@QuarkusTest\npublic class GreetingResourceTest {\n\n   @Test\n   public void testGreetingEndpoint() {\n       String uuid = UUID.randomUUID().toString();\n       given()\n         .pathParam(\"name\", uuid)\n         .when().get(\"\/hello\/{name}\")\n         .then()\n           .statusCode(200)\n           .body(is(\"Hello \" + uuid + \"!\"));\n   }\n}<\/code><\/pre>\n<p><\/p>\n<p>Annoteringen @QuarkusTest kr\u00e6ver, at applikationen startes, f\u00f8r testene k\u00f8res. Ellers er koden bekendt for alle udviklere. <\/p>\n<p><\/p>\n<h3 id=\"platformo-zavisimoe-prilozhenie\">Platformafh\u00e6ngig applikation<\/h3>\n<p><\/p>\n<p>Da Quarkus er t\u00e6t integreret med GraalVM, kan man naturligvis generere platformafh\u00e6ngig kode. For at g\u00f8re dette skal man installere GraalVM og angive milj\u00f8variablen GRAALVM_HOME. Derefter <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/quarkusio\/quarkus-quickstarts\/blob\/fae88eaab10ed4d68ac44e0b8b7416e631b8a6f9\/getting-started-knative\/pom.xml#L105\">definerer man en profil for build<\/a><\/noindex> og angiver den under bygningen af applikationen:<\/p>\n<p><\/p>\n<pre><code class=\"java\">mvn package -Pnative<\/code><\/pre>\n<p><\/p>\n<p>Interessant nok kan den genererede applikation testes. Dette er vigtigt, da udf\u00f8relsen af den \"native\" kode kan afvige fra udf\u00f8relsen p\u00e5 JVM. Annotationen @SubstrateTest k\u00f8rer platformafh\u00e6ngig kode i applikationen. Genbrug af eksisterende testkode kan g\u00f8res ved hj\u00e6lp af arv, s\u00e5 koden til testning af den platformafh\u00e6ngige applikation vil se s\u00e5dan ud:<\/p>\n<p><\/p>\n<pre><code class=\"java\">@SubstrateTest\npublic class GreetingResourceIT extends GreetingResourceTest {\n\n}<\/code><\/pre>\n<p><\/p>\n<p>Den genererede billede kan pakkes i Docker og k\u00f8res i Kubernetes eller OpenShift, som beskrevet i <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/kubernetes-guide\">vejledningen<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"instrumentariy\">V\u00e6rkt\u00f8jer<\/h3>\n<p><\/p>\n<p>Quarkus-rammen kan anvendes med Maven og Gradle. Maven underst\u00f8ttes fuldt, i mods\u00e6tning til Gradle. Desv\u00e6rre underst\u00f8tter Gradle p\u00e5 nuv\u00e6rende tidspunkt ikke generering af et tomt projekt, der er detaljeret beskrevet p\u00e5 hjemmesiden. <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/gradle-tooling.html\">h\u00e5ndbogen<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"rasshireniya\">Udvidelser<\/h3>\n<p><\/p>\n<p>Quarkus er en udvidelig ramme. P\u00e5 nuv\u00e6rende tidspunkt findes der cirka <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/extensions\/\">40 udvidelser<\/a><\/noindex>, som tilf\u00f8jer forskellig funktionalitet - fra underst\u00f8ttelse af <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/extensions\/#migration\">Spring DI-containeren<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/extensions\/#integration\">Apache Camel<\/a><\/noindex> til logf\u00f8ring og publicering af metric for de k\u00f8rende tjenester. Og der findes allerede en udvidelse til st\u00f8tte for at skrive applikationer i Kotlin, ud over Java. <\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Konklusion<\/h2>\n<p><\/p>\n<p>Efter min mening er Quarkus absolut i tr\u00e5d med tidens tendenser. Udviklingen af backend-koden bliver enklere og enklere, og denne ramme g\u00f8r det endnu lettere og hurtigere at udvikle tjenester, idet den tilf\u00f8jer \"native\" underst\u00f8ttelse af Docker og Kubernetes. En stor fordel er den indbyggede st\u00f8tte til GraalVM og generation af platformafh\u00e6ngige billeder, hvilket g\u00f8r det muligt at skabe tjenester, der virkelig starter hurtigt op og fylder lidt i hukommelsen. Dette er meget vigtigt i vores tid med massivt fokus p\u00e5 mikrotjenester og serverless-arkitektur.<\/p>\n<p><\/p>\n<p>Den officielle hjemmeside - <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/\">quarkus.io<\/a><\/noindex>. Eksempler p\u00e5 projekter til hurtig start findes allerede p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/quarkusio\/quarkus-quickstarts\">GitHub<\/a><\/noindex>.\n<\/p>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/haulmont\/blog\/443242\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0421\u0435\u0434\u044c\u043c\u043e\u0433\u043e \u043c\u0430\u0440\u0442\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f RedHat (\u0432\u0441\u043a\u043e\u0440\u0435 \u2014 IBM) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b\u0430 \u043d\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u2014 Quarkus. \u041f\u043e \u0441\u043b\u043e\u0432\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u044d\u0442\u043e\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0431\u0430\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 GraalVM \u0438 OpenJDK HotSpot \u0438 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f Kubernetes. \u0421\u0442\u0435\u043a Quarkus \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f: JPA\/Hibernate, JAX-RS\/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus \u0438 \u0434\u0440\u0443\u0433\u0438\u0435. \u0426\u0435\u043b\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c Java \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432 Kubernetes [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":74794,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-74793","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/quarkus-sverhzvukovaya-subatomnaya-java-kratkij-obzor-frejmvorka\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Quarkus \u2014 \u0441\u0432\u0435\u0440\u0445\u0437\u0432\u0443\u043a\u043e\u0432\u0430\u044f \u0441\u0443\u0431\u0430\u0442\u043e\u043c\u043d\u0430\u044f Java. \u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/quarkus-sverhzvukovaya-subatomnaya-java-kratkij-obzor-frejmvorka\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-20T17:42:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-20T17:42:19+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Quarkus - over lydens gr\u00e6nse, subatomar Java. Kort oversigt over rammev\u00e6rket | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/quarkus-sverhzvukovaya-subatomnaya-java-kratkij-obzor-frejmvorka","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Quarkus \u2014 \u0441\u0432\u0435\u0440\u0445\u0437\u0432\u0443\u043a\u043e\u0432\u0430\u044f \u0441\u0443\u0431\u0430\u0442\u043e\u043c\u043d\u0430\u044f Java. \u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 | ProHoster","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/quarkus-sverhzvukovaya-subatomnaya-java-kratkij-obzor-frejmvorka","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-20T17:42:19+00:00","article:modified_time":"2020-03-20T17:42:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"74793","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:07:28","updated":"2022-09-30 18:17:47","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/74793","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=74793"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/74793\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/74794"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=74793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=74793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=74793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}