{"id":28458,"date":"2024-07-31T06:44:14","date_gmt":"2024-07-31T04:44:14","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=28458"},"modified":"2024-07-31T06:44:18","modified_gmt":"2024-07-31T04:44:18","slug":"przetwarzanie-danych-w-czasie-rzeczywistym-z-uzyciem-google-cloud-storage-i-pubsub","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/przetwarzanie-danych-w-czasie-rzeczywistym-z-uzyciem-google-cloud-storage-i-pubsub\/","title":{"rendered":"Przetwarzanie danych w czasie rzeczywistym z u\u017cyciem Google Cloud Storage i PubSub"},"content":{"rendered":"\n<p>W dzisiejszym \u015bwiecie, gdzie dane generowane s\u0105 w ogromnych ilo\u015bciach w czasie rzeczywistym, przetwarzanie tych danych na bie\u017c\u0105co staje si\u0119 kluczowe dla wielu firm. Google Cloud Storage i Google Pub\/Sub to dwa pot\u0119\u017cne narz\u0119dzia, kt\u00f3re mog\u0105 wsp\u00f3lnie efektywnie w tym pom\u00f3c.<\/p>\n\n\n\n<p>W artykule om\u00f3wi\u0119, jak zintegrowa\u0107 te us\u0142ugi, aby stworzy\u0107 skalowalne i niezawodne rozwi\u0105zanie do przetwarzania danych na \u017cywo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Wprowadzenie do Google Cloud Storage i Pub\/Sub<\/strong><\/h2>\n\n\n\n<p><strong>Google Cloud Storage<\/strong> to skalowalna us\u0142uga przechowywania obiekt\u00f3w, kt\u00f3ra umo\u017cliwia przechowywanie i dost\u0119p do danych w dowolnym czasie i miejscu. Stanowi wi\u0119c idealne miejsce do gromadzenia du\u017cych ilo\u015bci danych, takich jak pliki multimedialne, dokumenty i dane z aplikacji.<\/p>\n\n\n\n<p><strong>Google Cloud Pub\/Sub<\/strong> to globalna us\u0142uga przesy\u0142ania wiadomo\u015bci w czasie rzeczywistym, kt\u00f3ra umo\u017cliwia tworzenie, wysy\u0142anie i odbieranie wiadomo\u015bci mi\u0119dzy aplikacjami. Dzi\u0119ki Pub\/Sub mo\u017cna \u0142atwo skalowa\u0107 przetwarzanie danych i tworzy\u0107 elastyczne architektury komunikacyjne.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Integracja Google Cloud Storage i Pub\/Sub<\/strong><\/h2>\n\n\n\n<p>Aby przetwarza\u0107 dane w czasie rzeczywistym za pomoc\u0105 Google Cloud Storage i Pub\/Sub, nale\u017cy skonfigurowa\u0107 przep\u0142yw pracy, kt\u00f3ry pozwoli na przesy\u0142anie danych z jednego systemu do drugiego.<\/p>\n\n\n\n<p><strong>Krok 1:<\/strong> Konfiguracja bucketa w Google Cloud Storage<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"1\">\n<li>Zaloguj si\u0119 do konsoli Google Cloud.<\/li>\n\n\n\n<li>Przejd\u017a do sekcji \u201eStorage\u201d i utw\u00f3rz nowy bucket.<\/li>\n\n\n\n<li>Skonfiguruj uprawnienia dost\u0119pu, aby zapewni\u0107 odpowiedni poziom bezpiecze\u0144stwa.<\/li>\n<\/ol>\n\n\n\n<p><strong>Krok 2:<\/strong> Konfiguracja tematu (ang. topic) w Google Pub\/Sub<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"1\">\n<li>Przejd\u017a do sekcji \u201ePub\/Sub\u201d w konsoli Google Cloud.<\/li>\n\n\n\n<li>Utw\u00f3rz nowy temat, kt\u00f3ry b\u0119dzie s\u0142u\u017cy\u0142 do przesy\u0142ania wiadomo\u015bci o nowych danych w bucketcie.<\/li>\n<\/ol>\n\n\n\n<p><strong>Krok 3:<\/strong> Skonfiguruj powiadomienia dla bucketa<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"1\">\n<li>Przejd\u017a do sekcji \u201eStorage\u201d i wybierz utworzony bucket.<\/li>\n\n\n\n<li>Skonfiguruj powiadomienia dla tego bucketa, aby wysy\u0142a\u0142 wiadomo\u015bci do tematu Pub\/Sub w przypadku dodania nowych plik\u00f3w.<\/li>\n<\/ol>\n\n\n\n<p><strong>Przyk\u0142ad konfiguracji za pomoc\u0105 CLI:<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ngsutil notification create -t &amp;lt;PUBSUB_TOPIC&gt; -f json gs:\/\/&amp;lt;BUCKET_NAME&gt;\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Przetwarzanie danych w czasie rzeczywistym<\/strong><\/h2>\n\n\n\n<p>W tym punkcie om\u00f3wi\u0119 proces odbierania, przetwarzania i reagowania na dane w czasie rzeczywistym przy u\u017cyciu Google Cloud Storage i Pub\/Sub.<\/p>\n\n\n\n<p><strong>Krok 4<\/strong>: Subskrypcja i przetwarzanie wiadomo\u015bci<\/p>\n\n\n\n<p>Aby przetwarza\u0107 dane w czasie rzeczywistym, musisz utworzy\u0107 subskrypcj\u0119 na temat Pub\/Sub i skonfigurowa\u0107 proces, kt\u00f3ry b\u0119dzie odbiera\u0142 i przetwarza\u0142 wiadomo\u015bci.<\/p>\n\n\n\n<p><strong>Tworzenie subskrypcji:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"1\">\n<li>Przejd\u017a do sekcji &#8222;Pub\/Sub&#8221; i wybierz utworzony temat.\n<ul class=\"wp-block-list\">\n<li>W Google Cloud Console, na pasku nawigacyjnym po lewej stronie, kliknij \u201ePub\/Sub\u201d.<\/li>\n\n\n\n<li>Kliknij na nazw\u0119 tematu, kt\u00f3ry utworzy\u0142e\u015b wcze\u015bniej.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Utw\u00f3rz now\u0105 subskrypcj\u0119 dla tego tematu.\n<ul class=\"wp-block-list\">\n<li>Kliknij \u201eCreate subscription\u201d.<\/li>\n\n\n\n<li>Wprowad\u017a nazw\u0119 subskrypcji.<\/li>\n\n\n\n<li>Wybierz typ dostarczania wiadomo\u015bci (np.: \u201ePull\u201d lub \u201ePush\u201d).<\/li>\n\n\n\n<li>Je\u015bli wybierzesz \u201ePush\u201d, podaj URL endpointu, do kt\u00f3rego wiadomo\u015bci maj\u0105 by\u0107 wysy\u0142ane.<\/li>\n\n\n\n<li>Kliknij \u201eCreate\u201d.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p><strong>Przyk\u0142ad konfiguracji za pomoc\u0105 CLI:<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ngcloud pubsub subscriptions create &amp;lt;SUBSCRIPTION_NAME&gt; --topic=&amp;lt;PUBSUB_TOPIC&gt;\n<\/pre><\/div>\n\n\n<p><strong>Krok 5<\/strong>: Przetwarzanie danych<\/p>\n\n\n\n<p>Po utworzeniu subskrypcji, musisz skonfigurowa\u0107 aplikacj\u0119, kt\u00f3ra b\u0119dzie odbiera\u0107 wiadomo\u015bci z subskrypcji i przetwarza\u0107 dane w czasie rzeczywistym. Mo\u017cesz u\u017cy\u0107 r\u00f3\u017cnych narz\u0119dzi oraz framework\u00f3w, do kt\u00f3rych nale\u017c\u0105 Cloud Functions, Dataflow, czy nawet w\u0142asnych rozwi\u0105za\u0144 opartych na j\u0119zykach takich jak Python lub Java.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Przetwarzanie wiadomo\u015bci w Pythonie<\/strong><\/h3>\n\n\n\n<p>Poni\u017cej przedstawi\u0119 przyk\u0142adowy kod w Pythonie, kt\u00f3ry odbiera wiadomo\u015bci z subskrypcji i przetwarza je:<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"1\">\n<li><strong>Instalacja wymaganych bibliotek:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Zainstaluj bibliotek\u0119 Google Cloud Pub\/Sub:<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npip install google-cloud-pubsub\n<\/pre><\/div>\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li><strong>Przyk\u0142ad kodu do odbierania i przetwarzania wiadomo\u015bci:<\/strong><\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nfrom google.cloud import pubsub_v1\n\n# Inicjalizacja klienta Pub\/Sub\nsubscriber = pubsub_v1.SubscriberClient()\nsubscription_path = &#039;projects\/{project_id}\/subscriptions\/{subscription}&#039;\n\ndef callback(message):\n    print(f&#039;Received message: {message.data}&#039;)\n    # Przetwarzaj dane z wiadomo\u015bci\n    # Na przyk\u0142ad, odczytaj dane z Google Cloud Storage i przeprowad\u017a analiz\u0119\n    message.ack()\n\n# Subskrybuj wiadomo\u015bci i ustaw callback\nstreaming_pull_future = subscriber.subscribe(subscription_path, callback=callback)\nprint(f&#039;Listening for messages on {subscription_path}&#039;)\n\ntry:\n    # Przetwarzaj wiadomo\u015bci do momentu przerwania\n    streaming_pull_future.result()\nexcept KeyboardInterrupt:\n    streaming_pull_future.cancel()\n<\/pre><\/div>\n\n\n<p>W powy\u017cszym przyk\u0142adzie funkcja callback jest wywo\u0142ywana za ka\u017cdym razem, gdy nowa wiadomo\u015b\u0107 jest odbierana z subskrypcji. W tej funkcji mo\u017cna umie\u015bci\u0107 logik\u0119 przetwarzania danych, tak\u0105 jak odczytanie danych z Google Cloud Storage, przetworzenie ich i zapisanie wynik\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Przetwarzanie danych w Google Cloud Functions<\/strong><\/h3>\n\n\n\n<p>Google Cloud Functions to us\u0142uga bezserwerowa, kt\u00f3ra pozwala na uruchamianie kodu w odpowiedzi na zdarzenia. Mo\u017cesz u\u017cy\u0107 Cloud Functions do przetwarzania wiadomo\u015bci z Pub\/Sub.<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"1\">\n<li><strong>Tworzenie funkcji w Cloud Functions:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Przejd\u017a do sekcji \u201eCloud Functions\u201d w konsoli Google Cloud.<\/li>\n\n\n\n<li>Kliknij \u201eCreate function\u201d.<\/li>\n\n\n\n<li>Wybierz typ wyzwalacza jako \u201eCloud Pub\/Sub\u201d.<\/li>\n\n\n\n<li>Wybierz temat Pub\/Sub, kt\u00f3ry b\u0119dzie wyzwala\u0142 funkcj\u0119.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Przyk\u0142adowy kod funkcji:<\/strong><\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nimport json\nfrom google.cloud import storage\n\ndef process_pubsub(event, context):\n    # Odbierz wiadomo\u015b\u0107 z Pub\/Sub\n    message_data = base64.b64decode(event&#x5B;&#039;data&#039;]).decode(&#039;utf-8&#039;)\n    message_json = json.loads(message_data)\n\n    # Przetwarzaj dane (na przyk\u0142ad, odczytaj plik z Cloud Storage)\n    client = storage.Client()\n    bucket_name = message_json&#x5B;&#039;bucket&#039;]\n    file_name = message_json&#x5B;&#039;name&#039;]\n    bucket = client.get_bucket(bucket_name)\n    blob = bucket.blob(file_name)\n    data = blob.download_as_string()\n\n    # Przeprowad\u017a dalsz\u0105 analiz\u0119 danych\n    print(f&#039;Przetwarzanie pliku: {file_name} z bucketa: {bucket_name}&#039;)\n    print(f&#039;Dane: {data}&#039;)\n<\/pre><\/div>\n\n\n<p>W tym przyk\u0142adzie funkcja process_pubsub jest wywo\u0142ywana, gdy nowa wiadomo\u015b\u0107 jest odbierana z tematu Pub\/Sub. Funkcja odczytuje dane z wiadomo\u015bci, pobiera odpowiedni plik z Google Cloud Storage i przetwarza go.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Monitorowanie i optymalizacja<\/strong><\/h2>\n\n\n\n<p>Aby zapewni\u0107 niezawodno\u015b\u0107 i wydajno\u015b\u0107 rozwi\u0105zania, nale\u017cy monitorowa\u0107 dzia\u0142anie systemu i optymalizowa\u0107 go w razie potrzeby.<\/p>\n\n\n\n<p><strong>Monitorowanie:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"1\">\n<li>Google Cloud Monitoring:\n<ul class=\"wp-block-list\">\n<li>Skorzystaj z Google Cloud Monitoring, aby \u015bledzi\u0107 metryki takie jak op\u00f3\u017anienia w przetwarzaniu wiadomo\u015bci, wykorzystanie zasob\u00f3w i b\u0142\u0119dy.<\/li>\n\n\n\n<li>Ustaw alerty, aby by\u0107 powiadamianym o potencjalnych problemach.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Logowanie:\n<ul class=\"wp-block-list\">\n<li>Skonfiguruj logowanie dla swoich aplikacji przetwarzaj\u0105cych dane, aby mie\u0107 wgl\u0105d w przebieg przetwarzania i \u0142atwo diagnozowa\u0107 problemy.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p><strong>Optymalizacja:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"1\">\n<li>Skalowanie:\n<ul class=\"wp-block-list\">\n<li>Skaluj swoje instancje przetwarzaj\u0105ce dane w zale\u017cno\u015bci od obci\u0105\u017cenia. Google Cloud Functions i Cloud Run automatycznie skaluj\u0105 si\u0119 w odpowiedzi na ruch.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Optymalizacja kodu:\n<ul class=\"wp-block-list\">\n<li>Optymalizuj kod przetwarzaj\u0105cy, aby minimalizowa\u0107 op\u00f3\u017anienia i zwi\u0119ksza\u0107 wydajno\u015b\u0107. Zadbaj o efektywne zarz\u0105dzanie zasobami, takie jak pami\u0119\u0107 i CPU.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Podsumowanie<\/strong><\/h2>\n\n\n\n<p>Przetwarzanie danych w czasie rzeczywistym z u\u017cyciem Google Cloud Storage i Pub\/Sub pozwala na tworzenie skalowalnych i elastycznych rozwi\u0105za\u0144, kt\u00f3re mog\u0105 sprosta\u0107 wymaganiom wsp\u00f3\u0142czesnych aplikacji. Poprzez odpowiedni\u0105 konfiguracj\u0119 i monitorowanie mo\u017cesz zapewni\u0107, \u017ce Twoje systemy dzia\u0142aj\u0105 efektywnie i niezawodnie, dostarczaj\u0105c warto\u015bciowe dane w czasie rzeczywistym.<\/p>\n\n\n\n<p>***<\/p>\n\n\n\n<p>Je\u015bli ciekawi\u0105 Ci\u0119 narz\u0119dzia wykorzystywane w bran\u017cy IT, zajrzyj koniecznie <a href=\"https:\/\/sii.pl\/blog\/all\/przeglad-narzedzi\/\" target=\"_blank\" aria-label=\"do innych artyku\u0142\u00f3w naszych specjalist\u00f3w (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">do innych artyku\u0142\u00f3w naszych specjalist\u00f3w<\/a>. <\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;28458&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;3&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 3)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Przetwarzanie danych w czasie rzeczywistym z u\u017cyciem Google Cloud Storage i PubSub&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( votes: 3)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>W dzisiejszym \u015bwiecie, gdzie dane generowane s\u0105 w ogromnych ilo\u015bciach w czasie rzeczywistym, przetwarzanie tych danych na bie\u017c\u0105co staje si\u0119 &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/przetwarzanie-danych-w-czasie-rzeczywistym-z-uzyciem-google-cloud-storage-i-pubsub\/\">Continued<\/a><\/p>\n","protected":false},"author":656,"featured_media":28461,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[2628,2627,1546,1512],"class_list":["post-28458","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-google-cloud-pub-sub","tag-google-cloud-storage","tag-przeglad-narzedzi","tag-poradnik"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/07\/Przetwarzanie-danych-w-czasie-rzeczywistym-z-uzyciem-Google-Cloud-Storage-i-PubSub.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/28458"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/656"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=28458"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/28458\/revisions"}],"predecessor-version":[{"id":28460,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/28458\/revisions\/28460"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/28461"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=28458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=28458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=28458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}