{"id":79987,"date":"2020-05-02T01:42:42","date_gmt":"2020-05-01T23:42:42","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-quarkus-obedinyaet-microprofile-i-spring"},"modified":"2020-05-02T01:42:42","modified_gmt":"2020-05-01T23:42:42","slug":"kak-quarkus-obedinyaet-microprofile-i-spring","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-quarkus-obedinyaet-microprofile-i-spring","title":{"rendered":"Kuidas Quarkus \u00fchendab MicroProfile'i ja Springi","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere k\u00f5igile! Siin on meie kolmas postitus Quarkuse sarjast!<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas Quarkus \u00fchendab MicroProfile&#039;i ja Springi\" src=\"\/wp-content\/uploads\/2020\/05\/d98ff470b49f8de1fa488a6818160969.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJava mikroteenuste arendamisel arvatakse sageli, et <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2019\/02\/28\/jumpstart-microservices-microprofile-starter-beta\/\">Eclipse MicroProfile<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/spring-boot\/\">Spring Boot<\/a><\/noindex> on eraldi ja omavahel s\u00f5ltumatud API-d. Vaikimisi kasutavad programmeerijad tavaliselt neid API-sid, millega nad on juba harjunud, kuna uute raamistikude ja jooksukomponentide \u00f5ppimine n\u00f5uab palju aega. T\u00e4na p\u00fc\u00fcame lihtsustada m\u00f5nede populaarsete <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2018\/11\/21\/eclipse-microprofile-for-spring-boot-developers\/\">MicroProfile API-de omandamist Spring-arendajatele<\/a><\/noindex> ja n\u00e4itame, kuidas saame samaaegselt kasutada Spring API ja uusi kasulikke funktsioone. <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/\">Quarkus<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nKui r\u00e4\u00e4kida l\u00e4hemalt, siis vaatame esmalt, kuidas Quarkus toetab Spring API, et n\u00e4idata Spring-arendajatele, kuidas kasutada MicroProfile API-d oma igap\u00e4evases t\u00f6\u00f6s. Seej\u00e4rel r\u00e4\u00e4gime MicroProfile API-dest, mis osutuvad kasulikuks Spring-arendajatele mikroteenuste loomisel.<\/p>\n<p>Miks just Quarkus? Esiteks, see v\u00f5imaldab reaalajas kodeerimist (live coding), st k\u00f5ikide MicroProfile API, Spring API ja teiste Java API muudatuste automaatne laadimine toimub \u00fche k\u00e4su abil: mvn quarkus:dev. Teiseks, meie n\u00e4ites k\u00e4sitletud <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jclingan\/quarkus-spring-microprofile\">funktsioon<\/a><\/noindex> service Person (see on kompileeritud Springi, MicroProfile'i ja JPA API-dega GraalVMi natiivse pildiga binaarfailiks) k\u00e4ivitub vaid 0.055 sekundi jooksul ning kasutab umbes 90 MB RAM-i (RSS) RESTful rakenduse l\u00f5pp-punktis. Samuti toimub selle kompileerimine \u00fche k\u00e4suga: mvn package -Pnative.<\/p>\n<p>Me ei soovita s\u00fcveneda MicroProfile'i detailidesse, vaid p\u00fc\u00fcame aidata Spring-arendajatel m\u00f5ista, kuidas Quarkus'is saab kasutada Springi API-sid koos MicroProfile'i API-dega.<\/p>\n<h3>Konteinerid ja Kubernetes<\/h3>\n<p>\nKuna me ei soovi seda artiklit \u00fcle koormata, vaatame siin vaid k\u00f5rgema taseme aspekte toetuse kohta <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/developer-tools\/kubernetes\">Kubernetes<\/a><\/noindex>, kuna see on oluline m\u00f5ista. Quarkus positsioneerib end kui Java-stek Kubernetes'ile, ta on loodud v\u00e4hendama Java rakenduste ja teenuste m\u00e4lukasutust ja k\u00e4ivitamise aega, ning seega suurendama nende tihedust hostis ning v\u00e4hendama \u00fcldkulusid.<\/p>\n<p>Quarkus toetab samuti <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/kubernetes-resources\">automaatset genereerimist<\/a><\/noindex> Kubernetes'i ressurside jaoks ja pakub <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/\">juhenditest<\/a><\/noindex> Kubernetesel ja Red Hat OpenShift'il juurutamise kohta. Lisaks genereerib Quarkus automaatselt Dockerfile.jvm (JVM pakendamine) ja Dockerfile.native (natiivne pakendamine) failid, mis on vajalikud konteinerite loomiseks.<\/p>\n<p>Ja l\u00f5puks, suunates Kubernetes'i kui sihtkeskkonda, ei kasuta Quarkus Java raamistikke, kui sarnast funktsionaalsust on v\u00f5imalik rakendada Kubernetes'i platvormil. Tabelis 1 on esitatud Kubernetes'i ja t\u00fc\u00fcpiliste Java raamistike, mida Springi arendajad kasutavad, funktsionaalse vastavuse kaart.<\/p>\n<p><i>Tabel 1. Java raamistike ja Kubernetes'i funktsionaalse vastavuse kaart.<\/i><\/p>\n<p>Funktsionaalsus<br \/>\nTavap\u00e4rane Spring Boot<br \/>\nKubernetes<\/p>\n<p>Teenuse avastamine<br \/>\nEureka<br \/>\nDNS<\/p>\n<p>Konfiguratsioon<br \/>\nSpring Cloud Config<br \/>\nConfig Maps \/ Secrets<\/p>\n<p>Laotamine<br \/>\nRibbon (kliendi poolel)<br \/>\nService, Replication Controller (serveri poolel)<\/p>\n<p><\/p>\n<h3>Koodi kompileerimine ja k\u00e4ivitamine n\u00e4itest<\/h3>\n<p>\nSelles artiklis viitame <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jclingan\/quarkus-spring-microprofile\">n\u00e4idiste projektile<\/a><\/noindex>, kus kasutatakse koos Springi ja MicroProfile'i API-sid ning isegi seda sama Java klassi. Selle n\u00e4ite koodi saab kompileerida ja k\u00e4ivitada k\u00e4surealt, l\u00e4hemalt vt faili README.md.<\/p>\n<h3>Spring Frameworki API-d<\/h3>\n<p><\/p>\n<h4>S\u00f5ltuvuse sisestamine<\/h4>\n<p>\nQuarkus toetab mitmeid <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/cdi-reference\">Context and Dependency Injection (CDI) API-sid<\/a><\/noindex> ja Spring Dependency Injection (Spring DI) API-sid. Kui t\u00f6\u00f6tate MicroProfile'iga, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2019\/09\/12\/jakarta-ee-8-the-new-era-of-java-ee-explained\/\">Java EE ja Jakarta EE<\/a><\/noindex>, olete juba h\u00e4sti kursis CDI-iga. Teisest k\u00fcljest saavad Springi arendajad kasutada Quarkus Extension for Spring DI API-d \u00fchilduvuse tagamiseks Spring DI-ga. Toetatud Spring DI API kasutamise n\u00e4iteid on toodud tabelis 2.<\/p>\n<p>V <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jclingan\/quarkus-spring-microprofile\">projekti n\u00e4ites<\/a><\/noindex> kasutatakse nii CDI-d kui ka Springi s\u00f5ltuvuste s\u00fcstimist. Lisateavet ja n\u00e4iteid selle kohta leiate Quarkuse juhendist, mis kannab nime <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/spring-di\">Spring DI Guide<\/a><\/noindex>.<\/p>\n<p><i>Tabel 2. Toetatud Spring DI API-de kasutamise n\u00e4ited.<\/i><\/p>\n<p>Toetatud Spring DI funktsioonid<br \/>\nN\u00e4ited<\/p>\n<p>Konstruktorite s\u00fcstimine<\/p>\n<pre><code class=\"plaintext\">public PersonSpringController(\n   PersonSpringRepository personRepository,  \/\/ s\u00fcstitud      \n   PersonSpringMPService personService) {    \/\/ s\u00fcstitud\n      this.personRepository = personRepository;\n      this.personService = personService;\n}\n<\/code><\/pre>\n<p>V\u00e4ljade s\u00fcstimine<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/autowired\/\" class=\"user_link\">Autowired<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/value\/\" class=\"user_link\">V\u00e4\u00e4rtus<\/a><\/noindex><\/p>\n<pre><code class=\"plaintext\">@Autowired\n@RestClient\nSalutationRestClient salutationRestClient;\n\n@Value(\"${fallbackSalutation}\")\nString fallbackSalutation;\n<\/code><\/pre>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/bean\/\" class=\"user_link\">Bean<\/a><\/noindex><br \/>\n@Configuration<\/p>\n<pre><code class=\"plaintext\">@Configuration\npublic class AppConfiguration {\n   @Bean(name = \"capitalizeFunction\")\n   public StringFunction capitalizer() {\n      return String::toUpperCase;\n   }\n}\n<\/code><\/pre>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/component\/\" class=\"user_link\">Komponent<\/a><\/noindex><\/p>\n<pre><code class=\"plaintext\">@Component(\"noopFunction\")\npublic class NoOpSingleStringFunction implements StringFunction {\n   @Override\n   public String apply(String s) {\n      return s;\n   }\n}\n<\/code><\/pre>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/service\/\" class=\"user_link\">Teenused<\/a><\/noindex><\/p>\n<pre><code class=\"plaintext\">@Service\npublic class MessageProducer {\n   @Value(\"${greeting.message}\")\n   String message;\n\n   public String getPrefix() {\n      return message;\n   }\n}\n<\/code><\/pre>\n<p><\/p>\n<h4>Veebiraamistik<\/h4>\n<p>\nMicroProfile kasutajad hindavad, et Quarkus toetab JAX-RS, MicroProfile Rest Client, JSON-P ja JSON-B kui peamist veebirakenduste mudelit. Springi arendajad on meeldivalt \u00fcllatunud Quarkusesse lisandunud Spring Web API toe \u00fcle, eriti REST-iga seotud liideste osas. Nagu Spring DI puhul, on Spring Web API toe peamine eesm\u00e4rk see, et Springi arendajad saaksid kasutada Spring Web API liideseid koos MicroProfile API-dega. Toetatud Spring Web API-de kasutamise n\u00e4ited on toodud tabelis 3 ning lisainfot ja n\u00e4iteid selle kohta leiate Quarkuse juhendist, mille nimi on <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/spring-web\">Spring Web Guide<\/a><\/noindex>.<\/p>\n<p><i>Tabel 3. Toetatud Spring Web API-de kasutamise n\u00e4ited.<\/i><\/p>\n<p>Toetatud Spring Web funktsioonid<br \/>\nN\u00e4ited<\/p>\n<p>@RestController<br \/>\n@RequestMapping<\/p>\n<pre><code class=\"plaintext\">@RestController\n@RequestMapping(\"\/person\")\npublic class PersonSpringController {\n   ...\n   ...\n   ...\n}\n<\/code><\/pre>\n<p>@GetMapping<br \/>\n@PostMapping<br \/>\n@PutMapping<br \/>\n@DeleteMapping<br \/>\n@PatchMapping<br \/>\n@RequestParam<br \/>\n@RequestHeader<br \/>\n@MatrixVariable<br \/>\n@PathVariable<br \/>\n@CookieValue<br \/>\n@RequestBody<br \/>\n@ResponseStatus<br \/>\n@ExceptionHandler<br \/>\n@RestControllerAdvice (osaline)<\/p>\n<pre><code class=\"plaintext\">@GetMapping(path = \"\/greet\/{id}\",\n   produces = \"text\/plain\")\n   public String greetPerson(\n   @PathVariable(name = \"id\") long id) {\n   ...\n   ...\n   ...\n}\n<\/code><\/pre>\n<p><\/p>\n<h4>Spring Data JPA<\/h4>\n<p>\nMicroProfilei kasutajatele meeldib ka see, et Quarkus toetab JPA-d Hibernate ORM-i abil. Head uudised on ka Spring-arendajatele: Quarkus toetab levinud Spring Data JPA annotatsioone ja t\u00fc\u00fcpe. Tabelis 4 on toodud n\u00e4ited toetatud Spring Data JPA API-de kasutamisest.<br \/>\nV <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jclingan\/quarkus-spring-microprofile\">projekti n\u00e4ites<\/a><\/noindex> kasutatakse Spring Data JPA API-sid ja lisainformatsioon on saadaval Quarkuse juhendis, mille pealkiri on <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/spring-data-jpa-guide\">Spring Data JPA juhend<\/a><\/noindex>.<\/p>\n<p><i>Tabel 4. N\u00e4ited toetatud Spring Data JPA API-de kasutamisest.<\/i><\/p>\n<p>Toetatud funktsioonid Spring Data JPA<br \/>\nN\u00e4ited<\/p>\n<p>CrudRepository<\/p>\n<pre><code class=\"plaintext\">public interface PersonRepository\n         extends JpaRepository,\n                 PersonFragment {\n   ...\n}\n<\/code><\/pre>\n<p>Repository<br \/>\nJpaRepository<br \/>\nPagingAndSortingRepository<\/p>\n<pre><code class=\"plaintext\">public class PersonRepository extends \n\n    Repository {\n\n    Person save(Person entity);\n\n    Optional findById(Person entity);\n}\n<\/code><\/pre>\n<p>Repository Fragments<\/p>\n<pre><code class=\"plaintext\">public interface PersonRepository\n         extends JpaRepository,\n                 PersonFragment {\n   ...\n}\n<\/code><\/pre>\n<p>Deriveeritud p\u00e4ringumeetodid<\/p>\n<pre><code class=\"plaintext\">public interface PersonRepository extends CrudRepository {\n\n    List findByName(String name);\n    \n    Person findByNameBySsn(String ssn);\n    \n    Optional \n       findByNameBySsnIgnoreCase(String ssn);\n\n    Boolean existsBookByYearOfBirthBetween(\n            Integer start, Integer end);\n}\n<\/code><\/pre>\n<p>Kasutaja m\u00e4\u00e4ratud p\u00e4ringud<\/p>\n<pre><code class=\"plaintext\">public interface MovieRepository\n         extends CrudRepository {\n\n    Movie findFirstByOrderByDurationDesc();\n\n    @Query(\"select m from Movie m where m.rating = ?1\")\n    Iterator findByRating(String rating);\n\n    @Query(\"from Movie where title = ?1\")\n    Movie findByTitle(String title);\n}\n<\/code><\/pre>\n<p><\/p>\n<h3>MicroProfile API-d<\/h3>\n<p><\/p>\n<h4>Vea taluvus (Fault tolerance)<\/h4>\n<p>\nTalit\u00f5rje konstruktsioonid on \u00fcliolulised, et v\u00e4ltida kaskaadset p\u00e4randit ja luua usaldusv\u00e4\u00e4rseid mikroteenuste arhitektuure. Springi arendajad on juba aastaid kasutanud talit\u00f5rjet millestki circuit-breaker. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Netflix\/Hystrix\">Hystrix<\/a><\/noindex>. Kuid Hystrix pole juba pikka aega uuendatud, samas kui MicroProfile'i talit\u00f5rje on aktiivselt arenenud ja sellel on juba mitme aasta tootmisest saadud kogemus. Seet\u00f5ttu soovitatakse Quarkuses teenuste usaldusv\u00e4\u00e4rsuse t\u00f5stmiseks kasutada MicroProfile'i talit\u00f5rje API-sid, mille kasutamise n\u00e4iteid on toodud tabelis 5. T\u00e4iendavaid \u00fcksikasju leiate Quarkuse juhendist. <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/microprofile-fault-tolerance\">Talit\u00f5rje juhend<\/a><\/noindex>.<\/p>\n<p><i>Tabel 5. Toetatud MicroProfile'i talit\u00f5rje API-de kasutamise n\u00e4idised.<\/i><\/p>\n<p>MicroProfile'i talit\u00f5rje funktsioonid<br \/>\nKirjeldus<br \/>\nN\u00e4ited<\/p>\n<p>@Asynchronous<\/p>\n<p>Loogika t\u00e4itmine eraldi l\u00f5imes<\/p>\n<pre><code class=\"plaintext\">@Asynchronous\n@Retry\npublic Future getSalutation() {\n   ...\n   return future;\n}\n<\/code><\/pre>\n<p>@Bulkhead<\/p>\n<p>Samaaegsete p\u00e4ringute arvu piiramine<\/p>\n<pre><code class=\"plaintext\">@Bulkhead(5)\npublic void fiveConcurrent() {\n   makeRemoteCall(); \/\/...\n}\n<\/code><\/pre>\n<p>@CircuitBreaker<\/p>\n<p>Ahned t\u00f5rgete k\u00e4sitlemine ja taastumine<\/p>\n<pre><code class=\"plaintext\">@CircuitBreaker(delay=500   \/\/ milliseconds\n   failureRatio = .75,\n   requestVolumeThreshold = 20,\n   successThreshold = 5)\n@Fallback(fallbackMethod = \"fallback\")\npublic String getSalutation() {\n   makeRemoteCall(); \/\/...\n}\n<\/code><\/pre>\n<p>@Fallback<\/p>\n<p>Alternatiivse loogika kutsumine t\u00f5rke korral<\/p>\n<pre><code class=\"plaintext\">@Timeout(500) \/\/ milliseconds\n@Fallback(fallbackMethod = \"fallback\")\npublic String getSalutation() {\n   makeRemoteCall(); \/\/...\n}\n\npublic String fallback() {\n   return \"hello\";\n}\n<\/code><\/pre>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/retry\/\" class=\"user_link\">Uuesti<\/a><\/noindex><\/p>\n<p>Taaskatsumine t\u00f5rke korral<\/p>\n<pre><code class=\"plaintext\">@Retry(maxRetries=3)\npublic String getSalutation() {\n   makeRemoteCall(); \/\/...\n}\n<\/code><\/pre>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/timeout\/\" class=\"user_link\">Ooteaeg<\/a><\/noindex><\/p>\n<p>T\u00f5rke korral kontrolliaeg<\/p>\n<pre><code class=\"plaintext\">@Timeout(value = 500 )   \/\/ milliseconds\n@Fallback(fallbackMethod = \"fallback\")\npublic String getSalutation() {\n   makeRemoteCall(); \/\/...\n}\n<\/code><\/pre>\n<p><\/p>\n<h4>Teenuste kontroll (Service Health)<\/h4>\n<p>\nKubernetes platvormid j\u00e4lgivad konteinerite tervislikkust spetsiaalsete teenuste abil. Alusplatvorm peab teenuseid j\u00e4lgima, seet\u00f5ttu kasutavad Spring-arendajad tavaliselt kohandatud HealthIndicator ja Spring Boot Actuator. Quarkus'e puhul saab seda teha MicroProfile Health abil, mis vaikimisi teostab t\u00f6\u00f6v\u00f5imekuse kontrolli (liveness check), kuid saab samuti seadistada nii t\u00f6\u00f6v\u00f5imekuse kui ka valmisoleku (readiness) samaaegseks kontrollimiseks. Toetatud MicroProfile Health API-de kasutamise n\u00e4ited on esitatud tabelis 6, lisainformatsioon on toodud Quarkus'i juhendis. <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/microprofile-health\">Tervisejuhend<\/a><\/noindex>.<\/p>\n<p><i>Tabel 6. Toetatud MicroProfile Health API-de kasutamise n\u00e4ited.<\/i><\/p>\n<p>MicroProfile Health funktsioonid<br \/>\nKirjeldus<br \/>\nN\u00e4ited<\/p>\n<p>@Liveness<\/p>\n<p>Platvorm taask\u00e4ivitab rikkis konteineriseeritud rakendused<br \/>\nL\u00f5pp-punkt:<br \/>\nhost:8080\/health\/live<\/p>\n<pre><code class=\"plaintext\">@Liveness\npublic class MyHC implements HealthCheck {\n  public HealthCheckResponse call() {\n\n   ...\n   return HealthCheckResponse\n     .named(\"myHCProbe\")\n     .status(ready ? true:false)\n     .withData(\"mydata\", data)\n     .build();  \n}\n<\/code><\/pre>\n<p>@Valmidus<\/p>\n<p>Platvorm ei suuna liiklust konteineriseeritud rakendustele, kui need ei ole valmis.<br \/>\nL\u00f5pp-punkt:<br \/>\nhost:8080\/health\/ready<\/p>\n<pre><code class=\"plaintext\">@Readiness\npublic class MyHC implements HealthCheck {\n  public HealthCheckResponse call() {\n\n   ...\n   return HealthCheckResponse\n     .named(\"myHCProbe\")\n     .status(live ? true:false)\n     .withData(\"mydata\", data)\n     .build();  \n}\n<\/code><\/pre>\n<p><\/p>\n<h4>M\u00f5\u00f5dikud<\/h4>\n<p>\nRakendused provisioniseerivad m\u00f5\u00f5dikute v\u00f5i operatiivsetes eesm\u00e4rkides (SLA tulemuslikkuse j\u00e4lgimiseks) v\u00f5i mitteoperatiivsetes (\u00e4ritulemuste SLA). Spring-arendajad provisioniseerivad m\u00f5\u00f5dikuid Spring Boot Actuatori ja Micrometer'i abil. Quarkus omakorda kasutab MicroProfile Metrics'i, et provisioniseerida p\u00f5himeetriad (JVM ja operatsioonis\u00fcsteem), m\u00fc\u00fcgi-m\u00f5\u00f5dikud (Quarkus) ja rakenduse m\u00f5\u00f5dikud. MicroProfile Metrics n\u00f5uab, et rakendus toetaks v\u00e4ljundiformaate JSON ja OpenMetrics (Prometheus). N\u00e4ited MicroProfile Metrics API kasutamisest on toodud tabelis 7.<\/p>\n<p>V <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jclingan\/quarkus-spring-microprofile\">projekti n\u00e4ites<\/a><\/noindex> MicroProfile Metrics'i kasutatakse rakenduse m\u00f5\u00f5dikute provisioniseerimiseks. T\u00e4iendavat teavet leiate Quarkus juhendist. <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/microprofile-metrics\">M\u00f5\u00f5dikute juhend<\/a><\/noindex>.<\/p>\n<p><i>Tabel 7. MicroProfile Metrics API-de n\u00e4idiste kasutamine.<\/i><\/p>\n<p>MicroProfile Metrics funktsioonid<br \/>\nKirjeldus<br \/>\nN\u00e4ited<\/p>\n<p>@Counted<\/p>\n<p>T\u00e4histab count-eriteavitus, mis loendab m\u00e4rgistatud objekti kutsumise arvu.<\/p>\n<pre><code class=\"plaintext\">@Counted(name = \"fallbackCounter\", \n  displayName = \"Fallback Counter\", \n  description = \"Fallback Counter\")\npublic String salutationFallback() {\n   return fallbackSalutation;\n}\n<\/code><\/pre>\n<p>@ConcurrentGauge<\/p>\n<p>T\u00e4histab gauge-eriala, mis loendab m\u00e4rgistatud objekti paralleelseid kutsungeid.<\/p>\n<pre><code class=\"plaintext\">@ConcurrentGuage(\n  name = \"fallbackConcurrentGauge\", \n  displayName=\"Fallback Concurrent\", \n  description=\"Fallback Concurrent\")\npublic String salutationFallback() {\n   return fallbackSalutation;\n}\n<\/code><\/pre>\n<p>@Gauge<\/p>\n<p>T\u00e4histab gauge-eriala, mis m\u00f5\u00f5dab m\u00e4rgistatud objekti v\u00e4\u00e4rtust.<\/p>\n<pre><code class=\"plaintext\">@Metered(name = \"FallbackGauge\",\n   displayName=\"Fallback Gauge\",\n   description=\"Fallback frequency\")\npublic String salutationFallback() {\n   return fallbackSalutation;\n}\n<\/code><\/pre>\n<p>@Metered<\/p>\n<p>T\u00e4histab meter-eriala, mis j\u00e4lgib m\u00e4rgistatud objekti kutsumise sagedust.<\/p>\n<pre><code class=\"plaintext\">@Metered(name = \"MeteredFallback\",\n   displayName=\"Metered Fallback\",\n   description=\"Fallback frequency\")\npublic String salutationFallback() {\n   return fallbackSalutation;\n}\n<\/code><\/pre>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/metric\/\" class=\"user_link\">M\u00f5\u00f5dik<\/a><\/noindex><\/p>\n<p>Annotatsioon, mis sisaldab metaandmeid, kui esitatakse m\u00f5\u00f5dikute loomise v\u00f5i muutmise p\u00e4ring.<\/p>\n<pre><code class=\"plaintext\">@Metric\n@Metered(name = \"MeteredFallback\",\n   displayName=\"Metered Fallback\",\n   description=\"Fallback frequency\")\npublic String salutationFallback() {\n   return fallbackSalutation;\n}\n<\/code><\/pre>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/timed\/\" class=\"user_link\">Ajastatud<\/a><\/noindex><\/p>\n<p>M\u00f5\u00f5dab ajastust, mis j\u00e4lgib annotatiivse objekti kestust<\/p>\n<pre><code class=\"plaintext\">@Timed(name = \"TimedFallback\",\n   displayName=\"Timed Fallback\",\n   description=\"Fallback delay\")\npublic String salutationFallback() {\n   return fallbackSalutation;\n}\n<\/code><\/pre>\n<p>\n<b>M\u00f5\u00f5dikute l\u00f5pp-punktid (Metrics Endpoints)<\/b><\/p>\n<p>Rakenduse m\u00f5\u00f5dikud <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost\">localhost<\/a><\/noindex>:8080\/metrics\/application<br \/>\nP\u00f5him\u00f5\u00f5dikud <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost\">localhost<\/a><\/noindex>:8080\/metrics\/base<br \/>\nTehase m\u00f5\u00f5dikud <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost\">localhost<\/a><\/noindex>:8080\/metrics\/vendor<br \/>\nK\u00f5ik m\u00f5\u00f5dikud <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost\">localhost<\/a><\/noindex>:8080\/metrics<\/p>\n<h4>Rest-klient MicroProfile<\/h4>\n<p>\nMikroteenused pakuvad sageli RESTful l\u00f5pp-punkte, millega toimetamiseks on vajalikud vastavad kliendi API-d. Springi arendajad kasutavad tavaliselt RestTemplate'i, kuid Quarkus pakub selle jaoks MicroProfile Rest Client API liideseid, mille kasutamise n\u00e4idised on tabelis 8.<\/p>\n<p>V <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jclingan\/quarkus-spring-microprofile\">projekti n\u00e4ites<\/a><\/noindex> RESTful l\u00f5pp-punktide kasutamine toimub MicroProfile Rest Client abil. Lisainfot ja n\u00e4iteid selle kohta leiate Quarkuse juhendist. <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/rest-client\">Rest Klientide Juhend<\/a><\/noindex>.<\/p>\n<p><i>Tabel 8. N\u00e4ited MicroProfile Rest Client API liideste kasutamisest.<\/i><\/p>\n<p>MicroProfile Rest Client funktsioonid<br \/>\nKirjeldus<br \/>\nN\u00e4ited<\/p>\n<p>@RegisterRestClient<\/p>\n<p>Registreerib t\u00fc\u00fcbitud Java liidese REST kliendina<\/p>\n<pre><code class=\"plaintext\">@RegisterRestClient\n@Path(\"\/\")\npublic interface MyRestClient {\n    @GET\n    @Produces(MediaType.TEXT_PLAIN)\n    public String getSalutation();\n}\n<\/code><\/pre>\n<p>@RestClient<\/p>\n<p>T\u00e4histab t\u00fc\u00fcbistatud REST-klientliidese eksemplari rakendamist<\/p>\n<pre><code class=\"plaintext\">@Autowired \/\/ v\u00f5i @Inject\n@RestClient\nMyRestClient restClient;\n<\/code><\/pre>\n<p>Kutse<\/p>\n<p>Kutsed REST-l\u00f5pp-punkti<\/p>\n<pre><code class=\"plaintext\">System.out.println(\n   restClient.getSalutation());\n<\/code><\/pre>\n<p>mp-rest\/url<\/p>\n<p>M\u00e4\u00e4rab REST-l\u00f5pp-punkti<\/p>\n<pre><code class=\"plaintext\">application.properties:\norg.example.MyRestClient\/mp-rest\/url=\n   http:\/\/localhost:8081\/myendpoint\n<\/code><\/pre>\n<p><\/p>\n<h3>Kokkuv\u00f5te<\/h3>\n<p>\nSelles blogis, mis on eelk\u00f5ige kasulik Spring arendajatele, vaatame l\u00fchidalt, kuidas Quarkus'is kasutada Spring'iga seotud API-liideseid koos MicroProfile'i API-liidestega, et arendada Java mikroteenuseid ja seej\u00e4rel kompileerida neid natiivseks binaarkoodiks, mis s\u00e4\u00e4stab sadu megabait m\u00e4lu ja k\u00e4ivitub m\u00f5ne millisekundi jooksul.<\/p>\n<p>Nagu te juba aru saite, on t\u00e4iendavat teavet Spring'i ja MicroProfile'i API-liideste toetamise kohta ning hulgaliselt muud kasulikku teavet saadaval <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/\">Quarkusi k\u00e4siraamatutes<\/a><\/noindex>.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/497504\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u0438 \u0441 \u0432\u0430\u043c\u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u043e\u0441\u0442 \u0438\u0437 \u0441\u0435\u0440\u0438\u0438 \u043f\u0440\u043e Quarkus! \u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 Java-\u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0447\u0430\u0441\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e Eclipse MicroProfile \u0438 Spring Boot \u2013 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 API. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u0435 API, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u043d\u0438 \u0443\u0436\u0435 \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0438 runtime-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":79988,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-79987","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u0438 \u0441 \u0432\u0430\u043c\u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u043e\u0441\u0442 \u0438\u0437 \u0441\u0435\u0440\u0438\u0438 \u043f\u0440\u043e Quarkus! \u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 Java-\u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0447\u0430\u0441\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e Eclipse MicroProfile \u0438 Spring Boot \u2013 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 API. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u0435 API, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u043d\u0438 \u0443\u0436\u0435 \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0438 runtime-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b\" \/>\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\/et\/blog\/administrirovanie\/kak-quarkus-obedinyaet-microprofile-i-spring\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\udd47\u041a\u0430\u043a Quarkus \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 MicroProfile \u0438 Spring | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u0438 \u0441 \u0432\u0430\u043c\u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u043e\u0441\u0442 \u0438\u0437 \u0441\u0435\u0440\u0438\u0438 \u043f\u0440\u043e Quarkus! \u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 Java-\u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0447\u0430\u0441\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e Eclipse MicroProfile \u0438 Spring Boot \u2013 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 API. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u0435 API, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u043d\u0438 \u0443\u0436\u0435 \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0438 runtime-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-quarkus-obedinyaet-microprofile-i-spring\" \/>\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-05-01T23:42:42+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-01T23:42:42+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\udd47Kuidas Quarkus \u00fchendab MicroProfile'i ja Springi | ProHoster","description":"Tere k\u00f5igile! See on meie kolmas postitus Quarkuse sarjast! Java mikroteenuseid arendades arvatakse sageli, et Eclipse MicroProfile ja Spring Boot on eraldiseisvad ja omavahel s\u00f5ltumatud API-d. T\u00fc\u00fcpiliselt kasutavad programmeerijad neid API-sid, millega nad on juba harjunud, kuna uute raamistike ja k\u00e4ituskomponentide \u00f5ppimine v\u00f5tab palju aega. T\u00e4na r\u00e4\u00e4gime me","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-quarkus-obedinyaet-microprofile-i-spring","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\udd47\u041a\u0430\u043a Quarkus \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 MicroProfile \u0438 Spring | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u0438 \u0441 \u0432\u0430\u043c\u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u043e\u0441\u0442 \u0438\u0437 \u0441\u0435\u0440\u0438\u0438 \u043f\u0440\u043e Quarkus! \u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 Java-\u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0447\u0430\u0441\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e Eclipse MicroProfile \u0438 Spring Boot \u2013 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 API. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u0435 API, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u043d\u0438 \u0443\u0436\u0435 \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0438 runtime-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-quarkus-obedinyaet-microprofile-i-spring","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-05-01T23:42:42+00:00","article:modified_time":"2020-05-01T23:42:42+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"79987","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 16:27:13","updated":"2022-09-30 14:08:43"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/79987","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=79987"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/79987\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/79988"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=79987"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=79987"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=79987"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}