{"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\/es\/blog\/administrirovanie\/kak-perestat-delat-odno-i-to-zhe","title":{"rendered":"C\u00f3mo dejar de hacer lo mismo una y otra vez","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00bfTe gusta repetir operaciones rutinarias una y otra vez? A m\u00ed no. Pero cada vez que trabajaba con el almac\u00e9n de Rostelecom en el cliente SQL, ten\u00eda que escribir todas las uniones entre las tablas manualmente. Y eso a pesar de que en el 90% de los casos, los campos y condiciones de uni\u00f3n de las tablas coincid\u00edan de consulta a consulta. Se podr\u00eda pensar que cualquier cliente SQL tiene funciones de autocompletado, pero para los almacenes no siempre funciona: rara vez se establecen constraints \u00fanicos y claves for\u00e1neas para mejorar el rendimiento, y sin ello, el programa no puede saber c\u00f3mo se relacionan las entidades entre s\u00ed y qu\u00e9 puede ofrecerte.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/rostelecom\/blog\/462021\/\"><img decoding=\"async\" alt=\"C\u00f3mo dejar de hacer lo mismo una y otra vez\" src=\"\/wp-content\/uploads\/2019\/08\/998faa579fa9772fa4509980be551be3.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Despu\u00e9s de pasar por la negaci\u00f3n, la ira, la negociaci\u00f3n, la depresi\u00f3n y acerc\u00e1ndome a la aceptaci\u00f3n, decid\u00ed: \u00bfpor qu\u00e9 no intentar implementar el autocompletado por mi cuenta con blackjack y lo que haga falta? Uso el cliente dbeaver, escrito en Java, y tiene una versi\u00f3n comunitaria de c\u00f3digo abierto. Se me ocurri\u00f3 un plan sencillo:<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<ol>\n<li>Encontrar en el c\u00f3digo fuente las clases responsables del autocompletado<\/li>\n<li>Reorientarlas para trabajar con metadatos externos y obtener de ah\u00ed informaci\u00f3n sobre las uniones<\/li>\n<li>??????<\/li>\n<li>PROFITS<\/li>\n<\/ol>\n<p>\nMe familiaric\u00e9 bastante r\u00e1pido con el primer punto: encontr\u00e9 en el rastreador de errores una solicitud para corregir el autocompletado y en el commit relacionado <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dbeaver\/dbeaver\/commit\/4f7652c1d11f21d29cf734155b133e9a426c727f\">encontr\u00e9 la clase SQLCompletionAnalyzer. Mir\u00e9 el c\u00f3digo: era justo lo que necesitaba. Solo quedaba reescribirlo para que todo funcionara. Esper\u00e9 a tener una tarde libre y comenc\u00e9 a pensar en la implementaci\u00f3n. Decid\u00ed mantener las reglas de relaciones de las tablas (metadatos) en formato json. No ten\u00eda experiencia pr\u00e1ctica trabajando con este formato y la tarea actual parec\u00eda una oportunidad para corregir esta falta.<\/a><\/noindex> Para trabajar con json decid\u00ed usar la biblioteca <\/p>\n<p>json-simple <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fangyidong\/json-simple\">de Google. Aqu\u00ed empezaron las sorpresas. Como result\u00f3, dbeaver, como una verdadera aplicaci\u00f3n, est\u00e1 escrita sobre la plataforma Eclipse utilizando el marco OSGi. Para los desarrolladores experimentados, esta cosa proporciona comodidad en la gesti\u00f3n de dependencias, pero para m\u00ed se asemejaba m\u00e1s a magia oscura, para la cual claramente no estaba preparado: como de costumbre, importaba las clases necesarias de la biblioteca json-simple en la parte superior de la clase que estaba editando, la indicaba en pom.xml, despu\u00e9s de lo cual el proyecto se negaba rotundamente a compilarse correctamente y ca\u00eda con errores.<\/a><\/noindex> de Google. Aqu\u00ed comenzaron las sorpresas. Resulta que DBeaver, como aplicaci\u00f3n leg\u00edtima, est\u00e1 escrito en la plataforma Eclipse utilizando el marco OSGi. Para los desarrolladores experimentados, esta herramienta ofrece conveniencia en la gesti\u00f3n de dependencias, pero para m\u00ed se parec\u00eda m\u00e1s a magia oscura, para la cual claramente no estaba preparado: como de costumbre, escribo la importaci\u00f3n de las clases que necesito de la biblioteca json-simple en la parte superior de la clase que estoy editando, la indico en pom.xml, despu\u00e9s de lo cual el proyecto se niega categ\u00f3ricamente a compilarse normalmente y se cae con errores. <\/p>\n<p>Corregir los errores de compilaci\u00f3n result\u00f3 ser: la biblioteca no la escrib\u00ed en pom.xml, sino en el manifiesto manifest.mf, como exige OSGI, especific\u00e1ndola como import-package. No es la soluci\u00f3n m\u00e1s elegante, pero funciona. Aqu\u00ed apareci\u00f3 la siguiente sorpresa. Si est\u00e1s desarrollando en IntelliJ IDEA, no puedes simplemente ejecutar el depurador de tu proyecto, basado en la plataforma Eclipse: un desarrollador inexperto debe sufrir tanto como un analista sin autocompletado de consultas. Los propios desarrolladores de Beaver vinieron al rescate, indicando en la wiki todos los pasos necesarios. Lo m\u00e1s frustrante es que, incluso despu\u00e9s de todos estos tr\u00e1mites, el proyecto no quer\u00eda ejecutarse en modo depuraci\u00f3n con la biblioteca JSON conectada a trav\u00e9s de import-package (aunque a\u00fan se compilaba con \u00e9xito en el producto final). <\/p>\n<p>Para entonces, ya hab\u00eda sentido la incomodidad de usar JSON para mi tarea; despu\u00e9s de todo, se supon\u00eda que los metadatos deb\u00edan editarse manualmente, y para eso el formato XML se adapta mejor. Un segundo argumento a favor de XML fue que en la JDK estaban todas las clases necesarias, lo que permiti\u00f3 dejar de luchar con una biblioteca externa. Con gran placer, traslad\u00e9 todos los metadatos de JSON a XML y comenc\u00e9 a realizar ajustes en la l\u00f3gica del autocompletado. <\/p>\n<p><b class=\"spoiler_title\">Ejemplo de metadatos<\/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>Como resultado, yo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/v9854268996\/dbeaver\">realic\u00e9 cambios<\/a><\/noindex> en las clases SQLUtils y SQLCompletionAnalyzer. La idea es la siguiente: si el programa no pudo encontrar propuestas adecuadas de autocompletado seg\u00fan la l\u00f3gica b\u00e1sica, verifica la existencia de posibles joins a trav\u00e9s de un archivo XML externo. En el propio archivo se almacenan pares de tablas con la indicaci\u00f3n de los campos por los cuales se deben vincular dichas tablas. Las restricciones sobre las fechas t\u00e9cnicas de acci\u00f3n de los registros eff_dttm y exp_dttm y la bandera de eliminaci\u00f3n l\u00f3gica deleted_ind se establecen por defecto.<\/p>\n<p>Una vez realizadas las modificaciones en el c\u00f3digo, surgi\u00f3 la pregunta: \u00bfqui\u00e9n se encargar\u00e1 de llenar el archivo de metadatos? Hay muchas entidades en el almac\u00e9n, y se vuelve engorroso definir todas las relaciones uno mismo. Al final, decid\u00ed asignar esta tarea a mis colegas analistas. Sub\u00ed el archivo de metadatos a svn, desde donde se hace el checkout en el directorio local con el programa. El principio es el siguiente: \u00bfha aparecido una nueva entidad en el almac\u00e9n? Un analista agrega los posibles joins al archivo, hace commit de los cambios, y los dem\u00e1s hacen checkout en sus propios sistemas y disfrutan de la autocompletaci\u00f3n: comunidad, acumulaci\u00f3n de conocimiento y todo eso. Organic\u00e9 un taller para mis colegas sobre el uso del programa y escrib\u00ed un art\u00edculo en Confluence; ahora en la empresa hay una herramienta m\u00e1s conveniente.<\/p>\n<p>El trabajo en esta funci\u00f3n me dio la comprensi\u00f3n de que no hay que temer hurgar en proyectos de c\u00f3digo abierto; por lo general, tienen una arquitectura clara, y hasta unos conocimientos b\u00e1sicos del lenguaje son suficientes para experimentar. Y con una buena dosis de perseverancia, incluso se puede deshacerse de esas tediosas operaciones rutinarias, ahorrando tiempo para nuevos experimentos.<br \/>\n<br \/>Fuente: <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 - 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\/es\/blog\/administrirovanie\/kak-perestat-delat-odno-i-to-zhe\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47C\u00f3mo dejar de hacer lo mismo una y otra vez | ProHoster","description":"\u00bfTe gusta repetir operaciones rutinarias una y otra vez? A m\u00ed tampoco. Pero cada vez que trabajaba con el almac\u00e9n de Rostelecom en el cliente SQL, ten\u00eda que definir manualmente todos los joins entre las tablas.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kak-perestat-delat-odno-i-to-zhe","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/36795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=36795"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/36795\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/27562"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=36795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=36795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=36795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}