{"id":54187,"date":"2019-12-20T00:00:00","date_gmt":"2019-12-19T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/testmace-moshhnaya-ide-dlya-raboty-s-api"},"modified":"2020-02-18T14:02:10","modified_gmt":"2020-02-18T11:02:10","slug":"testmace-moshhnaya-ide-dlya-raboty-s-api","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/news\/testmace-moshhnaya-ide-dlya-raboty-s-api","title":{"rendered":"TestMace \u2014 pot\u0119\u017cny IDE do pracy z API","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Cze\u015b\u0107 wszystkim! Dzi\u015b chcieliby\u015bmy przedstawi\u0107 nasz produkt \u2014 IDE do pracy z API dla spo\u0142eczno\u015bci IT. <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">TestMace<\/a><\/noindex>Niekt\u00f3rzy z was mog\u0105 ju\u017c o nas s\u0142ysze\u0107 z <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace.com\/blog\/\">poprzednich artyku\u0142\u00f3w.<\/a><\/noindex>Jednak nie by\u0142o kompleksowego przegl\u0105du narz\u0119dzia, wi\u0119c eliminujemy ten uci\u0105\u017cliwy niedob\u00f3r.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 pot\u0119\u017cny IDE do pracy z API\" src=\"\/wp-content\/uploads\/2019\/12\/798c0783510a07e7fd162bdf14151c29.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"motivaciya\">Motywacja<\/h1>\n<p><\/p>\n<p>Chcieliby\u015bmy zacz\u0105\u0107 od tego, jak w zasadzie doszli\u015bmy do takiego pomys\u0142u i zdecydowali\u015bmy si\u0119 stworzy\u0107 nasze narz\u0119dzie do zaawansowanej pracy z API. Zacznijmy od listy funkcjonalno\u015bci, kt\u00f3re powinien mie\u0107 produkt, o kt\u00f3rym, naszym zdaniem, mo\u017cna powiedzie\u0107, \u017ce to \u201eIDE do pracy z API\u201d:<\/p>\n<p><\/p>\n<ul>\n<li>Tworzenie i wykonywanie zapyta\u0144 oraz skrypt\u00f3w (sekwencji zapyta\u0144)<\/li>\n<li>Pisanie r\u00f3\u017cnego rodzaju test\u00f3w<\/li>\n<li>Generowanie test\u00f3w<\/li>\n<li>Praca z opisami API, w tym import z takich format\u00f3w jak Swagger, OpenAPI, WADL itp.<\/li>\n<li>Mokowanie zapyta\u0144<\/li>\n<li>Dobra obs\u0142uga jednego lub kilku j\u0119zyk\u00f3w programowania do pisania skrypt\u00f3w, w tym integracja z popularnymi bibliotekami<\/li>\n<li>itd.<\/li>\n<\/ul>\n<p><\/p>\n<p>List\u0119 mo\u017cna uzupe\u0142nia\u0107 wed\u0142ug uznania. Wa\u017cne jest, aby stworzy\u0107 nie tylko samo IDE, ale tak\u017ce okre\u015blon\u0105 infrastruktur\u0119, jak chocia\u017cby synchronizacja w chmurze, narz\u0119dzia wiersza polece\u0144, us\u0142uga monitorowania online itp. W ko\u0144cu trendy ostatnich lat wymagaj\u0105 od nas nie tylko zaawansowanej funkcjonalno\u015bci aplikacji, ale tak\u017ce przyjemnego interfejsu.<\/p>\n<p><\/p>\n<p>Dla kogo przydatne jest takie narz\u0119dzie? Oczywi\u015bcie dla wszystkich, kt\u00f3rzy maj\u0105 zwi\u0105zek z rozwojem i testowaniem API \u2014 programist\u00f3w i tester\u00f3w =). I chocia\u017c dla pierwszych cz\u0119sto wystarczy wykonywanie pojedynczych zapyta\u0144 i prostych scenariuszy, to dla tester\u00f3w jest to jedno z podstawowych narz\u0119dzi, kt\u00f3re opr\u00f3cz tego powinno obejmowa\u0107 pot\u0119\u017cny mechanizm pisania test\u00f3w z mo\u017cliwo\u015bci\u0105 ich uruchamiania w CI.<\/p>\n<p><\/p>\n<p>Zatem, pod\u0105\u017caj\u0105c za tymi wskaz\u00f3wkami, zacz\u0119li\u015bmy tworzy\u0107 nasz produkt. Przyjrzyjmy si\u0119, co osi\u0105gn\u0119li\u015bmy na tym etapie.<\/p>\n<p><\/p>\n<h1 id=\"bystryy-start\">Szybki start<\/h1>\n<p><\/p>\n<p>Rozpocznijmy od pierwszego zapoznania si\u0119 z aplikacj\u0105. Mo\u017cna j\u0105 pobra\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\/\">na naszej stronie<\/a><\/noindex>. Obecnie wspierane s\u0105 wszystkie 3 g\u0142\u00f3wne platformy \u2014 Windows, Linux, MacOS. Pobieramy, instalujemy, uruchamiamy. Przy pierwszym uruchomieniu mo\u017cecie zobaczy\u0107 nast\u0119puj\u0105ce okno:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 pot\u0119\u017cny IDE do pracy z API\" src=\"\/wp-content\/uploads\/2019\/12\/dbbd26d8656488cd11716f7dbede9ec7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kliknij plusik w g\u00f3rnej cz\u0119\u015bci obszaru tre\u015bci, aby utworzy\u0107 pierwsze zapytanie. Zak\u0142adka z zapytaniem wygl\u0105da nast\u0119puj\u0105co:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 pot\u0119\u017cny IDE do pracy z API\" src=\"\/wp-content\/uploads\/2019\/12\/d76205f43ec821018642a3d354532e7e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Przyjrzyjmy si\u0119 temu dok\u0142adniej. Interfejs zapyta\u0144 przypomina interfejs popularnych klient\u00f3w REST, co u\u0142atwia migracj\u0119 z podobnych narz\u0119dzi. Wykonajmy pierwsze zapytanie na url <noindex><a rel=\"nofollow\" href=\"https:\/\/next.json-generator.com\/api\/json\/get\/NJv-NT-U8\">https:\/\/next.json-generator.com\/api\/json\/get\/NJv-NT-U8<\/a><\/noindex><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 pot\u0119\u017cny IDE do pracy z API\" src=\"\/wp-content\/uploads\/2019\/12\/19e639baa1e0d51f1a40b76ae9144d6c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na pierwszy rzut oka panel odpowiedzi r\u00f3wnie\u017c nie przynosi \u017cadnych niespodzianek. Zwr\u00f3c\u0119 jednak uwag\u0119 na kilka kwestii:<\/p>\n<p><\/p>\n<ol>\n<li>Tre\u015b\u0107 odpowiedzi ma form\u0119 drzewa, co po pierwsze zwi\u0119ksza informacyjno\u015b\u0107, a po drugie pozwala na dodanie kilku interesuj\u0105cych funkcji, o kt\u00f3rych poni\u017cej<\/li>\n<li>Jest zak\u0142adka Assertions, w kt\u00f3rej wy\u015bwietlany jest lista test\u00f3w dla tego zapytania<\/li>\n<\/ol>\n<p><\/p>\n<p>Jak mo\u017cna zauwa\u017cy\u0107, nasze narz\u0119dzie mo\u017cna wykorzysta\u0107 jako wygodnego klienta REST. Nie zebraliby\u015bmy si\u0119 tutaj, gdyby jego mo\u017cliwo\u015bci ogranicza\u0142y si\u0119 tylko do wysy\u0142ania zapyta\u0144. Poni\u017cej przedstawiam podstawowe poj\u0119cia i funkcjonalno\u015bci TestMace.<\/p>\n<p><\/p>\n<h1 id=\"osnovnye-ponyatiya-i-vozmozhnosti\">Podstawowe poj\u0119cia i mo\u017cliwo\u015bci<\/h1>\n<p><\/p>\n<h2 id=\"uzel\">W\u0119ze\u0142<\/h2>\n<p><\/p>\n<p>Funkcjonalno\u015b\u0107 TestMace podzielona jest na r\u00f3\u017cne typy w\u0119z\u0142\u00f3w. Na przyk\u0142adzie powy\u017cej pokazali\u015bmy dzia\u0142anie w\u0119z\u0142a RequestStep. Obecnie w aplikacji dost\u0119pne s\u0105 r\u00f3wnie\u017c nast\u0119puj\u0105ce typy w\u0119z\u0142\u00f3w:<\/p>\n<p><\/p>\n<ul>\n<li>RequestStep. To w\u0119ze\u0142, za pomoc\u0105 kt\u00f3rego mo\u017cna stworzy\u0107 zapytanie. Jako element podrz\u0119dny mo\u017ce mie\u0107 tylko jeden w\u0119ze\u0142 Assertion.<\/li>\n<li>Assertion. W\u0119ze\u0142 s\u0142u\u017cy do pisania test\u00f3w. Mo\u017ce by\u0107 elementem podrz\u0119dnym tylko dla w\u0119z\u0142a RequestStep.<\/li>\n<li>Folder. Pozwala grupowa\u0107 w\u0119z\u0142y Folder i RequestStep.<\/li>\n<li>Project. To w\u0119ze\u0142 g\u0142\u00f3wny, tworzony automatycznie podczas tworzenia projektu. W pozosta\u0142ym zakresie powtarza funkcjonalno\u015b\u0107 w\u0119z\u0142a Folder.<\/li>\n<li>Link. Odno\u015bnik do w\u0119z\u0142a Folder lub RequestStep. Pozwala na ponowne wykorzystanie zapyta\u0144 i scenariuszy.<\/li>\n<li>itd.<\/li>\n<\/ul>\n<p><\/p>\n<p>W\u0119z\u0142y znajduj\u0105 si\u0119 w scratches (panel po lewej stronie, na dole, s\u0142u\u017cy do szybkiego tworzenia \u201ejednorazowych\u201d zapyta\u0144) oraz w project (panel po lewej stronie, na g\u00f3rze), na kt\u00f3rym zatrzymamy si\u0119 na d\u0142u\u017cej.<\/p>\n<p><\/p>\n<h2 id=\"proekt\">Projekt<\/h2>\n<p><\/p>\n<p>Podczas uruchamiania aplikacji mog\u0142e\u015b zauwa\u017cy\u0107 jedn\u0105 lini\u0119 Project w lewym g\u00f3rnym rogu. To korze\u0144 drzewa projektu. Przy uruchomieniu projektu tworzy si\u0119 tymczasowy projekt, kt\u00f3rego \u015bcie\u017cka zale\u017cy od twojego systemu operacyjnego. W ka\u017cdej chwili mo\u017cesz przenie\u015b\u0107 projekt w dogodn\u0105 dla siebie lokalizacj\u0119.<\/p>\n<p><\/p>\n<p>G\u0142\u00f3wnym celem projektu jest mo\u017cliwo\u015b\u0107 zapisywania prac w systemie plik\u00f3w oraz dalsza synchronizacja za po\u015brednictwem system\u00f3w kontroli wersji, uruchamiania scenariuszy w CI, przegl\u0105dania zmian itd.<\/p>\n<p><\/p>\n<h2 id=\"peremennye\">Zmienne<\/h2>\n<p><\/p>\n<p>Zmienne to jeden z kluczowych mechanizm\u00f3w aplikacji. Ci z Was, kt\u00f3rzy pracuj\u0105 z narz\u0119dziami takimi jak TestMace, by\u0107 mo\u017ce ju\u017c zrozumieli, o czym mowa. Tak wi\u0119c zmienne to spos\u00f3b przechowywania wsp\u00f3lnych danych i komunikacji mi\u0119dzy w\u0119z\u0142ami. Przyk\u0142adem mog\u0105 by\u0107 zmienne \u015brodowiskowe w Postmanie lub Insomnia. Jednak posun\u0119li\u015bmy si\u0119 dalej i rozwin\u0119li\u015bmy temat. W TestMace zmienne mo\u017cna ustawia\u0107 na poziomie w\u0119z\u0142a. Ka\u017cdego. Istnieje tak\u017ce mechanizm dziedziczenia zmiennych od przodk\u00f3w i nadpisywania zmiennych w potomkach. Ponadto istnieje szereg wbudowanych zmiennych, kt\u00f3rych nazwy zaczynaj\u0105 si\u0119 od <code>$<\/code>. Oto niekt\u00f3re z nich:<\/p>\n<p><\/p>\n<ul>\n<li><code>$prevStep<\/code> \u2014 odniesienie do zmiennych poprzedniego w\u0119z\u0142a<\/li>\n<li><code>$nextStep<\/code> \u2014 odniesienie do zmiennych nast\u0119pnego w\u0119z\u0142a<\/li>\n<li><code>$parent<\/code> \u2014 to samo, ale dla przodka<\/li>\n<li><code>$response<\/code> \u2014 odpowied\u017a od serwera<\/li>\n<li><code>$env<\/code> \u2014 bie\u017c\u0105ce zmienne \u015brodowiskowe<\/li>\n<li><code>$dynamicVar<\/code> \u2014 zmienne dynamiczne, tworzone podczas wykonywania skryptu lub zapytania<\/li>\n<\/ul>\n<p><\/p>\n<p><code>$env<\/code> \u2014 to w zasadzie zwyk\u0142e zmienne na poziomie w\u0119z\u0142a projektu, jednak zestaw zmiennych \u015brodowiskowych zmienia si\u0119 w zale\u017cno\u015bci od wybranego \u015brodowiska. <\/p>\n<p><\/p>\n<p>Dost\u0119p do zmiennej odbywa si\u0119 przez <code>${variable_name}<\/code><br \/>\nJako warto\u015b\u0107 zmiennej mo\u017ce by\u0107 inna zmienna lub nawet ca\u0142e wyra\u017cenie. Na przyk\u0142ad, jako zmienna url mo\u017ce by\u0107 wyra\u017cenie postaci<br \/>\n<code>http:\/\/${host}:${port}\/${endpoint}<\/code>.<\/p>\n<p><\/p>\n<p>Osobno warto wspomnie\u0107 o mo\u017cliwo\u015bci przypisywania zmiennych w trakcie dzia\u0142ania skryptu. Na przyk\u0142ad cz\u0119sto zachodzi potrzeba zapisania danych autoryzacyjnych (tokena lub ca\u0142ego nag\u0142\u00f3wka), kt\u00f3re przysz\u0142y z serwera po udanym logowaniu. TestMace pozwala zapisywa\u0107 podobne dane w dynamicznych zmiennych jednego z przodk\u00f3w. Aby unikn\u0105\u0107 kolizji z ju\u017c istniej\u0105cymi \u201estatycznymi\u201d zmiennymi, dynamiczne zmienne zosta\u0142y wydzielone do oddzielnego obiektu. <code>$dynamicVar<\/code>. <\/p>\n<p><\/p>\n<h2 id=\"scenarii\">Scenariusze<\/h2>\n<p><\/p>\n<p>Wykorzystuj\u0105c wszystkie wymienione mo\u017cliwo\u015bci, mo\u017cna wykonywa\u0107 ca\u0142e scenariusze zapyta\u0144. Na przyk\u0142ad, stworzenie encji -&gt; zapytanie o encj\u0119 -&gt; usuni\u0119cie encji. W tym przypadku na przyk\u0142ad mo\u017cna u\u017cy\u0107 w\u0119z\u0142a Folder do grupowania kilku w\u0119z\u0142\u00f3w RequestStep.<\/p>\n<p><\/p>\n<h2 id=\"avtodopolnenie-i-podsvetka-znacheniya-vyrazheniya\">Autouzupe\u0142nianie i pod\u015bwietlenie warto\u015bci wyra\u017cenia<\/h2>\n<p><\/p>\n<p>Aby wygodnie pracowa\u0107 z zmiennymi (i nie tylko), niezb\u0119dne jest autouzupe\u0142nianie. Oczywi\u015bcie przyda si\u0119 r\u00f3wnie\u017c pod\u015bwietlenie warto\u015bci wyra\u017cenia, aby \u0142atwiej i wygodniej ustali\u0107, do czego odnosi si\u0119 konkretna zmienna. To jest ten przypadek, kiedy lepiej raz zobaczy\u0107 ni\u017c sto razy us\u0142ysze\u0107:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 pot\u0119\u017cny IDE do pracy z API\" src=\"\/wp-content\/uploads\/2019\/12\/cf9d30c9623b18575825d4282b8fe3e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Warto zauwa\u017cy\u0107, \u017ce autouzupe\u0142nianie dzia\u0142a nie tylko dla zmiennych, ale tak\u017ce na przyk\u0142ad dla nag\u0142\u00f3wk\u00f3w, warto\u015bci okre\u015blonych nag\u0142\u00f3wk\u00f3w (na przyk\u0142ad autouzupe\u0142nianie dla nag\u0142\u00f3wka Content-Type), protoko\u0142\u00f3w i wielu innych. Lista jest stale uzupe\u0142niana w miar\u0119 rozwoju aplikacji.<\/p>\n<p><\/p>\n<h2 id=\"undoredo\">Cofnij \/ powt\u00f3rz<\/h2>\n<p><\/p>\n<p>Cofanie\/powtarzanie zmian to bardzo wygodna funkcja, jednak z jakiego\u015b powodu realizowana jest daleko nie wsz\u0119dzie (a narz\u0119dzia do pracy z API nie s\u0105 wyj\u0105tkiem). Ale nie u nas!) Cofnij\/powt\u00f3rz jest zaimplementowane w ca\u0142ym projekcie, co pozwala na anulowanie nie tylko edytowania konkretnego w\u0119z\u0142a, ale tak\u017ce jego tworzenia, usuwania, przenoszenia, itd. Najbardziej krytyczne operacje wymagaj\u0105 potwierdzenia.<\/p>\n<p><\/p>\n<h2 id=\"sozdanie-testov\">Tworzenie test\u00f3w<\/h2>\n<p><\/p>\n<p>Za tworzenie test\u00f3w odpowiada w\u0119ze\u0142 Assertion. Jedn\u0105 z g\u0142\u00f3wnych cech jest mo\u017cliwo\u015b\u0107 tworzenia test\u00f3w bez programowania, z wykorzystaniem wbudowanych edytor\u00f3w. <\/p>\n<p><\/p>\n<p>W\u0119ze\u0142 Assertion sk\u0142ada si\u0119 z zestawu assertion-\u00f3w (twierdze\u0144). Ka\u017cdy assertion ma sw\u00f3j typ, obecnie istnieje kilka typ\u00f3w assertion-\u00f3w.<\/p>\n<p><\/p>\n<ol>\n<li>\n<p>Por\u00f3wnaj warto\u015bci \u2014 po prostu por\u00f3wnuje 2 warto\u015bci. Istnieje kilka operator\u00f3w por\u00f3wnania: \u201er\u00f3wne\u201d, \u201enie r\u00f3wne\u201d, \u201ewi\u0119ksze\u201d, \u201ewi\u0119ksze lub r\u00f3wne\u201d, \u201emniejsze\u201d, \u201emniejsze lub r\u00f3wne\u201d.<\/p>\n<p>\n<\/li>\n<li>\n<p>Zawiera warto\u015b\u0107 \u2014 sprawdza, czy podci\u0105g wyst\u0119puje w ci\u0105gu.<\/p>\n<p>\n<\/li>\n<li>\n<p>XPath \u2014 sprawdza, czy w XML wed\u0142ug selektora le\u017cy okre\u015blona warto\u015b\u0107.<\/p>\n<p>\n<\/li>\n<li>\n<p>JavaScript assertion \u2014 dowolny skrypt w j\u0119zyku JavaScript, kt\u00f3ry zwraca true w przypadku sukcesu i false w przypadku niepowodzenia.<\/p>\n<p>\n<\/li>\n<\/ol>\n<p><\/p>\n<p>Zauwa\u017c\u0119, \u017ce tylko ostatni wymaga od u\u017cytkownika umiej\u0119tno\u015bci programowania, pozosta\u0142e 3 assertion-y s\u0105 tworzone za pomoc\u0105 interfejsu graficznego. Oto, jak wygl\u0105da okno tworzenia assertion-u por\u00f3wnania warto\u015bci:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 pot\u0119\u017cny IDE do pracy z API\" src=\"\/wp-content\/uploads\/2019\/12\/e71e11fb0fb664d1d9751a71fbdcc850.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kwiatkiem na torcie jest szybkie tworzenie assertion-\u00f3w z odpowiedzi, tylko sp\u00f3jrz na to!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 pot\u0119\u017cny IDE do pracy z API\" src=\"\/wp-content\/uploads\/2019\/12\/3b86084419339a7a05a3548df5c12d6a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jednak takie assertion-y maj\u0105 oczywiste ograniczenia, w obliczu kt\u00f3rych mo\u017cesz u\u017cy\u0107 assertion-u JavaScript. I tutaj TestMace r\u00f3wnie\u017c zapewnia wygodne \u015brodowisko z autouzupe\u0142nianiem, pod\u015bwietleniem sk\u0142adni i nawet z analizatorem statycznym.<\/p>\n<p><\/p>\n<h2 id=\"opisanie-api\">Opis API<\/h2>\n<p><\/p>\n<p>TestMace umo\u017cliwia nie tylko korzystanie z API, ale tak\u017ce jego dokumentowanie. Opis ma hierarchiczn\u0105 struktur\u0119 i naturalnie wpasowuje si\u0119 w pozosta\u0142\u0105 cz\u0119\u015b\u0107 projektu. Co wi\u0119cej, obecnie istnieje mo\u017cliwo\u015b\u0107 importowania opisu API z format\u00f3w Swagger 2.0 \/ OpenAPI 3.0. Opis nie le\u017cy jedynie bezczynnie, ale jest \u015bci\u015ble zintegrowany z innymi cz\u0119\u015bciami projektu, co umo\u017cliwia automatyczne uzupe\u0142nianie URL-i, nag\u0142\u00f3wk\u00f3w HTTP, parametr\u00f3w zapyta\u0144 i innych element\u00f3w. W przysz\u0142o\u015bci planujemy r\u00f3wnie\u017c doda\u0107 testy zgodno\u015bci odpowiedzi z opisem API.<\/p>\n<p><\/p>\n<h2 id=\"sharing-nod\">Udost\u0119pnianie w\u0119z\u0142\u00f3w<\/h2>\n<p><\/p>\n<p>Przyk\u0142ad: chcesz udost\u0119pni\u0107 problematyczne zapytanie lub nawet ca\u0142y scenariusz koledze lub po prostu za\u0142\u0105czy\u0107 je do b\u0142\u0119du. TestMace pokrywa r\u00f3wnie\u017c ten przypadek: aplikacja pozwala na zserializowanie dowolnego w\u0119z\u0142a, a nawet poddrzewa do URL-u. Kopiuj-wklej i ju\u017c \u0142atwo przenios\u0142e\u015b zapytanie na inny komputer lub projekt.<\/p>\n<p><\/p>\n<h2 id=\"chelovekochitaemyy-format-hraneniya-proekta\">Czytelny format przechowywania projekt\u00f3w<\/h2>\n<p><\/p>\n<p>Obecnie ka\u017cdy w\u0119ze\u0142 jest przechowywany w osobnym pliku z rozszerzeniem yml (jak w przypadku w\u0119z\u0142a Assertion) lub w folderze o nazwie w\u0119z\u0142a, kt\u00f3ra zawiera plik index.yml.<br \/>\nOto jak wygl\u0105da przyk\u0142ad pliku z zapytaniem, kt\u00f3re zrobili\u015bmy w powy\u017cszym przegl\u0105dzie:<\/p>\n<p>\n<b class=\"spoiler_title\">index.yml<\/b><\/p>\n<pre><code class=\"ruby\">children: []\nvariables: {}\ntype: RequestStep\nassignVariables: []\nrequestData:\n  request:\n    method: GET\n    url: 'https:\/\/next.json-generator.com\/api\/json\/get\/NJv-NT-U8'\n  headers: []\n  disabledInheritedHeaders: []\n  params: []\n  body:\n    type: Json\n    jsonBody: ''\n    xmlBody: ''\n    textBody: ''\n    formData: []\n    file: ''\n    formURLEncoded: []\n  strictSSL: Inherit\nauthData:\n  type: inherit\nname: Scratch 1<\/code><\/pre>\n<p><\/p>\n<p>Jak wida\u0107, wszystko jest jasne. W razie potrzeby taki format mo\u017cna komfortowo edytowa\u0107 r\u0119cznie.<\/p>\n<p><\/p>\n<p>Hierarchia folder\u00f3w w systemie plik\u00f3w w pe\u0142ni odzwierciedla hierarchi\u0119 w\u0119z\u0142\u00f3w w projekcie. Na przyk\u0142ad scenariusz wygl\u0105daj\u0105cy na:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 pot\u0119\u017cny IDE do pracy z API\" src=\"\/wp-content\/uploads\/2019\/12\/8f08d934a977e4fdacd269f4ea0c34b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mapuje si\u0119 w systemie plik\u00f3w na nast\u0119puj\u0105c\u0105 struktur\u0119 (pokazana jest tylko hierarchia folder\u00f3w, ale mo\u017cna zrozumie\u0107 sens)<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 pot\u0119\u017cny IDE do pracy z API\" src=\"\/wp-content\/uploads\/2019\/12\/60a54704979f5a77ee05735fd8ebe824.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Co u\u0142atwia proces przegl\u0105du projektu.<\/p>\n<p><\/p>\n<h2 id=\"import-iz-postman\">Import z Postman<\/h2>\n<p><\/p>\n<p>Przeczytawszy wszystko powy\u017csze, niekt\u00f3rzy u\u017cytkownicy mog\u0105 chcie\u0107 spr\u00f3bowa\u0107 (prawda?) nowego produktu lub (czego diabe\u0142 nie zrobi!) w pe\u0142ni wykorzysta\u0107 go w swoim projekcie. Jednak migracj\u0119 mog\u0105 wstrzyma\u0107 liczne zasoby w tym samym Postmanie. W takich przypadkach TestMace wspiera import kolekcji z Postmana. Obecnie wspierany jest import bez test\u00f3w, jednak w przysz\u0142o\u015bci nie wykluczamy ich wsparcia.<\/p>\n<p><\/p>\n<h1 id=\"plany\">Plany<\/h1>\n<p><\/p>\n<p>Mam nadziej\u0119, \u017ce wielu z tych, kt\u00f3rzy dotarli do tego momentu, zainteresowa\u0142 nasz produkt. To jednak nie koniec! Prace nad produktem id\u0105 pe\u0142n\u0105 par\u0105 i oto kilka funkcji, kt\u00f3re planujemy doda\u0107 wkr\u00f3tce.<\/p>\n<p><\/p>\n<h2 id=\"oblachnaya-sinhronizaciya\">Synchronizacja w chmurze<\/h2>\n<p><\/p>\n<p>To jedna z najbardziej poszukiwanych funkcji. Obecnie oferujemy u\u017cycie system\u00f3w kontroli wersji jako form\u0119 synchronizacji, dlatego format jest bardziej przyjazny dla tego typu przechowywania. Jednak nie wszystkim taki spos\u00f3b pracy odpowiada, dlatego planujemy doda\u0107 znany wielu mechanizm synchronizacji przez nasze serwery. <\/p>\n<p><\/p>\n<h2 id=\"cli\">CLI<\/h2>\n<p><\/p>\n<p>Jak ju\u017c wspomniano, produkty na poziomie IDE nie obejd\u0105 si\u0119 bez r\u00f3\u017cnorakich integracji z istniej\u0105cymi aplikacjami lub workflow. CLI jest niezb\u0119dne do integracji test\u00f3w napisanych w TestMace w procesie continuous integration. Prace nad CLI id\u0105 pe\u0142n\u0105 par\u0105, wczesne wersje b\u0119d\u0105 uruchamia\u0142y projekt z prostym raportem w konsoli. W przysz\u0142o\u015bci planujemy doda\u0107 wyj\u015bcie raportu w formacie JUnit.<\/p>\n<p><\/p>\n<h2 id=\"plaginnaya-sistema\">System wtyczek<\/h2>\n<p><\/p>\n<p>Mimo pot\u0119gi naszego narz\u0119dzia, zestaw przypadk\u00f3w wymagaj\u0105cych rozwi\u0105zania jest nieograniczony. Ostatecznie istniej\u0105 zadania specyficzne dla konkretnego projektu. Dlatego planujemy doda\u0107 SDK do rozwoju wtyczek, co pozwoli ka\u017cdemu deweloperowi doda\u0107 funkcjonalno\u015b\u0107 wed\u0142ug w\u0142asnych upodoba\u0144.<\/p>\n<p><\/p>\n<h2 id=\"rasshirenie-assortimenta-tipov-uzlov\">Rozszerzenie asortymentu typ\u00f3w w\u0119z\u0142\u00f3w<\/h2>\n<p><\/p>\n<p>Ten zestaw w\u0119z\u0142\u00f3w nie pokrywa wszystkich przypadk\u00f3w potrzebnych u\u017cytkownikowi. W\u0119z\u0142y, kt\u00f3re planujemy doda\u0107:<\/p>\n<p><\/p>\n<ul>\n<li>W\u0119ze\u0142 Script \u2014 przekszta\u0142ca i umieszcza dane, korzystaj\u0105c z JS i odpowiedniego API. U\u017cywaj\u0105c tego typu w\u0119z\u0142a, mo\u017cna stworzy\u0107 na przyk\u0142ad skrypty pre-request i post-request w Postman.<\/li>\n<li>W\u0119ze\u0142 GraphQL \u2014 wsparcie dla GraphQL<\/li>\n<li>Custom assertion w\u0119ze\u0142 \u2014 umo\u017cliwi rozszerzenie zestawu dost\u0119pnych asercji w projekcie<br \/>\nOczywi\u015bcie, to nie jest ostateczna lista, b\u0119dzie ona na bie\u017c\u0105co uzupe\u0142niana, r\u00f3wnie\u017c dzi\u0119ki Waszym opiniom.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"faq\">FAQ<\/h1>\n<p><\/p>\n<p><strong>Czym r\u00f3\u017cnicie si\u0119 od Postman?<\/strong><\/p>\n<p><\/p>\n<ol>\n<li>Koncepcja w\u0119z\u0142\u00f3w, kt\u00f3ra pozwala na praktycznie nieograniczone skalowanie funkcjonalno\u015bci projektu<\/li>\n<li>Czytelny format projektu z zachowaniem go w systemie plik\u00f3w, co u\u0142atwia prac\u0119 z wykorzystaniem system\u00f3w kontroli wersji<\/li>\n<li>Mo\u017cliwo\u015b\u0107 tworzenia test\u00f3w bez programowania oraz bardziej zaawansowane wsparcie dla JS w edytorze test\u00f3w (autouzupe\u0142nianie, analiza statyczna)<\/li>\n<li>Zaawansowane automatyczne uzupe\u0142nianie i pod\u015bwietlanie bie\u017c\u0105cej warto\u015bci zmiennych<\/li>\n<\/ol>\n<p><\/p>\n<p><strong>Czy to produkt open-source?<\/strong><\/p>\n<p><\/p>\n<p>Nie, obecnie \u017ar\u00f3d\u0142a s\u0105 zamkni\u0119te, jednak w przysz\u0142o\u015bci rozwa\u017camy mo\u017cliwo\u015b\u0107 ich udost\u0119pnienia.<\/p>\n<p><\/p>\n<p><strong>Na czym zarabiacie?)<\/strong><\/p>\n<p><\/p>\n<p>Obok wersji gratisowej planujemy wyda\u0107 p\u0142atn\u0105 wersj\u0119 produktu. W pierwszej kolejno\u015bci b\u0119d\u0105 w niej rzeczy, kt\u00f3re wymagaj\u0105 cz\u0119\u015bci serwerowej, na przyk\u0142ad synchronizacja.<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Podsumowanie<\/h1>\n<p><\/p>\n<p>Nasz projekt z ka\u017cdym dniem zbli\u017ca si\u0119 do stabilnego wydania. Ju\u017c teraz mo\u017cna korzysta\u0107 z produktu, a pozytywne opinie naszych wczesnych u\u017cytkownik\u00f3w to potwierdzaj\u0105. Aktywnie zbieramy opinie, poniewa\u017c bez bliskiej wsp\u00f3\u0142pracy z spo\u0142eczno\u015bci\u0105 nie mo\u017cna stworzy\u0107 dobrego narz\u0119dzia. Mo\u017cna nas znale\u017a\u0107 tutaj:<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">Oficjalna strona<\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/testmace\">Telegram<\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/testmaceslackin.herokuapp.com\">Slack<\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.facebook.com\/testmace\">Facebook<\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/TestMace\/TestMace-issues\">Tracker problem\u00f3w<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Czekamy z niecierpliwo\u015bci\u0105 na Wasze sugestie i propozycje!<\/p>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458372\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0441\u0443\u0434 IT-\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u2014 IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API TestMace. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0437\u043d\u0430\u044e\u0442 \u043e \u043d\u0430\u0441 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435\u043e\u0431\u044a\u0435\u043c\u043b\u044e\u0449\u0435\u0433\u043e \u043e\u0431\u0437\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c \u044d\u0442\u043e\u0442 \u0434\u043e\u0441\u0430\u0434\u043d\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a. \u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u0442\u043e\u0433\u043e \u043a\u0430\u043a, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u043a \u0442\u0430\u043a\u043e\u0439 \u0436\u0438\u0437\u043d\u0438 \u0438 \u0440\u0435\u0448\u0438\u043b\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-54187","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0441\u0443\u0434 IT-\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u2014 IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API TestMace.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/news\/testmace-moshhnaya-ide-dlya-raboty-s-api\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47TestMace \u2014 \u043c\u043e\u0449\u043d\u0430\u044f IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0441\u0443\u0434 IT-\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u2014 IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API TestMace.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/news\/testmace-moshhnaya-ide-dlya-raboty-s-api\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-19T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:10+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47TestMace \u2014 pot\u0119\u017cne IDE do pracy z API | ProHoster","description":"Cze\u015b\u0107 wszystkim! Dzi\u015b chcemy przedstawi\u0107 nasz produkt spo\u0142eczno\u015bci IT \u2014 IDE do pracy z API TestMace.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/news\/testmace-moshhnaya-ide-dlya-raboty-s-api","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47TestMace \u2014 \u043c\u043e\u0449\u043d\u0430\u044f IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0441\u0443\u0434 IT-\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u2014 IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API TestMace.","og:url":"https:\/\/prohoster.info\/pl\/blog\/news\/testmace-moshhnaya-ide-dlya-raboty-s-api","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-19T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54187","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 10:21:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:10:33","updated":"2026-01-24 10:21:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/54187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=54187"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/54187\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=54187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=54187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=54187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}