{"id":97620,"date":"2020-10-19T20:42:40","date_gmt":"2020-10-19T18:42:40","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-my-vnedrili-sonarqube-i-osoznali-ego-bolshoj-potenczial"},"modified":"2020-10-19T20:42:40","modified_gmt":"2020-10-19T18:42:40","slug":"kak-my-vnedrili-sonarqube-i-osoznali-ego-bolshoj-potenczial","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/kak-my-vnedrili-sonarqube-i-osoznali-ego-bolshoj-potenczial","title":{"rendered":"Hvordan vi implementerede SonarQube og inds\u00e5 dets store potentiale.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Hvordan vi implementerede SonarQube og inds\u00e5 dets store potentiale.\" src=\"\/wp-content\/uploads\/2020\/10\/81a4b69ed09d156ec71603b4bf32d587.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi \u00f8nsker at dele erfaringerne fra implementeringen af SonarQube-platformen til l\u00f8bende analyse og m\u00e5ling af kodekvalitet i de eksisterende udviklingsprocesser for DPO-systemet (tilf\u00f8jelse til det depo- og clearingregnskabssystem \"Alameda\") Nationalt beregningsdepot. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Det Nationale Beregningsdepot (gruppen af virksomheder \"Moskva B\u00f8rsen\") er en af de centrale akt\u00f8rer i den finansielle infrastruktur og opbevarer og registrerer v\u00e6rdipapirer fra russiske og udenlandske udstedere for mere end 50 billioner rubler. Den stigende m\u00e6ngde operationer, som systemet udf\u00f8rer, samt den kontinuerlige udvidelse af funktionaliteten kr\u00e6ver opretholdelse af h\u00f8j kvalitet i kildeteksten for systemerne. Et af de v\u00e6rkt\u00f8jer, der bruges til at opn\u00e5 dette m\u00e5l, er den statiske analysev\u00e6rkt\u00f8j SonarQube. I denne artikel vil vi beskrive vores succesfulde erfaring med problemfri implementering af SonarQube i vores udviklingsafdelings eksisterende processer. <\/p>\n<p><\/p>\n<h3 id=\"kratko-ob-otdele\">Kort om afdelingen<\/h3>\n<p><\/p>\n<p>Vores kompetenceomr\u00e5der inkluderer f\u00f8lgende moduler: udbetalinger til kunderne i NRD, elektronisk dokumenth\u00e5ndtering (EDO), behandling af meddelelser fra handelsdepotet (registrering af over-the-counter handler), elektroniske kommunikationskanaler mellem kunderne og NRD samt meget mere. Samlet set er der et stort arbejde med den tekniske side af den operationelle aktivitet. Vi arbejder p\u00e5 baggrund af anmodninger. Anmodninger fra operat\u00f8rer behandles af analytikere: de indsamler kundens krav og pr\u00e6senterer os for deres syn p\u00e5, hvordan dette skal indg\u00e5 i programmet. Herefter f\u00f8lger den standardiserede proces: kodeudvikling \u2013 testning \u2013 pr\u00f8vebetr\u00e6ning \u2013 levering af koden til det produktive milj\u00f8 til den direkte kunde. <\/p>\n<p><\/p>\n<h3 id=\"pochemu-imenno-sonarqube\">Hvorfor netop SonarQube?<\/h3>\n<p><\/p>\n<p>Dette er den f\u00f8rste erfaring for vores afdeling med implementeringen af en platform til kvalitetskontrol af kode \u2013 tidligere har vi gjort det manuelt ved kun at udf\u00f8re code review. Men det voksende arbejdsvolumen kr\u00e6ver automatisering af denne proces. Desuden er der uerfarne medarbejdere i teamet, som ikke er helt bekendt med de interne udviklingsregler og derfor har en tendens til at lave flere fejl. Det blev besluttet at implementere en statisk analyzer til kvalitetskontrol af koden. Da SonarQube allerede blev brugt i nogle NRD-systemer, var der ikke meget at overveje. Tidligere har kolleger fra andre afdelinger analyseret koden fra mikrotjenester i systemet \"Alemada\" (et eget depot- og clearingregnskabssystem for NRD), i CFT (et informationssystem til bogf\u00f8ring, balance og udarbejdelse af obligatorisk og intern rapportering) samt i nogle andre systemer. Til eksperimenterne besluttede vi at starte med den gratis version af SonarQube. Lad os g\u00e5 videre til vores case.<\/p>\n<p><\/p>\n<h2 id=\"process-vnedreniya\">Implementeringsprocessen<\/h2>\n<p><\/p>\n<p><strong>Vi har<\/strong>:<\/p>\n<p><\/p>\n<ul>\n<li>automatisk byggesystem i TeamCity;<\/li>\n<li>konfigureret processen til at uploade koden via MergeRequest fra feature-grenen til master-grenen i GitLab (udviklingsprocessen i henhold til GitHub Flow);<\/li>\n<li>SonarQube, konfigureret til at analysere koden for DPO-systemet efter en tidsplan.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Vores m\u00e5l<\/strong>: at implementere automatisk kodeanalyse i CI\/CD processerne for DPO.<\/p>\n<p><\/p>\n<p><strong>Det er n\u00f8dvendigt at konfigurere<\/strong>: processen for automatisk kontrol af koden med den statiske analyzer ved hver MergeRequest til hovedgrenen.<\/p>\n<p><\/p>\n<p>Det vil sige, det \u00f8nskede scenario er som f\u00f8lger: s\u00e5 snart udvikleren uploader \u00e6ndringer til feature-grenen, starter den automatiske kontrol for at finde nye fejl i koden. Hvis der ikke er fejl, er \u00e6ndringerne tilladt, ellers skal der rettes fejl. Allerede i den tidlige fase kunne vi identificere et bestemt antal fejl i koden. Systemet har meget fleksible indstillinger: det kan konfigureres s\u00e5ledes, at det fungerer til specifikke opgaver for udviklerne, til hvert system og programmeringsstil. <\/p>\n<p><\/p>\n<h3 id=\"nastroyka-qualitygate-v-sonarqube\">Konfiguration af QualityGate i SonarQube<\/h3>\n<p><\/p>\n<p>QualityGate-analyse er noget, vi har l\u00e6rt om i internettets dybder. Oprindeligt brugte vi en anden tilgang, en der var mere kompleks og p\u00e5 nogle m\u00e5der ikke helt korrekt. F\u00f8rst k\u00f8rte vi scanningen gennem SonarQube to gange: scannede feature-grenen og grenen, hvortil vi ville fusionere feature-grenen, og sammenlignede derefter antallet af fejl. Denne metode var ikke stabil og gav ikke altid det rigtige resultat. S\u00e5 fandt vi ud af, at i stedet for at k\u00f8re SonarQube to gange, kunne vi s\u00e6tte en gr\u00e6nse for antallet af tilladte fejl (QualityGate) og kun analysere den gren, vi uploader og sammenligner.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvordan vi implementerede SonarQube og inds\u00e5 dets store potentiale.\" src=\"\/wp-content\/uploads\/2020\/10\/1d1def0ca40039b0c61315d3b3833a33.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Indtil nu bruger vi stadig en ret primitiv kodekontrol. Det skal bem\u00e6rkes, at SonarQube ikke er kompatibel med nogle programmeringssprog, herunder Delphi. I \u00f8jeblikket analyserer vi kun PLSql-kode til vores system.<\/p>\n<p><\/p>\n<p>S\u00e5dan fungerer det:<\/p>\n<p><\/p>\n<ul>\n<li>Vi analyserer kun PL\/SQL-koden for vores projekt.<\/li>\n<li>I SonarQube er QualityGate indstillet s\u00e5ledes, at antallet af fejl ikke stiger med et commit. <\/li>\n<li>Antallet af fejl ved f\u00f8rste k\u00f8rsel var 229. Hvis antallet af fejl under commit stiger, er fusionsmuligheden ikke tilladt. <\/li>\n<li>Dern\u00e6st, hvis fejlene rettes, kan QualityGate omkonfigureres. <\/li>\n<li>Det er ogs\u00e5 muligt at tilf\u00f8je nye punkter til analysen, for eksempel kodeafpr\u00f8vning og s\u00e5 videre.<\/li>\n<\/ul>\n<p><\/p>\n<p>Arbejdsschema:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvordan vi implementerede SonarQube og inds\u00e5 dets store potentiale.\" src=\"\/wp-content\/uploads\/2020\/10\/f904169fa87e9cfb75016c1fae4104f1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I kommentarerne til scriptets k\u00f8rsel kan man se, at antallet af fejl i feature-grenen ikke er steget. Det betyder alt er OK.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvordan vi implementerede SonarQube og inds\u00e5 dets store potentiale.\" src=\"\/wp-content\/uploads\/2020\/10\/004edf78aa787a2a8f6d376f64049a92.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fusionsknappen bliver tilg\u00e6ngelig.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvordan vi implementerede SonarQube og inds\u00e5 dets store potentiale.\" src=\"\/wp-content\/uploads\/2020\/10\/7870448b9c13242f8e81f44bfd91d503.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I kommentarerne til scriptets k\u00f8rsel kan man se, at antallet af fejl i feature-grenen er blevet st\u00f8rre end tilladt. Det betyder alt er D\u00c5RLIGT.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvordan vi implementerede SonarQube og inds\u00e5 dets store potentiale.\" src=\"\/wp-content\/uploads\/2020\/10\/b18eb07b5d46ee4cf0b71b28dfec92cc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fusionsknappen er r\u00f8d. I \u00f8jeblikket er der ingen forbud mod at uploade \u00e6ndringer med fejl i koden, men det skal ske efter ansvarlig udviklers sk\u00f8n. Fremover kan det v\u00e6re muligt at forbyde s\u00e5danne commits i hovedgrenen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvordan vi implementerede SonarQube og inds\u00e5 dets store potentiale.\" src=\"\/wp-content\/uploads\/2020\/10\/353f896326bca76c25d72396386cbb13.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"samostoyatelnaya-rabota-nad-oshibkami\">Selvst\u00e6ndigt arbejde med fejlene<\/h3>\n<p><\/p>\n<p>Det er n\u00f8dvendigt at tjekke alle fejl, systemet har identificeret, fordi SonarQube analyserer efter sine strenge standarder. Hvad den betragter som en fejl, kan i vores kode muligvis ikke v\u00e6re en reel fejl. Derfor skal det tjekkes og noteres, om det virkelig er en fejl, eller om der i vores situation ikke er behov for at rette det. P\u00e5 denne m\u00e5de reducerer vi antal fejl. Over tid vil systemet l\u00e6re at forst\u00e5 disse nuancer. <\/p>\n<p><\/p>\n<h2 id=\"k-chemu-my-prishli\">Hvor endte vi hen?<\/h2>\n<p><\/p>\n<p>Vores m\u00e5l var at forst\u00e5, om det var fornuftigt at automatisere kodekontrol i vores tilf\u00e6lde. Og resultatet levede op til forventningerne. SonarQube g\u00f8r det muligt for os at arbejde med de sprog, vi har brug for, udf\u00f8rer en ret grundig analyse og har potentiale til at l\u00e6re af udviklernes input. Generelt er vi tilfredse med vores f\u00f8rste erfaring med SonarQube og planl\u00e6gger at udvikle os yderligere i denne retning. Vi forventer, at vi i fremtiden kan spare mere tid og kr\u00e6fter p\u00e5 kodekontrol og g\u00f8re den mere kvalitetsfyldt ved at eliminere den menneskelige faktor. M\u00e5ske finder vi i processen nogle ulemper ved platformen, eller omvendt, bekr\u00e6fter vi endnu engang, at det er en fantastisk ting med stort potentiale. <\/p>\n<p><\/p>\n<p>I denne oversigtsartikel har vi delt vores f\u00f8rste m\u00f8de med den statiske analyser SonarQube. Hvis du har sp\u00f8rgsm\u00e5l, skal du endelig skrive dem i kommentarerne. Hvis du er interesseret i emnet, vil vi i en ny publikation detaljeret beskrive, hvordan man korrekt s\u00e6tter alt op og skriver kode for at udf\u00f8re en s\u00e5dan kontrol. <\/p>\n<p><\/p>\n<p>Forfatteren af teksten: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/atanya\/\" class=\"user_link\">atanya<\/a><\/noindex><\/p>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nsd\/blog\/523732\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043e\u043f\u044b\u0442\u043e\u043c \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430 SonarQube \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0414\u041f\u041e (\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0434\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u043d\u043e-\u043a\u043b\u0438\u0440\u0438\u043d\u0433\u043e\u0432\u043e\u0433\u043e \u0443\u0447\u0435\u0442\u0430 \u00ab\u0410\u043b\u0430\u043c\u0435\u0434\u0430\u00bb) \u041d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u043e\u0433\u043e \u0434\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u044f. \u041d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u044b\u0439 \u0434\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u0439 (\u0433\u0440\u0443\u043f\u043f\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u00ab\u041c\u043e\u0441\u043a\u043e\u0432\u0441\u043a\u0430\u044f \u0431\u0438\u0440\u0436\u0430\u00bb) \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0445\u0440\u0430\u043d\u0438\u0442 \u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0446\u0435\u043d\u043d\u044b\u0435 \u0431\u0443\u043c\u0430\u0433\u0438 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 \u0438 \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u044d\u043c\u0438\u0442\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u0441\u0443\u043c\u043c\u0443 \u0431\u043e\u043b\u0435\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":97621,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-97620","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=\"description\" content=\"\u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f.\" \/>\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\/kak-my-vnedrili-sonarqube-i-osoznali-ego-bolshoj-potenczial\" \/>\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\udd47\u041a\u0430\u043a \u043c\u044b \u0432\u043d\u0435\u0434\u0440\u0438\u043b\u0438 SonarQube \u0438 \u043e\u0441\u043e\u0437\u043d\u0430\u043b\u0438 \u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/kak-my-vnedrili-sonarqube-i-osoznali-ego-bolshoj-potenczial\" \/>\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-10-19T18:42:40+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-19T18:42:40+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\udd47Hvordan vi implementerede SonarQube og blev klar over dets store potentiale | ProHoster","description":"Vi \u00f8nsker at dele.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/kak-my-vnedrili-sonarqube-i-osoznali-ego-bolshoj-potenczial","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\udd47\u041a\u0430\u043a \u043c\u044b \u0432\u043d\u0435\u0434\u0440\u0438\u043b\u0438 SonarQube \u0438 \u043e\u0441\u043e\u0437\u043d\u0430\u043b\u0438 \u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b | ProHoster","og:description":"\u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/kak-my-vnedrili-sonarqube-i-osoznali-ego-bolshoj-potenczial","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-10-19T18:42:40+00:00","article:modified_time":"2020-10-19T18:42:40+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"97620","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 10:16:26","updated":"2022-09-28 13:56:02","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\/97620","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=97620"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/97620\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/97621"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=97620"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=97620"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=97620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}