{"id":3016,"date":"2019-07-31T17:10:44","date_gmt":"2019-07-31T15:10:44","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=3016"},"modified":"2025-05-02T10:33:12","modified_gmt":"2025-05-02T08:33:12","slug":"hochwertigen-code-schreiben-java-code-standards-durchsetzen","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/java\/hochwertigen-code-schreiben-java-code-standards-durchsetzen\/","title":{"rendered":"Wie man sauberen Code schreibt und Java-Code-Standards durchsetzt"},"content":{"rendered":"\n<p>Heute ist mein letzter Arbeitstag bei <a href=\"https:\/\/www.nextpit.de\/\" target=\"_blank\" rel=\"noreferrer noopener\">AndroidPIT<\/a>. Nachdem ich AndroidPIT aufgebaut und zehn Jahre lang weiterentwickelt habe, habe ich mich vor einigen Monaten entschieden, mich als freiberuflicher Programmierer selbstst\u00e4ndig zu machen, um neue Erfahrungen zu sammeln.<\/p>\n\n\n\n<p>Nachdem ich 2009 f\u00fcr ein paar Monate allein programmiert habe, haben wir kurz darauf begonnen zus\u00e4tzliche Programmierer einzustellen. In einem Team zu arbeiten war etwas ganz anderes, denn pl\u00f6tzlich haben Entwickler mit unterschiedlichen Programmierstilen und unterschiedlichen Erfahrungen am gleichen Code gearbeitet. In Code Reviews waren wir einen Gro\u00dfteil der Zeit damit besch\u00e4ftigt den Code Style zu vereinheitlichen und immer wieder \u00e4hnliche Typen von Fehlern zu beheben.&nbsp;<\/p>\n\n\n\n<p>Grund genug, um zu pr\u00fcfen, ob diese Arbeit irgendwie automatisiert werden kann.<\/p>\n\n\n\n<p>Was sind die Herausforderungen im einzelnen?<\/p>\n\n\n\n\n\n<h2 class=\"wp-block-heading\">Herausforderungen<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Kein einheitlicher Coding Standard&nbsp;<\/h3>\n\n\n\n<p>Vielleicht kennt ihr das Problem: In eurem Entwicklerteam gibt es keine Code-Style-Vorgabe \u2013 oder es gibt welche, aber nicht jeder Entwickler h\u00e4lt sich daran. Das hat zur Folge, dass man mehr Zeit braucht, um dem Code eines anderen Entwicklers zu verstehen und dass ein Gro\u00dfteil eines Reviews \"verschwendet\" wird, um den Code an die Stilvorgaben anzupassen.&nbsp;<\/p>\n\n\n\n<p>Zwar kann jede moderne IDE den Code automatisch formatieren, aber auch das muss erst einmal von jedem Entwickler im Team konfiguriert werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Nicht wartbarer oder fehlerhafter Code<\/h3>\n\n\n\n<p>Ein weiteres Problem ist, dass Entwickler in Teams unterschiedlich gro\u00dfe Erfahrung haben, was z. B. Software Craftsmanship und Clean Code betrifft. Und Fehler macht sowieso jeder Mensch. D. h. der Programmcode ist unter Umst\u00e4nden fehlerhaft, nicht gut lesbar und\/oder schlecht wartbar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sicherheitsl\u00fccken im Code<\/h3>\n\n\n\n<p>In den meisten Entwicklerteams sitzen keine Sicherheitsexperten. Somit verursacht Programmcode oft Sicherheitsl\u00fccken in der Anwendung, die unter Umst\u00e4nden zu schwerwiegenden Datenschutzverletzungen f\u00fchren k\u00f6nnen. Und selbst wenn Sicherheitsexperten vorhanden sind, sind auch sie nur Menschen und k\u00f6nnen Fehler \u00fcbersehen, oder stehen einfach vor einer so gro\u00dfen Codebasis, dass diese nur mit extrem hohem Aufwand detailliert gepr\u00fcft werden kann.<\/p>\n\n\n\n<p>In dieser Artikelserie werde ich folgende Fragen kl\u00e4ren:<\/p>\n\n\n\n<ul class=\"wp-block-list hc-checked-list\">\n<li>Wie die Einhaltung von Coding-Style-Vorgaben sichergestellt wird<\/li>\n\n\n\n<li>Wie Code-Qualit\u00e4t verbessert und damit die Wartbarkeit erh\u00f6ht wird<\/li>\n\n\n\n<li>Wie Softwaresicherheit erh\u00f6ht und Angriffspunkte minimiert werden<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Klassische L\u00f6sung: Code Reviews<\/h2>\n\n\n\n<p>Die klassische Herangehensweise, um diese Probleme zu l\u00f6sen, sind regelm\u00e4\u00dfige Code Reviews. Diese sind im besten Fall Teil der \"Definition of Done\", d. h. kein Task ist erledigt, solange der zugeh\u00f6rige Programmcode nicht von einem zweiten Entwickler gepr\u00fcft wurde.<\/p>\n\n\n\n<p>Code Reviews haben allerdings \u2013 so wichtig sie auch sind \u2013 die folgenden Nachteile:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sie sind langwierig, aufw\u00e4ndig und damit teuer. Und Spa\u00df machen sie auch nur selten. Somit werden sie \u2013 insbesondere unter Zeitdruck (unter dem wir ja st\u00e4ndig stehen) \u2013 entweder gar nicht gemacht oder zumindest gelegentlich ausgelassen. Besonders dann, wenn es sich entweder um sehr komplexe \u00c4nderungen handelt \u2013 oder um kleine \u00c4nderungen an bereits \u00fcberpr\u00fcften Codestellen.<\/li>\n\n\n\n<li>Sie sind fehleranf\u00e4llig, da der Reviewer auch nur ein Mensch ist \u2013 mit mehr oder weniger Erfahrung \u2013 und in den allermeisten F\u00e4llen kein Security-Experte.<\/li>\n\n\n\n<li>Sie erfordern mindestens zwei Programmierer im Team, die sich mit der Technologie auskennen. Wobei dies optimalerweise gegeben sein sollte, um den \u201cBus-Faktor\u201d (das Risiko, dass ein ausfallender Mitarbeiter das Projekt gef\u00e4hrdet) zu reduzieren.<\/li>\n<\/ul>\n\n\n\n<p>Code Reviews lassen sich gl\u00fccklicherweise ziemlich gut automatisieren. Die Technik hierf\u00fcr lautet \u201cStatische Code-Analyse\u201d (englisch: \u201cstatic program analysis\u201d oder \u201cstatic code analysis\u201d).&nbsp;<\/p>\n\n\n\n<p>F\u00fcr die statische Code-Analyse gibt es zahlreiche sehr gute Open Source Tools, die alle zuvor genannten Probleme adressieren. Ich werde sie im dritten Teil dieser Serie detailliert vorstellen.<\/p>\n\n\n\n<p>Hat man die entsprechenden Tools einmal aufgesetzt, k\u00f6nnen sie den Sourcecode rasend schnell \u00fcberpr\u00fcfen und dem Entwickler zahlreiche Empfehlungen zur Verbesserung geben \u2013 im Hinblick auf Coding Style, auf potentielle Fehler, auf Bad Practices, auf schlechte Wartbarkeit und auf potentielle Sicherheitsl\u00fccken.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Was genau ist Statische Code-Analyse?<\/h2>\n\n\n\n<p>Statische Code-Analyse bezeichnet die Analyse einer Software ohne dass diese dazu ausgef\u00fchrt wird. Dies geschieht durch automatisierte Untersuchung des kompletten Quelltexts im Hinblick auf einen Satz zuvor festgelegter Regeln und mit anschlie\u00dfender Benachrichtigung der Programmierer \u00fcber die gefundenen Regelverst\u00f6\u00dfe.<\/p>\n\n\n\n<p>Die meisten statischen Code-Analyse-Tools k\u00f6nnen als Plugins in die Entwicklungsumgebung integriert werden und dort die Regelverst\u00f6\u00dfe direkt im Quellcode markieren. Dies ist eine sehr m\u00e4chtige Funktion, da der Entwickler so bereits w\u00e4hrend der Programmierung sofortiges Feedback \u00fcber m\u00f6gliche Schwachstellen oder Bad Practices erh\u00e4lt. Werden diese sp\u00e4ter im Entwicklungszyklus gefunden, ist die Behebung deutlich aufw\u00e4ndiger und damit teurer.<\/p>\n\n\n\n<p>Ebenso k\u00f6nnen statische Code-Analyse-Tools in automatisierte Build-Prozesse integriert werden, Reports und Alerts generieren und \u2013 in Abh\u00e4ngigkeit von der Konfiguration \u2013 den Build fehlschlagen lassen.<\/p>\n\n\n\n<p>Statische Code-Analyse ist somit ein sehr effektiver, automatisierter Code-Review-Prozess.&nbsp;Das hei\u00dft nicht, dass sie manuelle Reviews ersetzen kann. Erstens kann statische Code-Analyse nicht 100 % aller Fehler erkennen (u. a. da sie die funktionalen Anforderungen an die Software gar nicht kennt) und zweitens ist es wichtig, dass das Wissen \u00fcber den Code im Team geteilt wird.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vorteile von Statischer Code-Analyse<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">H\u00f6here Geschwindigkeit<\/h3>\n\n\n\n<p>Manuelle Code Reviews sind langwierig. Die gro\u00dfe St\u00e4rke Statischer Code-Analyse liegt in der schnellen und automatischen Pr\u00fcfung der gesamten Codebasis, ohne dass der Code ausgef\u00fchrt werden muss. Somit sinkt der Aufwand f\u00fcr das Aufsp\u00fcren von Problemen im Code deutlich.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Entlastung von Entwicklern<\/h3>\n\n\n\n<p>Manuelle Code Reviews spannen Entwickler ein. Durch die Automatisierung werden Entwickler entlastet und sie k\u00f6nnen sich st\u00e4rker auf die Weiterentwicklung der Software fokussieren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ausgezeichnete Skalierung<\/h3>\n\n\n\n<p>Statische Code-Analyse kann in den Continuous Delivery Prozess integriert und somit regelm\u00e4\u00dfig vollautomatisch ausgef\u00fchrt werden. Wird ein Tool um die Erkennung neuer Probleme erweitert, k\u00f6nnen diese umgehend in der gesamten Codebasis aufgesp\u00fcrt werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Auffinden von Problemen fr\u00fch im Entwicklungsprozess<\/h3>\n\n\n\n<p>Je fr\u00fcher ein Fehler gefunden wird, desto niedriger sind die Kosten f\u00fcr dessen Beseitigung. Durch die Integration der Statischen Code-Analyse-Tools in die IDE k\u00f6nnen Probleme sehr fr\u00fch, n\u00e4mlich bereits w\u00e4hrend der Programmierung,  erkannt und behoben werden. Entwickler werden direkt im Code darauf hingewiesen \u2013 mitsamt Erkl\u00e4rungen und Verbesserungsvorschl\u00e4gen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Genauigkeit<\/h3>\n\n\n\n<p>Durch die Automatisierung wird der vollst\u00e4ndige Code \u00fcberpr\u00fcft \u2013 also auch Codestellen, die die Entwickler selten zu Gesicht bekommen. Au\u00dferdem k\u00f6nnen statische Code Analyse-Tools s\u00e4mtliche Ausf\u00fchrungspfade einer Applikation analysieren und \u00fcberpr\u00fcfen \u2013 einschlie\u00dflich derjenigen, die durch Tests nicht abgedeckt sind. Menschliche Fehler k\u00f6nnen zwar bei der Konfiguration der Tools gemacht werden, nicht aber bei deren Ausf\u00fchrung.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Bessere Qualit\u00e4t bei niedrigeren Kosten<\/h3>\n\n\n\n<p>Letztendlich f\u00fchren alle zuvor genannten Vorteile zu einer besseren Code- und Produktqualit\u00e4t bei niedrigeren Kosten f\u00fcr das gesamte Entwicklungsprojekt. Durch die kontinuierliche Auslieferung von sicherer, verl\u00e4sslicher und wartbarer Software erh\u00f6ht sich die Reputation der Entwickler und des Unternehmens, f\u00fcr die diese arbeiten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Nachteile von Statischer Code-Analyse<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Vorlaufkosten<\/h3>\n\n\n\n<p>Statische Code-Analyse-Tools m\u00fcssen evaluiert, erlernt, installiert und konfiguriert werden. Diese Kosten werden sich allerdings nach nur wenigen Wochen amortisieren. Diese Artikelserie soll helfen die Vorlaufzeit und -kosten zu minimieren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rollout-Strategie n\u00f6tig bei Anwendung auf bestehende Codebasis<\/h3>\n\n\n\n<p>Wenn man Werkzeuge zur statischen Code-Analyse auf bestehenden Code anwendet, werden unter Umst\u00e4nden Tausende von Problemen angezeigt. Das f\u00fchrt normalerweise dazu, dass Entwickler diese Meldungen einfach ignorieren. Daher ist eine Rollout-Strategie n\u00f6tig. Am besten  priorisiert  man die Problemtypen und blendet zun\u00e4chst nur die am h\u00f6chsten priorisierten ein. Und erst wenn diese komplett behoben wurden, wird die n\u00e4chstwichtige Kategorie eingeblendet und bearbeitet.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Nicht alle Fehler werden automatisch erkannt (\u201cfalse negatives\u201d)<\/h3>\n\n\n\n<p>Styleguide-Verst\u00f6\u00dfe oder bestimmte Fehlermuster k\u00f6nnen zuverl\u00e4ssig erkannt werden. Sicherheitsprobleme hingegen \u2013 bspw. im Authentifizierungsprozess, neu aufgedeckte Sicherheitsl\u00fccken in externen Libraries, neue Angriffsmuster oder fehlerhafte Konfiguration au\u00dferhalb des Quellcodes \u2013 sind schwer zu finden. Auch Fehler in der Implementierung von nebenl\u00e4ufigem Code, die zu Race Conditions f\u00fchren k\u00f6nnen, sind durch statische Code-Analyse schwer aufzudecken.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Korrekter Code kann als fehlerhaft erkannt werden (\"false positives\")<\/h3>\n\n\n\n<p>Gelegentlich kommt es vor, dass korrekter Code als fehlerhaft markiert wird. Dies passiert, wenn ein Tool \"unsicher\" ist, bspw. wenn die Integrit\u00e4t von Eingabedaten nicht \u00fcberpr\u00fcfbar ist oder die Anwendung mit Closed-Source-Komponenten interagiert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Was ist Dynamische Code-Analyse?<\/h2>\n\n\n\n<p>W\u00e4hrend der Fokus dieser Artikelserie auf statischer Code-Analyse liegt, m\u00f6chte ich sie zumindest in einem Satz von der dynamischen Code-Analyse abgrenzen: Im Gegensatz zur statischen Code-Analyse, welche Programmcode pr\u00fcft ohne ihn auszuf\u00fchren, setzt die dynamische Code-Analyse w\u00e4hrend der Laufzeit an und pr\u00fcft Code w\u00e4hrend der Ausf\u00fchrung. Hierzu geh\u00f6ren bspw. Unit-Testing und Profiling.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zusammenfassung und Ausblick<\/h2>\n\n\n\n<p>In diesem Artikel habe ich Herausforderungen bei der Softwareentwicklung beschrieben, die klassischerweise durch Code Reviews gel\u00f6st werden. Da manuelle Code Reviews aufw\u00e4ndig und teuer sind, k\u00f6nnen sie durch Werkzeuge zur Statischen Code-Analyse unterst\u00fctzt werden.<\/p>\n\n\n\n<p>Im n\u00e4chsten Artikel werde ich erkl\u00e4ren, welche <a href=\"https:\/\/www.happycoders.eu\/de\/java\/besseren-code-schreiben-statische-code-analyse\/\">Arten von Statischer Code-Analyse<\/a> es gibt und wie man mit diesen die genannten Herausforderungen adressiert. Konkret werden folgende Fragen beantwortet:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wie stelle ich einen einheitlichen Coding-Standard sicher?<\/li>\n\n\n\n<li>Wie finde ich potentielle Fehler im Code?<\/li>\n\n\n\n<li>Wie verbessere ich Codequalit\u00e4t und Wartbarkeit?<\/li>\n\n\n\n<li>Wie minimiere ich potentielle Sicherheitsschwachstellen?<\/li>\n<\/ul>\n\n\n\n<p>Im dritten und abschlie\u00dfenden Teil der Serie werde ich die relevantesten kostenlosen Java-Tools zur Statische Code-Analyse im Detail vorstellen.<\/p>\n\n\n\n<p>Falls du jemand anderen kennst, der sich f\u00fcr diesen Artikel interessieren k\u00f6nnte, dann freue ich mich wie immer sehr, wenn du ihn \u00fcber einen der folgenden Buttons teilst.<\/p>\n<aside><p>Wenn dir der Artikel weitergeholfen hat, w\u00fcrde ich mich sehr \u00fcber eine positive Bewertung auf meinem <a href=\"https:\/\/www.provenexpert.com\/de-de\/sven-woltmann-happycoders-eu\/7smk\/\" target=\"_blank\" rel=\"noopener\">ProvenExpert-Profil<\/a> freuen. Dein Feedback hilft mir, meine Inhalte weiter zu verbessern und motiviert mich, neue informative Artikel zu schreiben.<\/p>\r\n                        <p>\ud83d\udc49 <a href=\"https:\/\/www.provenexpert.com\/de-de\/sven-woltmann-happycoders-eu\/7smk\/\" target=\"_blank\" rel=\"noopener\">Bewertung abgeben<\/a><\/p>\r\n                        <p>Du m\u00f6chtest \u00fcber alle neue Java-Features auf dem Laufenden sein? Dann <a href=\"#\" data-formkit-toggle=\"d8ee997126\">klicke hier<\/a>, um dich f\u00fcr den HappyCoders-Newsletter anzumelden.<\/p>\r\n                        <p>\ud83d\udc49 <a href=\"#\" data-formkit-toggle=\"d8ee997126\">Newsletter-Anmeldung<\/a><\/p><\/aside>","protected":false},"excerpt":{"rendered":"<p>Wie kann man die Einhaltung von Coding-Style-Vorgaben sicherstellen?<\/p>\n<p>Wie kann man Code-Qualit\u00e4t verbessern und Wartbarkeit erh\u00f6hen?<\/p>\n","protected":false},"author":1,"featured_media":19195,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"none","_seopress_titles_title":"Sauberen Code schreiben + Java-Code-Standards durchsetzen","_seopress_titles_desc":"Wie kann man die Einhaltung von Coding-Style-Vorgaben sicherstellen? Wie kann man Code-Qualit\u00e4t verbessern und Wartbarkeit erh\u00f6hen?","_seopress_robots_index":"","_uag_custom_page_level_css":"","_wp_convertkit_post_meta":{"form":"-1","landing_page":"","tag":"0","restrict_content":"0"},"_metis_text_type":"standard","_metis_text_length":10903,"_post_count":0,"footnotes":""},"categories":[64],"tags":[120],"class_list":["post-3016","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-produktivitaet"],"uagb_featured_image_src":{"full":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen.jpg",1200,675,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen.jpg",300,169,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen.jpg",768,432,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen.jpg",1024,576,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen-224x126.jpg",224,126,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen-336x189.jpg",336,189,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen-504x284.jpg",504,284,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen-672x378.jpg",672,378,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen-400x225.jpg",400,225,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen-600x338.jpg",600,338,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen-800x450.jpg",800,450,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen-944x531.jpg",944,531,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen.jpg",1200,675,false],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen.jpg",871,490,false],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen.jpg",1200,675,false],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen.jpg",1200,675,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2019\/07\/sauberen-code-schreiben-java-code-standards-durchsetzen.jpg",1200,675,false]},"uagb_author_info":{"display_name":"Sven Woltmann","author_link":"https:\/\/www.happycoders.eu\/de\/author\/sven\/"},"uagb_comment_info":0,"uagb_excerpt":"Wie kann man die Einhaltung von Coding-Style-Vorgaben sicherstellen? Wie kann man Code-Qualit\u00e4t verbessern und Wartbarkeit erh\u00f6hen?","public_identification_id":"4a09e067889a4377b837b99cd885a4a8","private_identification_id":"6f2d79f170e443b4b0cb35a381e3f01b","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/3016","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/comments?post=3016"}],"version-history":[{"count":4,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/3016\/revisions"}],"predecessor-version":[{"id":43276,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/3016\/revisions\/43276"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/19195"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=3016"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=3016"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=3016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}