{"id":889,"date":"2020-07-01T13:05:11","date_gmt":"2020-07-01T11:05:11","guid":{"rendered":"https:\/\/arasoftware.pl\/?p=889"},"modified":"2021-10-21T10:33:32","modified_gmt":"2021-10-21T08:33:32","slug":"programowanie-reaktywne","status":"publish","type":"post","link":"https:\/\/arasoftware.pl\/en\/programowanie-reaktywne\/","title":{"rendered":"Programowanie reaktywne"},"content":{"rendered":"<span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Czas czytania: <\/span> <span class=\"rt-time\">4<\/span> <span class=\"rt-label rt-postfix\">minut<\/span><\/span><h3 class=\"wp-block-heading wp-block-heading\" id=\"co-to-jest-programowanie-reaktywne\">Co to jest programowanie reaktywne?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Programowanie reaktywne, chocia&#380;&nbsp;nie jest m&#322;odym&nbsp;konceptem, zaczyna ostatnio zyskiwa&#263;&nbsp;coraz&nbsp;wi&#281;ksze zainteresowanie&nbsp;w&#347;r&oacute;d&nbsp;programist&oacute;w. A to za spraw&#261; <a rel=\"noreferrer noopener\" href=\"http:\/\/reactivex.io\/\" target=\"_blank\">ReactiveX.io<\/a> (Reactive Extension),&nbsp;kt&oacute;ry to spopularyzowa&#322; to podej&#347;cie poprzez stworzenie wielu bibliotek dost&#281;pnych w r&oacute;&#380;nych j&#281;zykach programowania. <\/p>\n\n\n<p class=\"wp-block-paragraph\">Idea programowania reaktywnego polega na zastosowaniu nieblokuj&#261;cych si&#281; mechanizm&oacute;w, kt&oacute;re podnosz&#261; stabilno&#347;&#263; i wydajno&#347;&#263; aplikacji. <\/p>\n\n\n<h3 class=\"wp-block-heading wp-block-heading\" id=\"programowanie-imperatywne\">Programowanie imperatywne<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Dla por&oacute;wnania koncepcja programowania imperatywnego (standardowe podej&#347;cie blokuj&#261;ce, np. Spring MVC) polega na dedykowaniu konkretnego w&#261;tku do konkretnej operacji. W&#261;tek ten jest zarezerwowany do obs&#322;ugi &#380;&#261;dania, pocz&#261;wszy od jego odebrania od klienta, poprzez wykonywanie logiki biznesowej aplikacji, a sko&#324;czywszy na interakcji z baz&#261; danych i odpowiedzi. Innymi s&#322;owy, jest zwalniany, dopiero gdy ca&#322;y cykl &#380;ycia danego &#380;&#261;dania si&#281; zako&#324;czy. <\/p>\n\n\n<p class=\"wp-block-paragraph\">Aplikacje dzia&#322;aj&#261;ce&nbsp;imperatywnie&nbsp;posiadaj&#261; okre&#347;lon&#261; pul&#281; w&#261;tk&oacute;w. Apache&nbsp;Tomcat&nbsp;standardowo posiada 200 w&#261;tk&oacute;w. Je&#347;li w danym czasie wszystkie s&#261; zaj&#281;te,&nbsp;to kolejne&nbsp;&#380;&#261;dania&nbsp;musz&#261; czeka&#263; na zwolnienie si&#281; aktualnie zaj&#281;tych w&#261;tk&oacute;w. Oczywi&#347;cie mo&#380;e to rodzi&#263; problemy wydajno&#347;ciowe w aplikacjach przetwarzaj&#261;cych du&#380;e ilo&#347;ci danych lub obs&#322;uguj&#261;cych du&#380;&#261; ilo&#347;&#263;&nbsp;&#380;&#261;da&#324;&nbsp;jednocze&#347;nie. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"749\" src=\"https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/06\/image-1024x749.png\" alt=\"\" class=\"wp-image-896\" srcset=\"https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/06\/image-1024x749.png 1024w, https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/06\/image-300x219.png 300w, https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/06\/image-768x562.png 768w, https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/06\/image.png 1371w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<p class=\"wp-block-paragraph has-text-align-center\"><em>Przyk&#322;ad architekrury imperatywnej<\/em>.<\/p>\n\n\n<h3 class=\"wp-block-heading wp-block-heading\" id=\"programowanie-reaktywne\">Programowanie reaktywne<\/h3>\n\n\n<p class=\"wp-block-paragraph\">W programowaniu reaktywnym (nieblokuj&#261;cym) w&#261;tek odbieraj&#261;cy&nbsp;&#380;&#261;danie&nbsp;jest zwalniany jeszcze przed wys&#322;aniem odpowiedzi do klienta. Dzi&#281;ki takiemu&nbsp;podej&#347;ciu&nbsp;mo&#380;e obs&#322;u&#380;y&#263; kolejne&nbsp;&#380;&#261;danie. Przetwarzanie&nbsp;&#380;&#261;da&#324;&nbsp;delegowanych przez w&#261;tek odbieraj&#261;cy odbywa si&#281; asynchronicznie.&nbsp;Odpowied&#378;&nbsp;na&nbsp;&#380;&#261;danie&nbsp;jest odsy&#322;ana do klienta za pomoc&#261; zdarze&#324;. <\/p>\n\n\n<p class=\"wp-block-paragraph\">Ilo&#347;&#263; w&#261;tk&oacute;w odpieraj&#261;cych&nbsp;&#380;&#261;dania&nbsp;jest uzale&#380;niona od architektury procesora. Zazwyczaj jest ich mniej wi&#281;cej tyle samo co rdzeni w procesorze. To dosy&#263; ma&#322;o w por&oacute;wnaniu do stylu imperatywnego. Jednak tutaj w&#261;tek odbieraj&#261;cy nie jest blokowany i nie czeka na przetworzenie ca&#322;ego&nbsp;&#380;&#261;dania&nbsp;w celu odes&#322;ania odpowiedzi klientowi. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"691\" src=\"https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/06\/image-1-1024x691.png\" alt=\"\" class=\"wp-image-898\" srcset=\"https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/06\/image-1-1024x691.png 1024w, https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/06\/image-1-300x202.png 300w, https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/06\/image-1-768x518.png 768w, https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/06\/image-1.png 1226w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<p class=\"wp-block-paragraph has-text-align-center\"><em>Przyk&#322;ad architektury reaktywnej<\/em>.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Programowanie reaktywne jest zaprojektowane na podstawie wzorca Obserwator. S&#261; w nim wykorzystywane odpowiednie obiekty&nbsp;&#8222;Publisher&#8221;&nbsp;i&nbsp;&#8222;Subscriber&#8221;. <\/p>\n\n\n<p class=\"wp-block-paragraph\">&#8222;Publisher&#8221; ma za zadanie wyprodukowa&#263; dane, o kt&oacute;rych informuje obiekt &#8222;Subscriber&#8221;. Ten drugi za to konsumuj&#281; dane wyprodukowane przez obiekt &#8222;Publisher&#8221;. Ca&#322;o&#347;&#263; zazwyczaj opiera si&#281; o mechanizm &#8222;callback&#8217;&oacute;w&#8221;.<\/p>\n\n\n\n\n\n<h3 class=\"wp-block-heading wp-block-heading\" id=\"programowanie-reaktywne-backpressure\">\n<br>Programowanie reaktywne &#8211; Backpressure<\/h3>\n\n\n<p class=\"wp-block-paragraph\">&#8222;Subscriber&#8221;&nbsp;podczas konsumowania danych emitowanych przez&nbsp;&#8222;Publisher&#8217;a&#8221;&nbsp;mo&#380;e mie&#263; problemy z ich przetwarzaniem czy to zwi&#261;zane z logik&#261; biznesow&#261;, czy te&#380; ze swoj&#261; wydajno&#347;ci&#261;. W tym celu zaprojektowano mechanizm&nbsp;&#8222;Backpressure&#8221;. Jest on odpowiedzialny za komunikacj&#281; pomi&#281;dzy&nbsp;&#8222;Subscriber&#8217;em&#8221;&nbsp;i&nbsp;&#8222;Publisherem&#8221;&nbsp;z tym, &#380;e&nbsp;tutaj to&nbsp;&#8222;Subscriber&#8221;&nbsp;wysy&#322;a wiadomo&#347;ci, a nie je konsumuje. Komunikacja ta nie jest wykorzystywana za ka&#380;dym odebraniem&nbsp;eventu, lecz jest&nbsp;&#8222;on&nbsp;demand&#8221;&nbsp;(na &#380;&#261;danie).&nbsp;Backpressure&nbsp;jest wykorzystywany, tylko je&#347;li jest on faktycznie potrzebny. <\/p>\n\n\n<p class=\"wp-block-paragraph\"> <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"992\" height=\"614\" src=\"https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/07\/image.png\" alt=\"\" class=\"wp-image-906\" srcset=\"https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/07\/image.png 992w, https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/07\/image-300x186.png 300w, https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/07\/image-768x475.png 768w\" sizes=\"auto, (max-width: 992px) 100vw, 992px\" \/><\/figure>\n\n\n<p class=\"wp-block-paragraph has-text-align-center\"><em>Schemat dzia&#322;ania Backpressure<\/em>.<\/p>\n\n\n<h3 class=\"wp-block-heading wp-block-heading\" id=\"kiedy-uc5bcyc487-programowania-reaktywnego\">Kiedy u&#380;y&#263; programowania reaktywnego?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Podej&#347;cie reaktywne nie niesie za sob&#261; osza&#322;amiaj&#261;cego wzrostu wydajno&#347;ci aplikacji. Raczej wynosi on maksymalnie od kilku do kilkunastu procent. Jednak dzi&#281;ki niemu system staje si&#281; stabilniejszy przy du&#380;ym obci&#261;&#380;eniu.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Sprawdzi si&#281; bardzo dobrze w systemach klasy enterprise, kt&oacute;re przetwarzaj&#261; ogromne ilo&#347;ci danych lub obs&#322;uguj&#261; jednorazowo du&#380;&#261; ilo&#347;&#263; zapyta&#324;. <\/p>\n\n\n<p class=\"wp-block-paragraph\">Mo&#380;na go u&#380;y&#263; tak&#380;e w programowaniu aplikacji w architekturze mikroserwisowej, gdzie poszczeg&oacute;lne serwisy wymieniaj&#261; mi&#281;dzy sob&#261; du&#380;&#261; ilo&#347;&#263; informacji. Dzi&#281;ki programowaniu reaktywnemu w&#261;tek &nbsp;mikroserwisu&nbsp;po odebraniu &#380;&#261;dania nie czeka&nbsp;&#8222;zablokowany&#8221;&nbsp;a&#380; do momentu, gdy je przetworzy i ode&#347;l&#281; odpowied&#378;,&nbsp;leczy jest wstanie przyj&#261;&#263; kolejne &#380;&#261;danie. <\/p>\n\n\n<p class=\"wp-block-paragraph\">Nowe systemy, pisane od zera s&#261; dobrym miejscem na wprowadzenie podej&#347;cia reaktywnego. Mo&#380;emy wtedy zaprojektowa&#263; czyst&#261; architektur&#281;, kt&oacute;ra u&#380;ywa mechanizm&oacute;w&nbsp;&#8222;non-blocking&#8221;&nbsp;do komunikacji z klientami czy te&#380; baz&#261; danych. <\/p>\n\n\n<h3 class=\"wp-block-heading wp-block-heading\" id=\"kiedy-nie-uc5bcywac487-programowania-reaktywnego\">Kiedy NIE u&#380;ywa&#263; programowania reaktywnego?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Nie zawsze u&#380;ycie paradygmatu programowania reaktywnego mo&#380;e okaza&#263; si&#281; trafnym wyborem. <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Jak masz m\u0142otek, to wsz\u0119dzie widzisz gwo\u017adzie!<\/p><\/blockquote>\n\n\n<p class=\"wp-block-paragraph\">Je&#347;li aplikacja&nbsp;legacy&nbsp;posiada problemy wydajno&#347;ciowe, to lepszym rozwi&#261;zaniem b&#281;dzie na pocz&#261;tku optymalizacja aktualnego kodu, bazy danych czy te&#380; architektury. Dopiero, je&#347;li to nie przyniesie oczekiwanej poprawny, to&nbsp;mo&#380;emy pokusi&#263; si&#281; o wprowadzenie mechanizm&oacute;w programowania reaktywnego. <\/p>\n\n\n<p class=\"wp-block-paragraph\">Samo programowania reaktywne jest znacznie bardziej z&#322;o&#380;one od podej&#347;cia imperatywnego. Implementacja go bez wyra&#378;nej konieczno&#347;ci mo&#380;e niepotrzebnie przynie&#347;&#263; negatywne efekty w formie zwi&#281;kszenia poziomu skomplikowania aplikacji, jej utrzymania oraz progu wej&#347;cia dla nowych cz&#322;onk&oacute;w zespo&#322;u.<\/p>\n\n\n<h3 class=\"wp-block-heading wp-block-heading\" id=\"podsumowanie\">Podsumowanie<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Jak wida&#263;, wszystko ma swoje plusy i minusy. Nie zawsze wprowadzenie programowania reaktywnego w projekcie mo&#380;e by&#263; uzasadnione. Warto wcze&#347;niej sprawdzi&#263; inne drogi optymalizacji, je&#347;li m&oacute;wimy tutaj o projektach ju&#380; dzia&#322;aj&#261;cych. <\/p>\n\n\n<p class=\"wp-block-paragraph\">Mam nadziej&#281;, &#380;e chocia&#380; w ma&#322;ym stopniu przedstawi&#322;em Ci paradygmat programowania reaktywnego. <\/p>\n\n\n<p class=\"wp-block-paragraph\">Dowiedz si&#281; wi&#281;cej na ten temat:<\/p>\n\n\n<ul class=\"wp-block-list wp-block-list\" style=\"\"><li><a href=\"https:\/\/arasoftware.pl\/2020\/09\/02\/webclient-asynchroniczny-klient-http-w-spring\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/arasoftware.pl\/2020\/09\/02\/webclient-asynchroniczny-klient-http-w-spring\/<\/a><\/li><\/ul>\n\n\n<p class=\"wp-block-paragraph\">Je&#347;li podoba&#322; Ci si&#281; ten artyku&#322;, to podziel si&#281; nim w swoich social mediach! Zach&#281;cam Ci&#281; te&#380; do pozostawienia swojej opinii w komentarzu. <\/p>","protected":false},"excerpt":{"rendered":"<p><span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Czas czytania: <\/span> <span class=\"rt-time\">4<\/span> <span class=\"rt-label rt-postfix\">minut<\/span><\/span> Co to jest programowanie reaktywne? Programowanie reaktywne, chocia&#380;&nbsp;nie jest m&#322;odym&nbsp;konceptem, zaczyna ostatnio zyskiwa&#263;&nbsp;coraz&nbsp;wi&#281;ksze zainteresowanie&nbsp;w&#347;r&oacute;d&nbsp;programist&oacute;w. A to za spraw&#261; ReactiveX.io (Reactive Extension),&nbsp;kt&oacute;ry to spopularyzowa&#322; to podej&#347;cie poprzez stworzenie wielu bibliotek dost&#281;pnych w r&oacute;&#380;nych j&#281;zykach programowania. Idea programowania reaktywnego polega na zastosowaniu nieblokuj&#261;cych si&#281; mechanizm&oacute;w, kt&oacute;re podnosz&#261; stabilno&#347;&#263; i wydajno&#347;&#263; aplikacji. Programowanie imperatywne Dla por&oacute;wnania koncepcja programowania &hellip;<\/p>","protected":false},"author":1,"featured_media":962,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[27],"class_list":["post-889","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-architektura-oprogramowania","tag-programowanie-reaktywne"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.11 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Programowanie reaktywne - Ara Software<\/title>\n<meta name=\"description\" content=\"Programowanie reaktywne, chocia\u017c nie jest m\u0142odym konceptem, zaczyna ostatnio zyskiwa\u0107 coraz wi\u0119ksze zainteresowanie w\u015br\u00f3d programist\u00f3w.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/arasoftware.pl\/en\/programowanie-reaktywne\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Programowanie reaktywne - Ara Software\" \/>\n<meta property=\"og:description\" content=\"Programowanie reaktywne, chocia\u017c nie jest m\u0142odym konceptem, zaczyna ostatnio zyskiwa\u0107 coraz wi\u0119ksze zainteresowanie w\u015br\u00f3d programist\u00f3w.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/arasoftware.pl\/en\/programowanie-reaktywne\/\" \/>\n<meta property=\"og:site_name\" content=\"Ara Software\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-01T11:05:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-10-21T08:33:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/07\/programowanie-reaktywne.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Radek Osak\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Radek Osak\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/arasoftware.pl\/programowanie-reaktywne\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/arasoftware.pl\/programowanie-reaktywne\/\"},\"author\":{\"name\":\"Radek Osak\",\"@id\":\"https:\/\/arasoftware.pl\/#\/schema\/person\/a13fe68bd27e762ef255547a88956902\"},\"headline\":\"Programowanie reaktywne\",\"datePublished\":\"2020-07-01T11:05:11+00:00\",\"dateModified\":\"2021-10-21T08:33:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/arasoftware.pl\/programowanie-reaktywne\/\"},\"wordCount\":895,\"publisher\":{\"@id\":\"https:\/\/arasoftware.pl\/#organization\"},\"keywords\":[\"Programowanie reaktywne\"],\"articleSection\":[\"Architektura oprogramowania\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/arasoftware.pl\/programowanie-reaktywne\/\",\"url\":\"https:\/\/arasoftware.pl\/programowanie-reaktywne\/\",\"name\":\"Programowanie reaktywne - Ara Software\",\"isPartOf\":{\"@id\":\"https:\/\/arasoftware.pl\/#website\"},\"datePublished\":\"2020-07-01T11:05:11+00:00\",\"dateModified\":\"2021-10-21T08:33:32+00:00\",\"description\":\"Programowanie reaktywne, chocia\u017c nie jest m\u0142odym konceptem, zaczyna ostatnio zyskiwa\u0107 coraz wi\u0119ksze zainteresowanie w\u015br\u00f3d programist\u00f3w.\",\"breadcrumb\":{\"@id\":\"https:\/\/arasoftware.pl\/programowanie-reaktywne\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/arasoftware.pl\/programowanie-reaktywne\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/arasoftware.pl\/programowanie-reaktywne\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/arasoftware.pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programowanie reaktywne\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/arasoftware.pl\/#website\",\"url\":\"https:\/\/arasoftware.pl\/\",\"name\":\"Ara Software\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/arasoftware.pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/arasoftware.pl\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/arasoftware.pl\/#organization\",\"name\":\"Ara Software\",\"url\":\"https:\/\/arasoftware.pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/arasoftware.pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/arasoftware.pl\/wp-content\/uploads\/2023\/06\/ara-logo-light-1.svg\",\"contentUrl\":\"https:\/\/arasoftware.pl\/wp-content\/uploads\/2023\/06\/ara-logo-light-1.svg\",\"width\":317,\"height\":55,\"caption\":\"Ara Software\"},\"image\":{\"@id\":\"https:\/\/arasoftware.pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/arasoftware.pl\/#\/schema\/person\/a13fe68bd27e762ef255547a88956902\",\"name\":\"Radek Osak\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/arasoftware.pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2a5a97fd24033c3df7dff799dc95774b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2a5a97fd24033c3df7dff799dc95774b?s=96&d=mm&r=g\",\"caption\":\"Radek Osak\"},\"url\":\"https:\/\/arasoftware.pl\/en\/author\/radek030790gmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Programowanie reaktywne - Ara Software","description":"Programowanie reaktywne, chocia\u017c nie jest m\u0142odym konceptem, zaczyna ostatnio zyskiwa\u0107 coraz wi\u0119ksze zainteresowanie w\u015br\u00f3d programist\u00f3w.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/arasoftware.pl\/en\/programowanie-reaktywne\/","og_locale":"en_US","og_type":"article","og_title":"Programowanie reaktywne - Ara Software","og_description":"Programowanie reaktywne, chocia\u017c nie jest m\u0142odym konceptem, zaczyna ostatnio zyskiwa\u0107 coraz wi\u0119ksze zainteresowanie w\u015br\u00f3d programist\u00f3w.","og_url":"https:\/\/arasoftware.pl\/en\/programowanie-reaktywne\/","og_site_name":"Ara Software","article_published_time":"2020-07-01T11:05:11+00:00","article_modified_time":"2021-10-21T08:33:32+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/07\/programowanie-reaktywne.png","type":"image\/png"}],"author":"Radek Osak","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Radek Osak","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/arasoftware.pl\/programowanie-reaktywne\/#article","isPartOf":{"@id":"https:\/\/arasoftware.pl\/programowanie-reaktywne\/"},"author":{"name":"Radek Osak","@id":"https:\/\/arasoftware.pl\/#\/schema\/person\/a13fe68bd27e762ef255547a88956902"},"headline":"Programowanie reaktywne","datePublished":"2020-07-01T11:05:11+00:00","dateModified":"2021-10-21T08:33:32+00:00","mainEntityOfPage":{"@id":"https:\/\/arasoftware.pl\/programowanie-reaktywne\/"},"wordCount":895,"publisher":{"@id":"https:\/\/arasoftware.pl\/#organization"},"keywords":["Programowanie reaktywne"],"articleSection":["Architektura oprogramowania"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/arasoftware.pl\/programowanie-reaktywne\/","url":"https:\/\/arasoftware.pl\/programowanie-reaktywne\/","name":"Programowanie reaktywne - Ara Software","isPartOf":{"@id":"https:\/\/arasoftware.pl\/#website"},"datePublished":"2020-07-01T11:05:11+00:00","dateModified":"2021-10-21T08:33:32+00:00","description":"Programowanie reaktywne, chocia\u017c nie jest m\u0142odym konceptem, zaczyna ostatnio zyskiwa\u0107 coraz wi\u0119ksze zainteresowanie w\u015br\u00f3d programist\u00f3w.","breadcrumb":{"@id":"https:\/\/arasoftware.pl\/programowanie-reaktywne\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/arasoftware.pl\/programowanie-reaktywne\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/arasoftware.pl\/programowanie-reaktywne\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/arasoftware.pl\/"},{"@type":"ListItem","position":2,"name":"Programowanie reaktywne"}]},{"@type":"WebSite","@id":"https:\/\/arasoftware.pl\/#website","url":"https:\/\/arasoftware.pl\/","name":"Ara Software","description":"","publisher":{"@id":"https:\/\/arasoftware.pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/arasoftware.pl\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/arasoftware.pl\/#organization","name":"Ara Software","url":"https:\/\/arasoftware.pl\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/arasoftware.pl\/#\/schema\/logo\/image\/","url":"https:\/\/arasoftware.pl\/wp-content\/uploads\/2023\/06\/ara-logo-light-1.svg","contentUrl":"https:\/\/arasoftware.pl\/wp-content\/uploads\/2023\/06\/ara-logo-light-1.svg","width":317,"height":55,"caption":"Ara Software"},"image":{"@id":"https:\/\/arasoftware.pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/arasoftware.pl\/#\/schema\/person\/a13fe68bd27e762ef255547a88956902","name":"Radek Osak","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/arasoftware.pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2a5a97fd24033c3df7dff799dc95774b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2a5a97fd24033c3df7dff799dc95774b?s=96&d=mm&r=g","caption":"Radek Osak"},"url":"https:\/\/arasoftware.pl\/en\/author\/radek030790gmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/posts\/889","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/comments?post=889"}],"version-history":[{"count":0,"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/posts\/889\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/media\/962"}],"wp:attachment":[{"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/media?parent=889"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/categories?post=889"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/tags?post=889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}