{"id":695,"date":"2023-12-06T13:24:21","date_gmt":"2023-12-06T12:24:21","guid":{"rendered":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/?p=695"},"modified":"2024-01-16T11:34:47","modified_gmt":"2024-01-16T10:34:47","slug":"solid-zasada-pojedynczej-odpowiedzialnosci","status":"publish","type":"post","link":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/?p=695","title":{"rendered":"SOLID &#8211; Zasada pojedynczej odpowiedzialno\u015bci"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"695\" class=\"elementor elementor-695\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a99e361 elementor-section-full_width elementor-section-stretched elementor-section-height-default elementor-section-height-default\" data-id=\"a99e361\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5b998da\" data-id=\"5b998da\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a236716 elementor-widget__width-initial elementor-widget elementor-widget-qi_addons_for_elementor_section_title\" data-id=\"a236716\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"qi_addons_for_elementor_section_title.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"qodef-shortcode qodef-m  qodef-qi-section-title  qodef-decoration--italic  qodef-link--underline-draw qodef-subtitle-icon--left\">\n\t\t\t\t\t\t<h2 class=\"qodef-m-title\">\n\t\tSOLID - Zasada pojedynczej odpowiedzialno\u015bci\t<\/h2>\n\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b3a0a48 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b3a0a48\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-38d244f\" data-id=\"38d244f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-300b62f elementor-widget elementor-widget-heading\" data-id=\"300b62f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">SOLID<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b8a80c elementor-widget elementor-widget-text-editor\" data-id=\"7b8a80c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Jest to akronim skracaj\u0105cy w jednym s\u0142owie pi\u0119\u0107 podstawowych zasad programowania obiektowego. Przestrzeganie ich pomaga w pisaniu czytelnego i \u0142atwego w utrzymaniu kodu. Te zasady to:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-743edf0 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"743edf0\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0deda8d\" data-id=\"0deda8d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9753f70 elementor-widget elementor-widget-text-editor\" data-id=\"9753f70\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>S &#8211; Zasada pojedynczej odpowiedzialno\u015bci (Single Responsibility Principle &#8211; SRP)<\/strong><\/p><p><a href=\"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/?p=704\"><strong>O<\/strong> &#8211; Zasada otwarte-zamkni\u0119te (Open-Close Principle &#8211; OCP)<\/a><\/p><p><a href=\"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/?p=724\"><strong>L<\/strong> &#8211; Zasada podstawiania Liskov (Liskov Substitution Principle &#8211; LSP)<\/a><\/p><p><a href=\"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/?p=735\"><strong>I<\/strong> &#8211; Zasada segregacji interfejsu (Interface Segregation Principle &#8211; ISP)<\/a><\/p><p><a href=\"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/?p=749\"><strong>D<\/strong> &#8211; Zasada odwr\u00f3cenia zale\u017cno\u015bci (Dependency Inversion Principle &#8211; DIP)<\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8e9902e elementor-widget elementor-widget-text-editor\" data-id=\"8e9902e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>W poni\u017cszym artykule skupi\u0119 si\u0119 na opisaniu zasady pojedynczej odpowiedzialno\u015bci.<br><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4164ad4 elementor-widget elementor-widget-heading\" data-id=\"4164ad4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Definicja<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-86c5c41 elementor-widget elementor-widget-text-editor\" data-id=\"86c5c41\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Ka\u017cda klasa powinna mie\u0107 tylko jedn\u0105 odpowiedzialno\u015b\u0107 i tylko jeden pow\u00f3d do zmiany. Je\u017celi ma wi\u0119cej ni\u017c jedn\u0105 odpowiedzialno\u015b\u0107 i staje si\u0119zbyt skomplikowana, trudna do testowania i modyfikacji.<\/p><p>Mo\u017ce by\u0107 tak\u017ce stosowana do pojedynczych funkcji, plik\u00f3w w kodzie \u017ar\u00f3d\u0142owym, bibliotek, modu\u0142\u00f3w czy pakiet\u00f3w<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-345d268 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"345d268\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bd7ddcc\" data-id=\"bd7ddcc\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3dbcf39 elementor-widget elementor-widget-heading\" data-id=\"3dbcf39\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Symptomy \u0142amania<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-87fd55a elementor-widget elementor-widget-text-editor\" data-id=\"87fd55a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li>klasa ma zbyt wiele publicznych metod<\/li><li>zbyt skomplikowany kod<\/li><li>dodawanie nowych metod jest trudne<\/li><li>jedna klasa zawiera zbyt wiele funkcjonalno\u015bci<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-64dbd85 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"64dbd85\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-dcb23a7\" data-id=\"dcb23a7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b6ba8d6 elementor-widget elementor-widget-heading\" data-id=\"b6ba8d6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Przyk\u0142ad z\u0142amania regu\u0142y SRP<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f6bdecd elementor-widget elementor-widget-text-editor\" data-id=\"f6bdecd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Stworzyli\u015bmy klas\u0119 Image, kt\u00f3ra ma za zadanie obs\u0142ugiwa\u0107 nam obraz. Zawiera wysoko\u015b\u0107 i szeroko\u015b\u0107 obrazu. Problem w tym, \u017ce w tej jednej klasie umie\u015bcili\u015bmy 3 r\u00f3\u017cne odpowiedzialno\u015bci: przechowywanie danych o obrazie, rysowanie i zapisywanie obrazu do pliku. Te zadania nie s\u0105 zwi\u0105zane z celem klasy i mog\u0105 by\u0107 powodem do jej zmiany.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b227460 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"b227460\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-java'>public class Image {\n    private int width;\n    private int height;\n\n    public Image(int width, int height) {\n        this.width = width;\n        this.height = height;\n    }\n    \n    public int getWidth() {\n        return width;\n    }\n\n    public int getHeight() {\n        return height;\n    }\n\n    public void drawPixel(int x, int y) {\n        System.out.println(&quot;Rysuj\u0119 pixel&quot;);\n    }\n    public void drawLine(int x1, int y1, int x2, int y2){\n        System.out.println(&quot;Rysuj\u0119 lini\u0119&quot;);\n    }\n    public void saveAsPng(String path){\n        System.out.println(&quot;Zapisuj\u0119 obraz w formacie PNG&quot;);\n    }\n    public void saveAsJpeg(String path){\n        System.out.println(&quot;Zapisuj\u0119 obraz w formacie JPEG&quot;);\n    }\n} <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6678123 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6678123\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9aa6e9b\" data-id=\"9aa6e9b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3aadb0d elementor-widget elementor-widget-text-editor\" data-id=\"3aadb0d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Podzielmy zatem te klasy tak, aby ka\u017cda z nich mia\u0142a tylko jedn\u0105, jasno oddzielon\u0105 odpowiedzialno\u015b\u0107. Na przyk\u0142ad, mo\u017cna stworzy\u0107 klasy Canvas i ImageSaver, kt\u00f3re b\u0119d\u0105 si\u0119 zajmowa\u0142y odpowiednio rysowaniem\u00a0 i zapisywaniem obrazu. Klasa Image b\u0119dzie tylko przechowywa\u0107 dane o obrazie i nie b\u0119dzie mie\u0107 innych zada\u0144. Oto przyk\u0142ad poprawionego kodu:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2b9499c elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"2b9499c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-java'>public class Image {\n    private int width;\n    private int height;\n\n    public Image(int width, int height) {\n        this.width = width;\n        this.height = height;\n    }\n    \n    public int getWidth() {\n        return width;\n    }\n\n    public int getHeight() {\n        return height;\n    }\n} <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-19d4b81 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"19d4b81\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-java'>public class Canvas {\n    private Image image;\n\n    public Canvas(Image image) {\n        this.image = image;\n    }\n\n    public void drawPixel(int x, int y) {\n        System.out.println(&quot;Rysuj\u0119 pixel&quot;);\n    }\n    public void drawLine(int x1, int y1, int x2, int y2){\n        System.out.println(&quot;Rysuj\u0119 lini\u0119&quot;);\n    }\n} <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b8eff44 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"b8eff44\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-java'>public class ImageSaver {\n    Image image;\n\n    public ImageSaver(Image image) {\n        this.image = image;\n    }\n\n    public void saveAsPng(String path){\n        System.out.println(&quot;Zapisuj\u0119 obraz w formacie PNG&quot;);\n    }\n    public void saveAsJpeg(String path){\n        System.out.println(&quot;Zapisuj\u0119 obraz w formacie JPEG&quot;);\n    }\n} <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7133f3a elementor-widget elementor-widget-text-editor\" data-id=\"7133f3a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Teraz ka\u017cda klasa ma tylko jedn\u0105 odpowiedzialno\u015b\u0107 i tylko jeden pow\u00f3d do zmiany. Kod jest bardziej czytelny, \u0142atwiejszy do testowania i modyfikacji. Stosowanie si\u0119 do zasady SRP pomaga w tworzeniu kodu o wysokiej jako\u015bci i niskim sprz\u0119\u017ceniu.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Zasada pojedynczej odpowiedzialno\u015bci jest pierwsz\u0105 z pi\u0119ciu zawartych w akronimie SOLID. Zabacz o co w niej chodzi.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,33],"tags":[34,35,36,37],"class_list":["post-695","post","type-post","status-publish","format-standard","hentry","category-artykuly","category-czysty-kod","tag-czysty-kod","tag-java","tag-solid","tag-srp"],"_links":{"self":[{"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts\/695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=695"}],"version-history":[{"count":26,"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts\/695\/revisions"}],"predecessor-version":[{"id":908,"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts\/695\/revisions\/908"}],"wp:attachment":[{"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}