{"id":1620,"date":"2026-09-14T10:20:55","date_gmt":"2026-09-14T13:20:55","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/?p=1620"},"modified":"2026-10-07T08:37:50","modified_gmt":"2026-10-07T11:37:50","slug":"api-do-virtualbox-parte-1-soap-sessoes-e-seguranca","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/es\/2026\/09\/api-do-virtualbox-parte-1-soap-sessoes-e-seguranca\/","title":{"rendered":"API de VirtualBox \u2014 parte 1: SOAP, sesiones y seguridad"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/09\/virtualbox-api-soap-sessoes-v1.webp\" alt=\"Mascote LinuxPro explica a comunica\u00e7\u00e3o protegida com m\u00e1quinas virtuais em um painel, acompanhado do cachorro caramelo cyborg e do logo VirtualBox.\" width=\"1486\" height=\"856\" \/><\/p>\n<p>La API de VirtualBox permite integrar el hipervisor en inventarios, herramientas de automatizaci\u00f3n y paneles propios. Antes de escribir c\u00f3digo, conviene comprender el papel del servicio SOAP, c\u00f3mo se identifican los objetos y por qu\u00e9 la autenticaci\u00f3n, las sesiones y la seguridad forman parte de la integraci\u00f3n.<\/p>\n<p>Esta es la <strong>parte 1<\/strong>: los fundamentos de la API, con foco en el acceso remoto mediante el servicio web. En la <a href=\"\/es\/2026\/09\/api-do-virtualbox-em-go-liste-vms-com-soap\/\">parte 2, implementamos un cliente en Go para listar m\u00e1quinas virtuales<\/a>.<\/p>\n<h2>API, VBoxManage y panel web no son lo mismo<\/h2>\n<p>O <code data-no-translation=\"\">VBoxManage<\/code> ofrece administraci\u00f3n mediante l\u00ednea de comandos. El servicio web expone interfaces de VirtualBox mediante SOAP, permitiendo llamadas HTTP con XML estructurado. Un panel como el <a href=\"\/es\/2026\/09\/phpvirtualbox-gerencie-o-virtualbox-pelo-navegador\/\">phpVirtualBox<\/a> se sit\u00faa por encima de esa integraci\u00f3n.<\/p>\n<p>El servicio <code data-no-translation=\"\">vboxwebsrv<\/code> recibe llamadas SOAP. No debe confundirse con una API REST que recibe JSON. Una aplicaci\u00f3n puede ofrecer REST a sus propios consumidores y traducir esas solicitudes en llamadas SOAP en el backend.<\/p>\n<figure><a href=\"\/wp-content\/uploads\/2026\/10\/virtualbox-soap-architecture-refined.webp\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/10\/virtualbox-soap-architecture-refined.webp\" width=\"1200\" height=\"1091\" alt=\"Arquitetura protegida da API SOAP do VirtualBox: cliente, t\u00fanel SSH, vboxwebsrv, API e VMs; distin\u00e7\u00e3o entre UUID, refer\u00eancia SOAP e sess\u00e3o de m\u00e1quina.\" loading=\"lazy\" \/><\/a><figcaption>Diagrama ampliado: transporte protegido, contexto del host y tres conceptos que no deben confundirse. Haz clic para abrir en resoluci\u00f3n completa. El dibujo muestra la opci\u00f3n con t\u00fanel SSH; TLS es una alternativa de transporte.<\/figcaption><\/figure>\n<h2>Tres responsabilidades: transporte, identidad y autorizaci\u00f3n<\/h2>\n<table>\n<thead>\n<tr>\n<th>Pregunta<\/th>\n<th>Capa responsable<\/th>\n<th>Error a evitar<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u00bfEstoy hablando con el servidor correcto sin exponer el tr\u00e1fico?<\/td>\n<td>SSH o TLS con validaci\u00f3n de identidad del host.<\/td>\n<td>Deshabilitar la verificaci\u00f3n de host\/certificado para ocultar un problema.<\/td>\n<\/tr>\n<tr>\n<td>\u00bfQui\u00e9n est\u00e1 llamando al servicio?<\/td>\n<td>Autenticaci\u00f3n del servicio web.<\/td>\n<td>Suponer que el t\u00fanel SSH sustituye al inicio de sesi\u00f3n SOAP.<\/td>\n<\/tr>\n<tr>\n<td>\u00bfQu\u00e9 m\u00e1quinas y acciones puede acceder esta persona?<\/td>\n<td>Pol\u00edtica del entorno y de la aplicaci\u00f3n que expone el acceso.<\/td>\n<td>Otorgar a todos los usuarios del panel los poderes de la cuenta de servicio.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Estas capas se complementan. HTTPS no decide si alguien puede borrar un disco; la autenticaci\u00f3n no cifra el tr\u00e1fico; un bot\u00f3n oculto no impide una llamada indebida al backend. En el panel, defina operaciones expl\u00edcitas y autorice cada una antes de alcanzar el adaptador SOAP.<\/p>\n<h2>El SDK y el contrato WSDL<\/h2>\n<p><strong>Documentaci\u00f3n oficial de la API:<\/strong> consulte la <a href=\"https:\/\/www.virtualbox.org\/sdkref\/index.html\">VirtualBox Main API \u2014 referencia oficial<\/a>. Re\u00fane las interfaces, m\u00e9todos, atributos y tipos utilizados en la integraci\u00f3n. Para implementar el cliente SOAP, consulte tambi\u00e9n el WSDL y la referencia del SDK correspondiente a la versi\u00f3n de su entorno; la documentaci\u00f3n en l\u00ednea puede corresponder a una versi\u00f3n diferente.<\/p>\n<p>El WSDL describe operaciones, par\u00e1metros, espacios de nombres y respuestas del servicio web. Es ese contrato el que gu\u00eda la implementaci\u00f3n del cliente; los nombres de m\u00e9todos y campos no deben deducirse de una API REST imaginada.<\/p>\n<p>Las operaciones y sus par\u00e1metros se han revisado en el WSDL incluido en el <a href=\"https:\/\/download.virtualbox.org\/virtualbox\/7.2.0\/\">SDK oficial 7.2.0<\/a>, utilizado como referencia documental de la l\u00ednea 7.2. Esto no es una recomendaci\u00f3n para instalar un parche antiguo: usa una versi\u00f3n mantenida de VirtualBox y consulta el SDK correspondiente a tu entorno.<\/p>\n<h2>Preparar el servicio con acceso restringido<\/h2>\n<p>Necesitas VirtualBox con <code data-no-translation=\"\">vboxwebsrv<\/code> disponible en el host y autenticaci\u00f3n del servicio configurada. El ejecutable del servicio pertenece al paquete de VirtualBox; descargar solo el SDK no instala el servidor. La <a href=\"https:\/\/download.virtualbox.org\/virtualbox\/7.2.0\/SDKRef.pdf\">referencia oficial del SDK<\/a> describe sus opciones y autenticaci\u00f3n.<\/p>\n<p>En el host de laboratorio, ejec\u00fatalo como el usuario responsable del entorno, no como root. Si el servicio a\u00fan no est\u00e1 activo, un inicio en primer plano y solo en loopback es:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">vboxwebsrv --host 127.0.0.1 --port 18083<\/code><\/pre>\n<p>No deshabilites la autenticaci\u00f3n para que el ejemplo funcione. El usuario y la contrase\u00f1a usados en el inicio de sesi\u00f3n SOAP deben coincidir con el mecanismo de autenticaci\u00f3n configurado en el servicio, que no es necesariamente id\u00e9ntico en todas las instalaciones.<\/p>\n<p>El servicio web utiliza HTTP sin cifrado por defecto y normalmente se vincula al localhost. Para acceso entre m\u00e1quinas, utiliza TLS configurado correctamente o un t\u00fanel protegido; no publiques el puerto directamente en internet. Oracle tambi\u00e9n recomienda ejecutar el servicio como un usuario normal. <a href=\"https:\/\/docs.oracle.com\/en\/virtualization\/virtualbox\/7.2\/user\/Security.html\">Gu\u00eda de seguridad<\/a>.<\/p>\n<p>Una opci\u00f3n de laboratorio es abrir este t\u00fanel en el equipo en el que se ejecutar\u00e1 el cliente:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">ssh -N -o ExitOnForwardFailure=yes \\\n  -L 127.0.0.1:18083:127.0.0.1:18083 usuario@host-virtualbox<\/code><\/pre>\n<p>Sustituye usuario y host. El cliente seguir\u00e1 usando <code data-no-translation=\"\">http:\/\/127.0.0.1:18083\/<\/code>, pero el transporte entre equipos permanecer\u00e1 dentro de SSH. Si el puerto local ya est\u00e1 ocupado, elige otro y aj\u00fastalo <code data-no-translation=\"\">VBOX_URL<\/code>.<\/p>\n<h3>Entiende las dos direcciones de loopback<\/h3>\n<p>En el comando, el primero <code data-no-translation=\"\">127.0.0.1:18083<\/code> limita la escucha al equipo del cliente. El segundo es el destino visto por el servidor SSH, normalmente el propio host de VirtualBox. El reenv\u00edo no debe escuchar en <code data-no-translation=\"\">0.0.0.0<\/code> ni depender de una configuraci\u00f3n global permisiva de SSH.<\/p>\n<p><code data-no-translation=\"\">ExitOnForwardFailure=yes<\/code> hace que SSH finalice si no logra establecer el reenv\u00edo, por ejemplo cuando el puerto local est\u00e1 ocupado. Esto <strong>no comprueba<\/strong> que el servicio en el destino est\u00e9 funcionando: fallos posteriores al conectar en <code data-no-translation=\"\">vboxwebsrv<\/code> a\u00fan deben diagnosticarse. Verifique la identidad SSH del servidor por un canal fiable antes de aceptar su clave. <a href=\"https:\/\/man.openbsd.org\/ssh_config#ExitOnForwardFailure\">Referencia de OpenSSH<\/a>.<\/p>\n<p>En Linux, compruebe la escucha en el host del servicio:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">ss -ltn 'sport = :18083'<\/code><\/pre>\n<p>Para el comando de inicio mostrado, espere <code data-no-translation=\"\">127.0.0.1:18083<\/code>, no una direcci\u00f3n que escuche en todas las interfaces. Un socket abierto es solo evidencia de transporte: no valida credenciales ni llamadas SOAP. Si ya existe una instalaci\u00f3n en funcionamiento, inspecci\u00f3nela antes de iniciar otro proceso en el mismo puerto.<\/p>\n<h3>La cuenta del servicio define el contexto del inventario<\/h3>\n<p>No inicie el proceso con <code data-no-translation=\"\">sudo<\/code> solo porque una lista vino vac\u00eda. El entorno de usuario del servicio determina qu\u00e9 m\u00e1quinas virtuales est\u00e1n registradas y disponibles. Confirme la cuenta responsable, sus permisos y la configuraci\u00f3n de VirtualBox; autenticarse en SOAP no equivale a cambiar libremente el usuario del proceso en el host.<\/p>\n<p>Use una cuenta y m\u00e1quinas de laboratorio para homologaci\u00f3n. No trate loopback como una barrera suficiente contra todos los procesos e invitados del host; mantenga la autenticaci\u00f3n y las restricciones del entorno. El acceso local no significa que todos los posibles llamantes sean de confianza.<\/p>\n<h2>Entender referencias, UUIDs y sesiones<\/h2>\n<p>Una referencia SOAP es un identificador de objeto utilizado por el servicio durante la sesi\u00f3n; no es necesariamente el UUID de la VM. Un flujo de inventario de solo lectura es:<\/p>\n<table>\n<thead>\n<tr>\n<th>Operaci\u00f3n<\/th>\n<th>Uso en el cliente<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code data-no-translation=\"\">IWebsessionManager_logon<\/code><\/td>\n<td>Autenticar y obtener la referencia ra\u00edz.<\/td>\n<\/tr>\n<tr>\n<td><code data-no-translation=\"\">IVirtualBox_getMachines<\/code><\/td>\n<td>Consultar las referencias de las m\u00e1quinas.<\/td>\n<\/tr>\n<tr>\n<td><code data-no-translation=\"\">IMachine_getId<\/code><\/td>\n<td>Obtener el UUID.<\/td>\n<\/tr>\n<tr>\n<td><code data-no-translation=\"\">IMachine_getName<\/code><\/td>\n<td>Obtener el nombre.<\/td>\n<\/tr>\n<tr>\n<td><code data-no-translation=\"\">IMachine_getState<\/code><\/td>\n<td>Obtener el estado.<\/td>\n<\/tr>\n<tr>\n<td><code data-no-translation=\"\">IWebsessionManager_logoff<\/code><\/td>\n<td>Cerrar la sesi\u00f3n.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>No persistas referencias SOAP como si fueran ID permanentes. Para relacionar datos en un inventario, utiliza el UUID devuelto. Para la pr\u00f3xima ejecuci\u00f3n, abre una nueva sesi\u00f3n y obt\u00e9n referencias v\u00e1lidas de nuevo.<\/p>\n<h3>UUID, referencia gestionada y sesi\u00f3n de m\u00e1quina<\/h3>\n<table>\n<thead>\n<tr>\n<th>Concepto<\/th>\n<th>Funci\u00f3n<\/th>\n<th>C\u00f3mo usar<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>UUID de la m\u00e1quina virtual<\/td>\n<td>Identificar la m\u00e1quina en el inventario.<\/td>\n<td>\u00daselo como clave, no como el nombre mostrado; no asuma identidad preservada al clonar\/recrear.<\/td>\n<\/tr>\n<tr>\n<td>Referencia SOAP<\/td>\n<td>Apuntar a un objeto remoto v\u00e1lido en el contexto del servicio.<\/td>\n<td>No lo env\u00ede al navegador, no lo use como secreto permanente ni lo reutilice entre inicios de sesi\u00f3n.<\/td>\n<\/tr>\n<tr>\n<td>Websession<\/td>\n<td>Contexto creado por el inicio de sesi\u00f3n SOAP.<\/td>\n<td>Cierre la sesi\u00f3n y gestione la expiraci\u00f3n, los fallos de red y la reconexi\u00f3n.<\/td>\n<\/tr>\n<tr>\n<td><code data-no-translation=\"\">ISession<\/code><\/td>\n<td>Participe en el control de acceso\/bloqueo de una m\u00e1quina.<\/td>\n<td>Siga el ciclo exigido por la operaci\u00f3n; no lo confunda con la websession.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>La documentaci\u00f3n de <a href=\"https:\/\/www.virtualbox.org\/sdkref\/interface_i_websession_manager.html\">IWebsessionManager<\/a> describe el inicio de sesi\u00f3n, la obtenci\u00f3n de un objeto de sesi\u00f3n y el cierre de sesi\u00f3n. El cierre de sesi\u00f3n elimina los recursos asociados a la websession. Por su parte, <a href=\"https:\/\/www.virtualbox.org\/sdkref\/interface_i_session.html\">ISession<\/a> tiene reglas espec\u00edficas de bloqueo y liberaci\u00f3n: cuando la operaci\u00f3n adquiera un bloqueo que lo requiera <code data-no-translation=\"\">unlockMachine<\/code>, debe liberarse expl\u00edcitamente. No use cerrar la websession como sustituto gen\u00e9rico de ese ciclo.<\/p>\n<h3>La limpieza es un intento controlado, no una garant\u00eda de red<\/h3>\n<p>Registre la limpieza en cuanto reciba una referencia v\u00e1lida. Utilice un plazo corto independiente del contexto principal para que cancelar la recolecci\u00f3n no impida inmediatamente el cierre de sesi\u00f3n. Si el inicio de sesi\u00f3n ha sido aceptado pero su respuesta se pierde, es posible que el cliente ni siquiera conozca la referencia necesaria para limpiar; la expiraci\u00f3n de sesiones del servidor sigue siendo necesaria.<\/p>\n<p>El inventario tampoco es una fotograf\u00eda at\u00f3mica: el estado y la configuraci\u00f3n pueden cambiar entre llamadas. Una respuesta vac\u00eda, un fallo SOAP y una referencia caducada son resultados diferentes y deben aparecer de forma diferente en el cliente.<\/p>\n<h2>\u00bfY para iniciar VMs, crear instant\u00e1neas o cambiar la configuraci\u00f3n?<\/h2>\n<p>Este es el siguiente nivel de integraci\u00f3n, no un simple cambio del nombre del m\u00e9todo. Las operaciones de escritura deben respetar estados, bloqueos, sesiones de m\u00e1quina y seguimiento de progreso definidos por la API. El inicio de sesi\u00f3n del servicio web y una sesi\u00f3n utilizada para bloquear una m\u00e1quina no deben tratarse como el mismo concepto.<\/p>\n<p>Mi recomendaci\u00f3n es implementar cada operaci\u00f3n por separado, con autorizaci\u00f3n, confirmaci\u00f3n cuando sea destructiva, pruebas y reconciliaci\u00f3n tras un fallo. Una cuenta capaz de consultar tambi\u00e9n puede tener otros poderes en el servidor; el hecho de que un cliente solo consulte no reduce los privilegios de la credencial.<\/p>\n<p>Para un panel con Echo y Vue, mantenga este adaptador separado de los handlers HTTP. No permita que el navegador elija libremente endpoint, m\u00e9todo SOAP y argumentos. Defina servicios expl\u00edcitos, como listar m\u00e1quinas, y controle destinos y permisos en el backend.<\/p>\n<h2>Operaciones largas: sigue el resultado, no solo el HTTP<\/h2>\n<p>Una respuesta HTTP de \u00e9xito no prueba que una tarea larga haya terminado. Cuando la operaci\u00f3n devuelva <code data-no-translation=\"\">IProgress<\/code>, realice un seguimiento de su finalizaci\u00f3n y del resultado documentado, incluida la informaci\u00f3n de error cuando proceda. No toda operaci\u00f3n devuelve este objeto: consulte el contrato del m\u00e9todo. <a href=\"https:\/\/www.virtualbox.org\/sdkref\/interface_i_progress.html\">Referencia de IProgress<\/a>.<\/p>\n<p>Si la conexi\u00f3n se cae despu\u00e9s del env\u00edo, el resultado puede ser desconocido. Consulte el estado real antes de reenviar: el tiempo de espera del cliente no cancela autom\u00e1ticamente la acci\u00f3n en el hipervisor. Diferencie en el panel \u201cfall\u00f3\u201d, \u201cen curso\u201d y \u201cresultado pendiente de confirmar\u201d. Esta es una de las razones para empezar por el inventario, no por operaciones destructivas.<\/p>\n<h2>Diagn\u00f3stico por capa<\/h2>\n<table>\n<thead>\n<tr>\n<th>S\u00edntoma<\/th>\n<th>Investigue primero<\/th>\n<th>No haga<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Conexi\u00f3n rechazada<\/td>\n<td>Proceso, direcci\u00f3n de escucha, puerto y t\u00fanel.<\/td>\n<td>Abrir el servicio a toda la red como intento aleatorio.<\/td>\n<\/tr>\n<tr>\n<td>XML inesperado o p\u00e1gina HTML<\/td>\n<td>URL e intermediarios; un inicio de sesi\u00f3n de proxy no es una respuesta SOAP.<\/td>\n<td>Tratar cualquier HTTP 200 como \u00e9xito de la operaci\u00f3n.<\/td>\n<\/tr>\n<tr>\n<td>Fallo en el inicio de sesi\u00f3n<\/td>\n<td>Mecanismo de autenticaci\u00f3n y credenciales del laboratorio.<\/td>\n<td>Deshabilitar la autenticaci\u00f3n.<\/td>\n<\/tr>\n<tr>\n<td>Lista vac\u00eda<\/td>\n<td>Registro de las m\u00e1quinas virtuales en el contexto del usuario del servicio.<\/td>\n<td>Volver a ejecutar como root sin entender el entorno.<\/td>\n<\/tr>\n<tr>\n<td>Referencia no v\u00e1lida<\/td>\n<td>Caducidad, cierre de sesi\u00f3n anterior y reutilizaci\u00f3n entre sesiones.<\/td>\n<td>Persistir la referencia e intentar usarla indefinidamente.<\/td>\n<\/tr>\n<tr>\n<td>Operaci\u00f3n sin resultado<\/td>\n<td>Estado real, progreso y registros saneados.<\/td>\n<td>Repetir la escritura autom\u00e1ticamente.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Checklist antes de conectar un panel o agente<\/h2>\n<ul>\n<li>Contrato WSDL\/SDK compatible registrado y operaciones permitidas expl\u00edcitas.<\/li>\n<li>Servicio bajo usuario com\u00fan, con autenticaci\u00f3n activa y acceso de red restringido.<\/li>\n<li>Transporte protegido entre m\u00e1quinas e identidad del servidor validada.<\/li>\n<li>Credenciales fuera del navegador, de los commits y de prompts enviados a agentes.<\/li>\n<li>L\u00edmites de respuesta, plazos y tratamiento separado de HTTP, XML y SOAP Fault.<\/li>\n<li>Limpieza y reconexi\u00f3n probadas sin reutilizar referencias caducadas.<\/li>\n<li>Autorizaci\u00f3n por destino y acci\u00f3n, antes de liberar cualquier escritura.<\/li>\n<li>Pruebas con servidor simulado separadas de la homologaci\u00f3n en host real.<\/li>\n<\/ul>\n<p><strong>Alcance de esta revisi\u00f3n:<\/strong> documentaci\u00f3n y opciones locales de <code data-no-translation=\"\">vboxwebsrv --help<\/code> verificadas; no iniciamos el servicio ni realizamos inicio de sesi\u00f3n SOAP en host real. En la parte 2, las pruebas automatizadas del cliente se describen con sus limitaciones. Para transformar la integraci\u00f3n en un panel, vea tambi\u00e9n la <a href=\"\/es\/2026\/09\/phpvirtualbox-em-go-parte-1-echo-vue-e-binario-unico\/\">arquitectura propuesta con Go, Echo y Vue<\/a>.<\/p>\n<h2>De la teor\u00eda a una integraci\u00f3n verificable<\/h2>\n<p>Comience con una operaci\u00f3n peque\u00f1a: autenticar, obtener las m\u00e1quinas, consultar sus atributos y cerrar la sesi\u00f3n. Valide el contrato, gestione los fallos SOAP y evite registrar credenciales. Solo despu\u00e9s a\u00f1ada comandos que modifiquen el estado de las VMs.<\/p>\n<p>En la <a href=\"\/es\/2026\/09\/api-do-virtualbox-em-go-liste-vms-com-soap\/\">parte 2: API de VirtualBox en Go<\/a>, encontrar\u00e1s los archivos completos del cliente, la salida JSON, los timeouts y las pruebas automatizadas. Para conocer un panel que utiliza esta integraci\u00f3n, consulta tambi\u00e9n el <a href=\"\/es\/2026\/09\/phpvirtualbox-gerencie-o-virtualbox-pelo-navegador\/\">art\u00edculo sobre phpVirtualBox<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Entiende el servicio web de VirtualBox: contrato WSDL, autenticaci\u00f3n, referencias a objetos, sesiones y seguridad antes de implementar un cliente.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[45,2,120],"tags":[31],"class_list":["post-1620","post","type-post","status-publish","format-standard","hentry","category-desenv","category-linux","category-servidores","tag-golang"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/1620","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/comments?post=1620"}],"version-history":[{"count":4,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/1620\/revisions"}],"predecessor-version":[{"id":1835,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/1620\/revisions\/1835"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/media?parent=1620"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/categories?post=1620"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/tags?post=1620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}