{"id":36795,"date":"2019-10-31T22:13:50","date_gmt":"2019-10-31T19:13:50","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kak-perestat-delat-odno-i-to-zhe\/"},"modified":"2019-10-31T22:13:50","modified_gmt":"2019-10-31T19:13:50","slug":"kak-perestat-delat-odno-i-to-zhe","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/kak-perestat-delat-odno-i-to-zhe","title":{"rendered":"Cum s\u0103 \u00eencetezi s\u0103 faci acela\u0219i lucru","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00ce\u021bi place s\u0103 repe\u021bi acelea\u0219i opera\u021bii de fiecare dat\u0103? Mie nu. Dar de fiecare dat\u0103 c\u00e2nd lucram cu depozitul Rostelecom \u00een clientul SQL, eram nevoit s\u0103 specific manual toate join-urile \u00eentre tabele. \u0218i \u021bin\u00e2nd cont c\u0103 \u00een 90% din cazuri c\u00e2mpurile \u0219i condi\u021biile de unire a tabelelor erau identice din interogare \u00een interogare! Ar p\u0103rea c\u0103 orice client SQL are func\u021bii de completare automat\u0103, dar pentru depozite nu func\u021bioneaz\u0103 \u00eentotdeauna: acolo rar sunt definite constraint-uri unice \u0219i chei externe pentru a \u00eembun\u0103t\u0103\u021bi performan\u021ba, iar f\u0103r\u0103 acestea programul nu poate \u00een\u021belege cum sunt legate entit\u0103\u021bile \u0219i ce \u00ee\u021bi poate oferi.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/rostelecom\/blog\/462021\/\"><img decoding=\"async\" alt=\"Cum s\u0103 \u00eencetezi s\u0103 faci acela\u0219i lucru\" src=\"\/wp-content\/uploads\/2019\/08\/998faa579fa9772fa4509980be551be3.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Dup\u0103 ce am trecut prin negare, furie, negociere, depresie \u0219i apropiindu-m\u0103 de acceptare, m-am decis \u2014 de ce s\u0103 nu \u00eencerc s\u0103 implementez completarea automat\u0103 cu blackjack \u0219i poate chiar mai bine? Folosesc clientul dbeaver, scris \u00een java, care are o versiune comunitate cu surs\u0103 deschis\u0103. Mi-a venit un plan simplu:<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<ol>\n<li>S\u0103 g\u0103sesc \u00een codul surs\u0103 clasele responsabile pentru completarea automat\u0103<\/li>\n<li>S\u0103 le redirec\u021bionez pentru a func\u021biona cu metadatele externe \u0219i s\u0103 extrag informa\u021bii despre join-uri de acolo<\/li>\n<li>??????<\/li>\n<li>PROFIT<\/li>\n<\/ol>\n<p>\nCu primul punct m-am descurcat destul de repede \u2014 am g\u0103sit \u00een urma de bug-uri o cerere pentru corectarea complet\u0103rii automate \u0219i \u00een leg\u0103tura <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dbeaver\/dbeaver\/commit\/4f7652c1d11f21d29cf734155b133e9a426c727f\">commit-ului<\/a><\/noindex> am descoperit clasa SQLCompletionAnalyzer. Am aruncat o privire peste cod \u2014 exact ce aveam nevoie. R\u0103m\u00e2nea s\u0103-l rescriu astfel \u00eenc\u00e2t totul s\u0103 func\u021bioneze. Am a\u0219teptat o sear\u0103 liber\u0103 \u0219i am \u00eenceput s\u0103 m\u0103 g\u00e2ndesc la implementare. Regula leg\u0103turilor tabelelor (metadatele) am decis s\u0103 le \u021bin \u00een json. Nu aveam experien\u021b\u0103 practic\u0103 cu acest format \u0219i sarcina actual\u0103 mi s-a p\u0103rut o oportunitate de a corecta aceast\u0103 lips\u0103. <\/p>\n<p>Pentru a lucra cu json am decis s\u0103 folosesc biblioteca <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fangyidong\/json-simple\">json-simple<\/a><\/noindex> de la Google. Aici au \u00eenceput surprizele. A\u0219a cum s-a dovedit, dbeaver, ca o aplica\u021bie adev\u0103rat\u0103, este scris pe platforma Eclipse folosind framework-ul OSGi. Pentru dezvoltatorii experimenta\u021bi, acest lucru ofer\u0103 confort \u00een gestionarea dependen\u021belor, dar pentru mine a fost mai mult ca magie neagr\u0103, la care evident nu eram preg\u0103tit: de obicei, specific importul claselor de care aveam nevoie din biblioteca json-simple \u00een capul clasei editate, o indic \u00een pom.xml, dup\u0103 care proiectul refuz\u0103 categoric s\u0103 se compileze corect \u0219i se pr\u0103bu\u0219e\u0219te cu erori. <\/p>\n<p>A corectat erorile de compilare, s-a realizat c\u0103 biblioteca nu a fost specificat\u0103 \u00een pom.xml, ci \u00een manifestul manifest.mf, a\u0219a cum cere OSGI, specific\u00e2nd-o ca import-package. Nu este cea mai elegant\u0103 solu\u021bie, dar func\u021bioneaz\u0103. Aici a ap\u0103rut urm\u0103toarea surpriz\u0103. Dac\u0103 dezvol\u021bi \u00een IntelliJ IDEA, nu po\u021bi pur \u0219i simplu s\u0103 porne\u0219ti debug-ul proiectului t\u0103u bazat pe platforma Eclipse: un dezvoltator neexperimentat trebuie s\u0103 sufere la fel de mult ca un analist f\u0103r\u0103 completarea automat\u0103 a interog\u0103rilor. Au intervenit chiar dezvoltatorii bobrului, care au detaliat \u00een wiki toate \u201edansurile cu tob\u0103\u201d care trebuiesc realizate. Cel mai frustrant este c\u0103, chiar \u0219i dup\u0103 toate aceste eforturi, proiectul nu dorea s\u0103 porneasc\u0103 \u00een debug cu biblioteca JSON conectat\u0103 prin import-package (de\u0219i, \u00een produsul final, el continua s\u0103 se compileze cu succes). <\/p>\n<p>P\u00e2n\u0103 la acel moment, am reu\u0219it s\u0103 simt ineficien\u021ba utiliz\u0103rii JSON pentru sarcina mea \u2014 p\u00e2n\u0103 la urm\u0103, se presupunea c\u0103 metadatele vor fi editate manual, iar formatul XML se potrive\u0219te mai bine. Un alt argument \u00een favoarea XML a fost c\u0103 JDK-ul con\u021bine toate clasele necesare, ceea ce a permis s\u0103 pun cap\u0103t luptei cu biblioteca extern\u0103. Cu mare pl\u0103cere, am transferat toate metadatele din JSON \u00een XML \u0219i am \u00eenceput s\u0103 modific logica complet\u0103rii automate. <\/p>\n<p><b class=\"spoiler_title\">Exemplu de metadate<\/b><\/p>\n<pre><code class=\"xml\">dim_account\n        dim_partner\n        \n        \n    \n    \n        dim_account\n        dim_branch<\/code><\/pre>\n<p>\u00cen rezultat, am <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/v9854268996\/dbeaver\">aduce modific\u0103ri<\/a><\/noindex> \u00een clasele SQLUtils \u0219i SQLCompletionAnalyzer. Ideea este aceasta: dac\u0103 aplica\u021bia nu reu\u0219e\u0219te s\u0103 g\u0103seasc\u0103 sugestii adecvate pentru completarea automat\u0103 conform logicii de baz\u0103, atunci verific\u0103 existen\u021ba posibilelor join-uri \u00een fi\u0219ierul XML extern. \u00cen fi\u0219ierul respectiv sunt stocate perechi de tabele cu specificarea c\u00e2mpurilor care trebuie corelate. Restric\u021biile pentru datele tehnice de valabilitate ale \u00eenregistr\u0103rilor eff_dttm \u0219i exp_dttm, precum \u0219i indicatorul de \u0219tergere logic\u0103 deleted_ind sunt stabilite implicit.<\/p>\n<p>Dup\u0103 ce au fost f\u0103cute modific\u0103rile \u00een cod, a ap\u0103rut \u00eentrebarea - cine va completa fi\u0219ierul cu metadate? Exist\u0103 multe entit\u0103\u021bi \u00een depozit, a\u0219a c\u0103 este dificil s\u0103 scrii toate leg\u0103turile. \u00cen final, am decis s\u0103 pun aceast\u0103 sarcin\u0103 pe umerii colegilor mei analizi. Am \u00eenc\u0103rcat fi\u0219ierul cu metadate \u00een svn, de unde se face checkout \u00een directorul local cu programul. Principiul este acesta: a ap\u0103rut o nou\u0103 entitate \u00een depozit? Un analist adaug\u0103 posibilele join-uri \u00een fi\u0219ier, comiteaz\u0103 modific\u0103rile, iar ceilal\u021bi fac checkout pentru ei \u0219i se bucur\u0103 de completarea automat\u0103 func\u021bional\u0103: comunitate, acumulare de cuno\u0219tin\u021be \u0219i toate celelalte. Am organizat un workshop pentru colegi despre utilizarea programului, am scris un articol \u00een Confluence - acum \u00een companie avem un instrument convenabil \u00een plus.<\/p>\n<p>Lucrul la aceast\u0103 caracteristic\u0103 mi-a oferit \u00een\u021belegerea faptului c\u0103 nu trebuie s\u0103 ne temem s\u0103 explor\u0103m proiectele open source - \u00een general, au o arhitectur\u0103 clar\u0103, iar cuno\u0219tin\u021be de baz\u0103 ale limbajului sunt suficiente pentru experimente. \u0218i cu o dozare adecvat\u0103 de perseveren\u021b\u0103, chiar po\u021bi sc\u0103pa de acele opera\u021biuni rutiniere nepl\u0103cute, economisindu-\u021bi timp pentru noi experimente.<br \/>\n<br \/>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/rostelecom\/blog\/462021\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u044b \u043b\u044e\u0431\u0438\u0442\u0435 \u0438\u0437 \u0440\u0430\u0437\u0430 \u0432 \u0440\u0430\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438? \u0412\u043e\u0442 \u0438 \u044f \u043d\u0435\u0442. \u041d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0432 SQL-\u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0420\u043e\u0441\u0442\u0435\u043b\u0435\u043a\u043e\u043c\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u0436\u043e\u0439\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u0440\u0443\u0447\u043a\u0430\u043c\u0438. \u0418 \u044d\u0442\u043e \u043f\u0440\u0438\u0442\u043e\u043c, \u0447\u0442\u043e \u0432 90% \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043f\u043e\u043b\u044f \u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u0438 \u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443! \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u043b\u044e\u0431\u043e\u0439 SQL-\u043a\u043b\u0438\u0435\u043d\u0442 \u0438\u043c\u0435\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043d\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27562,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36795","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u044b \u043b\u044e\u0431\u0438\u0442\u0435 \u0438\u0437 \u0440\u0430\u0437\u0430 \u0432 \u0440\u0430\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438? \u0412\u043e\u0442 \u0438 \u044f \u043d\u0435\u0442. \u041d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0432 SQL-\u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0420\u043e\u0441\u0442\u0435\u043b\u0435\u043a\u043e\u043c\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u0436\u043e\u0439\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u0440\u0443\u0447\u043a\u0430\u043c\u0438.\" \/>\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\/ro\/blog\/administrirovanie\/kak-perestat-delat-odno-i-to-zhe\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\udd47\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u044b \u043b\u044e\u0431\u0438\u0442\u0435 \u0438\u0437 \u0440\u0430\u0437\u0430 \u0432 \u0440\u0430\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438? \u0412\u043e\u0442 \u0438 \u044f \u043d\u0435\u0442. \u041d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0432 SQL-\u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0420\u043e\u0441\u0442\u0435\u043b\u0435\u043a\u043e\u043c\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u0436\u043e\u0439\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u0440\u0443\u0447\u043a\u0430\u043c\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/kak-perestat-delat-odno-i-to-zhe\" \/>\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-10-31T19:13:50+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:13:50+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\udd47Cum s\u0103 \u00eencetezi s\u0103 faci acela\u0219i lucru | ProHoster","description":"\u00ce\u021bi place s\u0103 repe\u021bi din nou \u0219i din nou opera\u021biuni rutiniere? A\u0219a c\u0103 nici eu nu le agreez. Dar de fiecare dat\u0103, \u00een clientul SQL, c\u00e2nd lucram cu depozitul Rostelecom, trebuia s\u0103 scriu manual toate join-urile \u00eentre tabele.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/kak-perestat-delat-odno-i-to-zhe","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\udd47\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 | ProHoster","og:description":"\u0412\u044b \u043b\u044e\u0431\u0438\u0442\u0435 \u0438\u0437 \u0440\u0430\u0437\u0430 \u0432 \u0440\u0430\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438? \u0412\u043e\u0442 \u0438 \u044f \u043d\u0435\u0442. \u041d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0432 SQL-\u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0420\u043e\u0441\u0442\u0435\u043b\u0435\u043a\u043e\u043c\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u0436\u043e\u0439\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u0440\u0443\u0447\u043a\u0430\u043c\u0438.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/kak-perestat-delat-odno-i-to-zhe","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-10-31T19:13:50+00:00","article:modified_time":"2019-10-31T19:13:50+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36795","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-22 04:53:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:38:24","updated":"2026-01-22 04:53:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/36795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=36795"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/36795\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/27562"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=36795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=36795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=36795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}