{"id":846,"date":"2025-03-03T18:27:22","date_gmt":"2025-03-03T17:27:22","guid":{"rendered":"https:\/\/stowarzyszenieotwartejnauki.pl\/?page_id=846"},"modified":"2026-04-21T15:13:25","modified_gmt":"2026-04-21T14:13:25","slug":"programowanie-zespolowe-24l","status":"publish","type":"page","link":"https:\/\/stowarzyszenieotwartejnauki.pl\/en\/programowanie-zespolowe-24l\/","title":{"rendered":"Programowanie zespo\u0142owe"},"content":{"rendered":"<p>Przedmiot prowadzony na Wydziale Fizyki UW w ramach studi\u00f3w I stopnia. Autor poni\u017cszego: Piotr Biega\u0144ski.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"1-planowanie-projektu\">1. Planowanie projektu<\/h2>\n\n<h4 class=\"wp-block-heading\" id=\"11-projektowanie-obiektowe\">1.1 Projektowanie obiektowe<\/h4>\n\n\n<p><a href=\"https:\/\/wazniak.mimuw.edu.pl\/index.php?title=Programowanie_obiektowe\">Zaj\u0119cia z MIMUW<\/a>, kt\u00f3rych pierwsze dwa modu\u0142y maj\u0105 \u0142adny wst\u0119p do projektowania obiektowego.<\/p>\n\n\n\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Class_diagram\">Strona z Wikipedii<\/a>, kt\u00f3ra opisuje u\u017cywan\u0105 przez nas notacj\u0119 (w szerszym ni\u017c wymagany zakresie).<\/p>\n\n\n\n<p>Otwarto\u017ar\u00f3d\u0142owe programy, kt\u00f3re umo\u017cliwiaj\u0105 rysowanie diagram\u00f3w z u\u017cyciem UML: <a href=\"https:\/\/uml.sourceforge.io\/\">Umbrello<\/a>, <a href=\"http:\/\/dia-installer.de\/\">dia<\/a>.<\/p>\n\n\n\n<p><a href=\"https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/02\/Programowanie_zespolowe.pdf\">Zadania<\/a>, na kt\u00f3rych mo\u017cna po\u0107wiczy\u0107.<\/p>\n\n\n\n<p><a href=\"https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/03\/Programowanie_zespolowe_rozw.pdf\" data-type=\"link\" data-id=\"https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/03\/Programowanie_zespolowe_rozw.pdf\">Rozwi\u0105zania<\/a> wybranych zada\u0144.<\/p>\n\n\n<h4 class=\"wp-block-heading\" id=\"12-modele-zarzadzania-projektem\">1.2 Modele zarz\u0105dzania projektem<\/h4>\n\n\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Waterfall_model\">Kaskadowy<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Iterative_design\">Iteracyjny<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Incremental_build_model\">Przyrostowy<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Agile_software_development\" data-type=\"link\" data-id=\"https:\/\/en.wikipedia.org\/wiki\/Agile_software_development\">Programowanie zwinne<\/a> \u2013 osobne podej\u015bcie \u0142\u0105cz\u0105ce w sobie modele m.in. iteracyjny i przyrostowy. <a href=\"https:\/\/agilemanifesto.org\/principles.html\">Korpomanifest.<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"661\" src=\"https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/02\/agile-1024x661.png\" alt=\"\" class=\"wp-image-1126\" style=\"width:497px;height:auto\" srcset=\"https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/02\/agile-1024x661.png 1024w, https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/02\/agile-300x194.png 300w, https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/02\/agile-768x496.png 768w, https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/02\/agile-18x12.png 18w, https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/02\/agile.png 1220w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<h2 class=\"wp-block-heading\" id=\"2-dobre-praktyki-w-pythonie\">2. Dobre praktyki w Pythonie<\/h2>\n\n\n<p>Repozytorium z plikami z zaj\u0119\u0107 jest pod <a href=\"https:\/\/gitlab.com\/fuw-pz\/pz25\">linkiem<\/a>. Na razie (zgodnie z nazw\u0105) zignorujcie plik .gitignore.<\/p>\n\n\n<h4 class=\"wp-block-heading\" id=\"21-specyfika-pythona-jako-jezyka-obiektowego\">2.1 Specyfika Pythona jako j\u0119zyka obiektowego<\/h4>\n\n\n<p>Problem prywatno\u015bci<\/p>\n\n\n\n<p>Klasy i metody abstrakcyjne<\/p>\n\n\n\n<p>Metody statyczne i klasowe<\/p>\n\n\n\n<p>Nieistnienie polimorfizmu, metody klasowe jako potencjalne rozwi\u0105zanie<\/p>\n\n\n\n<p>Podzia\u0142 projektu na pliki, strukturyzowanie klas pomi\u0119dzy plikami<\/p>\n\n\n<h4 class=\"wp-block-heading\" id=\"22-pyenv-i-kontrola-wersji-pythona\">2.2 Pyenv i kontrola wersji Pythona<\/h4>\n\n\n<p><a href=\"https:\/\/docs.python.org\/3\/library\/venv.html\" data-type=\"link\" data-id=\"https:\/\/docs.python.org\/3\/library\/venv.html\">Dokumentacja<\/a> modu\u0142u <code>venv<\/code> i opis jego u\u017cycia.<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/pyenv\/pyenv\">Repozytorium pyenva<\/a>, a w nim r\u00f3wnie\u017c instrukcje instalacji i wyja\u015bnienie, jak dzia\u0142a.<\/p>\n\n\n\n<p>Pyenv nie dzia\u0142a na Windowsie (chocia\u017c pewnie lepiej powiedzie\u0107, \u017ce to Windows nie dzia\u0142a\u2026). Programowa\u0107 na Windowsie, w tym u\u017cywaj\u0105c pyenva, najlepiej u\u017cywaj\u0105c <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/wsl\/install\">Windows Subsytem for Linux<\/a>.<\/p>\n\n\n\n<p>Jeszcze lepszym rozwi\u0105zaniem problemu Windowsa jest <a href=\"https:\/\/www.youtube.com\/watch?v=KwnBZZ7_FGg\">pozbycie si\u0119 go<\/a> (nie b\u00f3j si\u0119 klikn\u0105\u0107!).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"316\" src=\"https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/04\/windowsxp.jpg\" alt=\"\" class=\"wp-image-1215\" style=\"width:258px;height:auto\" srcset=\"https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/04\/windowsxp.jpg 480w, https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/04\/windowsxp-300x198.jpg 300w, https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/04\/windowsxp-18x12.jpg 18w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/figure>\n\n\n<h4 class=\"wp-block-heading\" id=\"23-czytelnosc-i-dokumentowanie-kodu\">2.3 Czytelno\u015b\u0107 i dokumentowanie kodu<\/h4>\n\n\n<p><a href=\"https:\/\/peps.python.org\/pep-0008\">PEP-8<\/a>, czyli zbi\u00f3r wytycznych stylistycznych, pomagaj\u0105cych pisa\u0107 czytelny i ustandaryzowany kod.<\/p>\n\n\n\n<p>Podstawowe rzeczy dotycz\u0105ce <a href=\"https:\/\/mypy.readthedocs.io\/en\/stable\/cheat_sheet_py3.html\">typowania<\/a>, czyli przypisywania obiektom konkretnych typ\u00f3w danych. Pe\u0142na <a href=\"https:\/\/docs.python.org\/3\/library\/typing.html\">dokumentacja<\/a> zawiera te\u017c inne rzeczy jak omawiane <code>TypeVar<\/code>. Opis tego, jak powinno si\u0119 typowa\u0107 zawiera <a href=\"https:\/\/peps.python.org\/pep-0484\/\">PEP-484<\/a>.<\/p>\n\n\n\n<p><a href=\"https:\/\/peps.python.org\/pep-0256\/\">PEP-256<\/a>, <a href=\"https:\/\/peps.python.org\/pep-0257\">PEP-257<\/a> i <a href=\"https:\/\/peps.python.org\/pep-0256\/\">PEP-258 <\/a>zawieraj\u0105 podstawowe informacje na temat formatowania i u\u017cywania docstring\u00f3w. W Pythonie jest wiele dopuszczalnych konwencji. Osobi\u015bcie u\u017cywam docstring\u00f3w zgodnych z formatem <a href=\"https:\/\/sphinxcontrib-napoleon.readthedocs.io\/en\/latest\/example_google.html\">Google<\/a>, wydaj\u0105 mi si\u0119 czytelne.<\/p>\n\n\n\n<p><a href=\"https:\/\/google.github.io\/styleguide\/pyguide.html\">Googlowskie wytyczne stylistyczne<\/a> s\u0105 zgodne z odpowiednimi PEPami, przy okazji precyzuj\u0105c i rozszerzaj\u0105c to, co PEPy zostawiaj\u0105 jako decyzj\u0119 dla dewelopera. S\u0105 sp\u00f3jne i dobrze przemy\u015blane, warto si\u0119 zapozna\u0107.<\/p>\n\n\n<h4 class=\"wp-block-heading\" id=\"24-moduly-biblioteki-skrypty\">2.4 Modu\u0142y, biblioteki, skrypty<\/h4>\n\n\n<p><a href=\"https:\/\/docs.python.org\/3\/tutorial\/modules.html\">Definicje<\/a> poj\u0119\u0107 modu\u0142u, paczki i skryptu w kontek\u015bcie Pythona, oraz podstawowe wytyczne jak je tworzy\u0107.<\/p>\n\n\n\n<p><a href=\"https:\/\/docs.python.org\/3\/library\/argparse.html\">Dokumentacja<\/a> modu\u0142u <code>argparse<\/code>.<\/p>\n\n\n\n<p><a href=\"https:\/\/docs.python.org\/3\/howto\/argparse.html\">Samouczek<\/a> najwa\u017cniejszych funkcji z modu\u0142u <code>argparse<\/code>.<\/p>\n\n\n<h4 class=\"wp-block-heading\" id=\"25-cwiczenie-podsumowujace\">2.5 \u0106wiczenie podsumowuj\u0105ce<\/h4>\n\n\n<p><a href=\"https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2025\/03\/Programowanie_zespolowe-1.pdf\">Zadania<\/a> wymagaj\u0105ce zaprojektowania hierarchii klas oraz zaimplementowania jej w zgodzie z dobrymi praktykami.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"3-git-gitlab-i-dystrybuowanie-kodu\">3. Git, Gitlab i dystrybuowanie kodu<\/h2>\n\n<h4 class=\"wp-block-heading\" id=\"31-podstawy\">3.1 Podstawy<\/h4>\n\n\n<p><a href=\"https:\/\/git-scm.com\/book\/en\/v2\">Oficjalny podr\u0119cznik<\/a> do Gita. Interesuj\u0105 nas przede wszystkim rozdzia\u0142y 1-5.<\/p>\n\n\n\n<p><a href=\"https:\/\/git-scm.com\/docs\">Dokumentacja<\/a> Gita.<\/p>\n\n\n\n<p><a href=\"https:\/\/gitlab.com\/fuw_software\/aktygrafy\/-\/blob\/ebc1362f69f93cc16dc8103729ab93f49cfd84fd\/.gitignore\">Przyk\u0142adowy<\/a> plik <code>.gitignore<\/code>, kt\u00f3ry generalnie powinien za\u0142atwi\u0107 wszystko co trzeba je\u015bli chodzi o Pythona.<\/p>\n\n\n\n<p><a href=\"https:\/\/docs.gitlab.com\/tutorials\">Samouczki<\/a> z Gitlaba.<\/p>\n\n\n\n<p><a href=\"https:\/\/docs.gitlab.com\">Dokumentacja<\/a> Gitlaba.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/03\/git-768x1024.jpg\" alt=\"\" class=\"wp-image-1162\" style=\"width:317px;height:auto\" srcset=\"https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/03\/git-768x1024.jpg 768w, https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/03\/git-225x300.jpg 225w, https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/03\/git-1152x1536.jpg 1152w, https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/03\/git-9x12.jpg 9w, https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/03\/git.jpg 1440w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n<h4 class=\"wp-block-heading\" id=\"32-tworzenie-dystrybucji\">3.2 Tworzenie dystrybucji<\/h4>\n\n\n<p><a href=\"https:\/\/packaging.python.org\/en\/latest\">Pe\u0142ny opis<\/a> procesu tworzenia dystrybucji modu\u0142u, sk\u0142adni <code>pyproject.toml<\/code> itd.<\/p>\n\n\n\n<p><a href=\"https:\/\/gitlab.com\/fuw_software\/aktygrafy\/-\/blob\/e726458dd0a54b6d9a04cbb80493d346cff02c1f\/pyproject.toml\">Przyk\u0142adowy plik<\/a> <code>pyproject.toml<\/code> (nieco bardziej rozbudowany i z automatycznym wersjonowaniem).<\/p>\n\n\n\n<p><a href=\"https:\/\/docs.pytest.org\/en\/stable\/index.html\">Dokumentacja<\/a> biblioteki <code>pytest<\/code> oraz samouczki jej u\u017cycia (testy jednostkowe).<\/p>\n\n\n\n<p><a href=\"https:\/\/mypy.readthedocs.io\/en\/stable\/index.html\">Dokumentacja<\/a> biblioteki <code>mypy<\/code> oraz samouczki jej u\u017cycia (statyczne sprawdzanie typ\u00f3w).<\/p>\n\n\n\n<p><a href=\"https:\/\/flake8.pycqa.org\/en\/latest\">Dokumentacja<\/a> modu\u0142u <code>flake8<\/code> pozwalaj\u0105cego na sprawdzanie, czy kod trzyma si\u0119 PEP-8.<\/p>\n\n\n\n<p>Przyk\u0142adowe rozwi\u0105zanie <code><a href=\"https:\/\/gitlab.com\/fuw-pz\/starcat-example-solution\">starcata<\/a><\/code>. To niekoniecznie jest dobre i poprawne rozwi\u0105zanie!<\/p>\n\n\n<h4 class=\"wp-block-heading\" id=\"33-cicd-na-gitlabie\">3.3 CI\/CD na Gitlabie<\/h4>\n\n\n<p><a href=\"https:\/\/docs.gitlab.com\/topics\/build_your_application\">Dokumentacja<\/a> CI\/CD na Gitlabie, w tym samouczek u\u017cycia, szablony dla r\u00f3\u017cnych j\u0119zyk\u00f3w oraz pe\u0142na dokumentacja j\u0119zyka YAML.<\/p>\n\n\n\n<p><a href=\"https:\/\/gitlab.com\/fuw_software\/aktygrafy\/-\/blob\/ebc1362f69f93cc16dc8103729ab93f49cfd84fd\/.gitlab-ci.yml\">Przyk\u0142adowy<\/a> ci\u0105g CI\/CD odpowiadaj\u0105cy za integracj\u0119, testowanie i dostarczanie modu\u0142u Pythonowego.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"225\" height=\"225\" src=\"https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/04\/ut1.jpeg\" alt=\"\" class=\"wp-image-1212\" style=\"width:342px;height:auto\" srcset=\"https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/04\/ut1.jpeg 225w, https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/04\/ut1-150x150.jpeg 150w, https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/04\/ut1-12x12.jpeg 12w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/figure>\n\n\n<h4 class=\"wp-block-heading\" id=\"34-cwiczenia\">3.4 \u0106wiczenia<\/h4>\n\n\n<p><a href=\"https:\/\/stowarzyszenieotwartejnauki.pl\/wp-content\/uploads\/2026\/04\/Programowanie_zespolowe-2.pdf\">Zadania<\/a> z u\u017cywania kontroli wersji oraz ci\u0105g\u0142ych integracji, testowania i dostarczania.<\/p>\n\n\n<h4 class=\"wp-block-heading\" id=\"35-tematy-dodatkowe\">3.5 Tematy dodatkowe<\/h4>\n\n\n<p>Automatyczne wersjonowanie z u\u017cyciem <a href=\"https:\/\/versioningit.readthedocs.io\/en\/stable\/\"><code>versioningit<\/code><\/a>.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.sphinx-doc.org\/en\/master\/tutorial\/index.html\">Dokumentacja<\/a> biblioteki <code>sphinx<\/code> oraz samouczki jej u\u017cycia (tworzenie dokumentacji).<\/p>\n\n\n\n<p><a href=\"https:\/\/docs.gitlab.com\/user\/project\/pages\">Samouczek<\/a> stawiania strony projektu za pomoc\u0105 Gitlab Pages.<\/p>\n\n\n\n<p><a href=\"https:\/\/twine.readthedocs.io\/en\/stable\">Dokumentacja<\/a> modu\u0142u <code>twine<\/code> (wrzucanie dystrybucji na PyPI).<\/p>\n\n\n\n<p><a href=\"https:\/\/docs.pypi.org\/trusted-publishers\/\">Samouczek<\/a> automatyzacji publikowania modu\u0142u na PyPI u\u017cywaj\u0105c \u201etrusted publishers&#8221;.<\/p>\n\n\n\n<p>Kiedy Python jest z\u0142ym wyborem?<\/p>\n\n\n\n<p>Wybrane licencje otwarte: <a href=\"https:\/\/www.gnu.org\/licenses\/gpl-3.0.html\">GPL<\/a>, <a href=\"https:\/\/opensource.org\/license\/mit\">MIT<\/a>, <a href=\"https:\/\/opensource.org\/licenses?ls=bsd\">BSD<\/a>.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"4-projekty-programistyczne-i-zaliczenie\">4. Projekty programistyczne i zaliczenie<\/h2>\n\n\n<p>Mo\u017cna proponowa\u0107 w\u0142asne projekty (i bardzo do tego zach\u0119cam)!<\/p>\n\n\n\n<p><a href=\"https:\/\/stowarzyszenieotwartejnauki.pl\/programowanie-zespolowe-24l\/projekty-programistyczne\/\">Tutaj<\/a> znajduje si\u0119 lista aktualnie dost\u0119pnych oraz minionych projekt\u00f3w.<\/p>\n\n\n\n<p>Na dole strony znajduj\u0105 si\u0119 tak\u017ce <a href=\"https:\/\/stowarzyszenieotwartejnauki.pl\/programowanie-zespolowe-24l\/projekty-programistyczne\/#pzo\">zasady oceniania<\/a>.<\/p>\n\n\n\n<p><a href=\"https:\/\/stowarzyszenieotwartejnauki.pl\/programowanie-zespolowe-24l\/struktura-i-zakres-kolokwium\/\">Tutaj<\/a> znajduj\u0105 si\u0119 zagadnienia na kolokwium.<\/p>","protected":false},"excerpt":{"rendered":"<p>Przedmiot prowadzony na Wydziale Fizyki UW w ramach studi\u00f3w I stopnia. Autor poni\u017cszego: Piotr Biega\u0144ski. 1. Planowanie projektu 1.1 Projektowanie obiektowe Zaj\u0119cia z MIMUW, kt\u00f3rych pierwsze dwa modu\u0142y maj\u0105 \u0142adny wst\u0119p do projektowania obiektowego. Strona z Wikipedii, kt\u00f3ra opisuje u\u017cywan\u0105 przez nas notacj\u0119 (w szerszym ni\u017c wymagany zakresie). Otwarto\u017ar\u00f3d\u0142owe programy, kt\u00f3re umo\u017cliwiaj\u0105 rysowanie diagram\u00f3w z [&hellip;]<\/p>","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-846","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/stowarzyszenieotwartejnauki.pl\/en\/wp-json\/wp\/v2\/pages\/846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stowarzyszenieotwartejnauki.pl\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/stowarzyszenieotwartejnauki.pl\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/stowarzyszenieotwartejnauki.pl\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/stowarzyszenieotwartejnauki.pl\/en\/wp-json\/wp\/v2\/comments?post=846"}],"version-history":[{"count":58,"href":"https:\/\/stowarzyszenieotwartejnauki.pl\/en\/wp-json\/wp\/v2\/pages\/846\/revisions"}],"predecessor-version":[{"id":1223,"href":"https:\/\/stowarzyszenieotwartejnauki.pl\/en\/wp-json\/wp\/v2\/pages\/846\/revisions\/1223"}],"wp:attachment":[{"href":"https:\/\/stowarzyszenieotwartejnauki.pl\/en\/wp-json\/wp\/v2\/media?parent=846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}