Web Hosting
Web Hosting es el recurso que sube un sitio web estático ya compilado a un Space y lo sirve en la dirección {subdomain}.weegloo.app. Tomando como ejemplo una tienda de ropa online, publicar el sitio compilado de la tienda en dailywear-shop.weegloo.app constituye un Web Hosting.
El orden para subirlo es el siguiente. Primero se empaqueta el resultado de la compilación en ZIP o tar.gz y se sube mediante la Upload API para obtener un Upload. Después se crea un Web Hosting con POST /web-hostings referenciando ese Upload. Cuando el sistema procesa los archivos subidos y sys.state pasa a COMPLETED, se puede acceder al sitio a través de url. En la CMA, Web Hosting es un recurso subordinado del Space y su ruta se basa en /spaces/{spaceId}/web-hostings.
Estructura del recurso
A continuación se muestra la respuesta de consulta individual del Web Hosting "Sitio de la tienda DailyWear" ya procesado. Junto con sys (propiedades del sistema), tiene propiedades de cuerpo (name, description, isSpa, subdomain, url, pageMetas).
{
"sys": {
"id": "3trmXRM3RqbgSnifyg7PWeb01Examp",
"type": "WebHosting",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
"updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
"createdAt": "2026-06-18T11:40:00.000Z",
"updatedAt": "2026-06-18T11:40:05.000Z",
"state": "COMPLETED",
"totalFileSize": 245786,
"originMetas": [
{
"file": "index.html",
"meta": {
"title": "Daily Wear Store",
"description": "Everyday clothing store"
}
}
],
"version": 3
},
"name": "Sitio de la tienda DailyWear",
"description": "Sitio estático de la tienda de ropa y accesorios",
"isSpa": true,
"subdomain": "dailywear-shop",
"url": "https://dailywear-shop.weegloo.app",
"pageMetas": [
{
"file": "index.html",
"meta": {
"title": "DailyWear - clothes for every day",
"description": "Everyday pieces you can wear to work and on weekends.",
"image": "https://dailywear-shop.weegloo.app/og-cover.png"
}
}
]
}Claves principales:
subdomain: el subdominio en el que se servirá el sitio. En el ejemplo anterior esdailywear-shop, y la dirección final serádailywear-shop.weegloo.app.url: la dirección del sitio a la que se puede acceder una vez finalizado el procesamiento.isSpa: indica si es una aplicación de página única (SPA). Si estrue, todas las solicitudes de ruta se redirigen aindex.html.state: el estado de procesamiento del despliegue de los archivos subidos. Se explica más abajo en Propiedades del sistema (sys).pageMetas: los valores de las etiquetas meta sobrescritos por documento.sys.originMetasguarda los valores tal como estaban antes de sobrescribirlos. Ambos se explican en Metadatos por documento, más abajo.
Propiedades del sistema (sys)
Todo Web Hosting incluye las propiedades del sistema comunes en el objeto sys. space, createdBy y updatedBy se incluyen con la forma Refer ({ "sys": { "id", "type": "Refer", "targetType" } }).
| Propiedad | Tipo | Descripción |
|---|---|---|
id | string | Identificador único del recurso. Se incluye en {webHostingId} de las rutas de consulta individual, modificación y eliminación. |
type | string | Tipo de recurso. Para Web Hosting siempre es "WebHosting". |
space | Refer<Space> | El Space al que pertenece este Web Hosting. |
createdBy | Refer<User> | El usuario que lo creó. |
createdAt | string (date-time) | Fecha y hora de creación. |
updatedBy | Refer<User> | El último usuario que lo modificó. |
updatedAt | string (date-time) | Fecha y hora de la última modificación. |
state | string (enum) | Estado de procesamiento del despliegue. Uno de los 4 siguientes. |
error | string | El motivo en caso de fallo de procesamiento. Si no hay fallo, está vacío. |
totalFileSize | integer | Tamaño total de los archivos subidos (en bytes). |
originMetas | PageMeta[] | Los valores de las etiquetas meta que los documentos traían originalmente. Solo se rellena en un Web Hosting creado al instalar una MarketApp. Se explica en Metadatos por documento, más abajo. |
version | integer (≥1) | Versión del recurso. Aumenta en 1 con cada creación o modificación. Es el valor que debe enviarse como x-weegloo-version en las solicitudes de modificación y modificación parcial. |
state indica la fase de procesamiento del despliegue de los archivos subidos. No es el estado de publicación de un Content; Web Hosting no tiene el concepto de publicación ni de archivado. Cuando los archivos se procesan y el estado pasa a COMPLETED, se accede al sitio a través de url.
state | Significado |
|---|---|
PENDING | En espera de procesamiento. |
PROCESSING | En procesamiento. |
COMPLETED | Procesamiento completado. Accesible a través de url. |
FAILED | Fallo de procesamiento. El motivo se incluye en sys.error. |
Propiedades del cuerpo
Las propiedades del cuerpo de Web Hosting son las siguientes.
| Propiedad | Tipo | Descripción |
|---|---|---|
name | string (1~64) | Nombre del Web Hosting. Obligatorio al crear. |
description | string (≤128) | Descripción. Opcional. |
isSpa | boolean | Indica si es una aplicación de página única. Si es true, todas las solicitudes de ruta se redirigen a index.html (para enrutamiento SPA). Obligatorio al crear. |
subdomain | string (3~32) | Subdominio del servicio. Patrón ^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$ (minúsculas, números y guiones; el primer y último carácter no pueden ser guion). Obligatorio al crear. |
upload | Refer<Upload> | Referencia que apunta a los archivos a subir. Es un ZIP o tar.gz que debe contener index.html en la raíz y referenciar los recursos mediante rutas relativas. |
url | string | URL de acceso tras finalizar el procesamiento. La rellena el sistema. |
pageMetas | PageMeta[] | Los valores de las etiquetas meta que se sobrescribirán por documento. Opcional. Se explica en Metadatos por documento, más abajo. |
customDomain | string | Dominio personalizado vinculado. Opcional. Se explica más abajo en Dominio personalizado. |
Comprobación del subdominio
Antes de crear un Web Hosting se puede comprobar si el subdominio que se quiere usar está disponible. Basta con pasar el subdominio a comprobar como parámetro de consulta subdomain en GET /web-hostings/availability?subdomain=....
La respuesta tiene la siguiente forma; si available es true, ese subdominio se puede usar.
{ "subdomain": "dailywear-shop", "available": true }Dominio personalizado
En lugar de la dirección por defecto {subdomain}.weegloo.app, se puede vincular a un Web Hosting un dominio propio. El estado del dominio vinculado se representa con el objeto customDomain, con la forma { id, domain, dns, cert }. dns y cert son, respectivamente, el estado de la verificación de propiedad del dominio (DNS) y el de la emisión del certificado (cert), y ambos tienen la forma { status, txtName, txtContent }. txtName y txtContent son el nombre y el valor del registro DNS TXT que hay que dar de alta en el lado del dominio.
{
"id": 1024,
"domain": "shop.dailywear.example",
"dns": {
"status": "pending",
"txtName": "_weegloo.shop.dailywear.example",
"txtContent": "weegloo-verify=3trmXRM3RqbgSnifyg7PWebVerifyEx"
},
"cert": {
"status": "pending",
"txtName": "_acme-challenge.shop.dailywear.example",
"txtContent": "acme-verify=3trmXRM3RqbgSnifyg7PWebCertEx"
}
}Tras dar de alta el registro TXT en el lado del dominio, se activa la verificación con PUT /web-hostings/{webHostingId}/custom-domain/status/verify y se consulta el estado actual con GET /web-hostings/{webHostingId}/custom-domain/status. Cuando finaliza la verificación, dns.status pasa a active y cert.status pasa a ok. Si se llama a la consulta de estado en un Web Hosting que no tiene un dominio personalizado vinculado, responde con un error (consulte Errores).
Metadatos por documento
Puede sobrescribir las etiquetas meta del <head> de cada documento de un sitio que haya publicado. El título, la descripción y la imagen que aparecen en los resultados de búsqueda y en las vistas previas de enlaces de los mensajeros cambian a estos valores. La finalidad es cambiarlos con una sola petición en lugar de volver a compilar y subir los archivos.
La edición solo funciona en un Web Hosting creado al instalar una MarketApp. En cuanto reemplace los archivos mediante upload, la edición deja de ser posible y sys.originMetas se vacía con ello. Una petición que incumpla la condición se rechaza (consulte Errores).
Los valores van en el array pageMetas, y cada entrada apunta a un documento.
| Propiedad | Tipo | Descripción |
|---|---|---|
file | string (1-1024) | La ruta relativa del documento de destino. Por ejemplo index.html, about/index.html. |
meta | WebHostingMeta | Los valores de ranura que se aplican a ese documento. |
sys.originMetas tiene la misma forma y guarda los valores que los documentos traían antes de sobrescribirlos. Para revertir, envíe de nuevo esos valores.
Ranuras
Las claves de meta se llaman ranuras. Una ranura cambia varias etiquetas a la vez.
| Ranura | Longitud máxima | Etiquetas que cambia |
|---|---|---|
title | 200 | <title>, og:title, twitter:title |
description | 500 | description, og:description, twitter:description |
canonical | 2048 | link[rel=canonical], og:url |
image | 2048 | og:image, twitter:image |
siteName | 200 | og:site_name |
favicon | 2048 | link[rel=icon], link[rel="shortcut icon"], link[rel=apple-touch-icon] |
themeColor | 32 | theme-color |
Si una etiqueta no está en el documento, se crea y se inserta. Cinco son la excepción: twitter:title, twitter:description, twitter:image, link[rel="shortcut icon"] y link[rel=apple-touch-icon] solo cambian cuando el documento ya las tiene, y no se crean cuando no las tiene.
Qué hace cada valor
El resultado depende de la forma del valor que envíe.
| Lo que pone en la petición | Resultado |
|---|---|
| La clave de la ranura no está | El ajuste actual se mantiene. |
La clave de la ranura es null | El ajuste actual se mantiene. |
| La clave de la ranura es una cadena vacía | Esa etiqueta se elimina del documento. |
| La clave de la ranura tiene un valor | Se sobrescribe con ese valor. |
Se omite la entrada de un documento en pageMetas | El ajuste de ese documento se mantiene. |
pageMetas no está | Los ajustes de todos los documentos se mantienen. |
Preste especial atención a las dos últimas filas. El servidor fusiona lo enviado por documento y por ranura. Por eso omitir una entrada del array no borra un ajuste; para borrarlo debe indicar una cadena vacía en esa ranura.
Una cadena vacía elimina la etiqueta en lugar de restaurar el estado original. Una etiqueta que el documento traía desaparece con ella. Para restaurar el valor original, envíe el valor que sigue guardado en sys.originMetas.
El siguiente cuerpo de petición cambia solo el título de index.html y elimina su etiqueta de descripción.
{
"pageMetas": [
{
"file": "index.html",
"meta": {
"title": "DailyWear - ropa para cada día",
"description": ""
}
}
]
}Al cambiar pageMetas arranca el procesamiento que aplica esos valores a los documentos reales. sys.state vuelve a PENDING y después regresa a COMPLETED, y entretanto las modificaciones y los borrados se rechazan.
Errores
Códigos que se encuentran al trabajar con Web Hosting. Para los códigos comunes a todos los recursos, consulte Errores comunes.
| Código | Condición |
|---|---|
WGL422031 | La petición intenta modificar o eliminar un Web Hosting mientras se están procesando los archivos de despliegue. Vuelva a intentarlo cuando haya terminado el procesamiento. |
WGL422113 | Se envió pageMetas a un Web Hosting cuyos metadatos por documento no se pueden editar. O no se creó al instalar una MarketApp, o sus archivos se han reemplazado desde entonces mediante una subida. |
WGL500039 | El servidor no ha podido leer desde la red de entrega la información del dominio personalizado vinculado. |
WGL429001 | La petición intenta vincular un dominio personalizado a un Web Hosting que aún no tenía ninguno, y el número de dominios personalizados de la Organization ya ha alcanzado el límite del plan. Cambiar un dominio ya existente no aumenta ese número, por lo que no pasa por esta comprobación. |
API
La URL base de todos los endpoints siguientes es https://cma.weegloo.com/v1, y se requiere un token Bearer que autentique en la CMA en la cabecera Authorization. Las modificaciones y modificaciones parciales deben enviar también la cabecera X-Weegloo-Version (el sys.version del recurso actual) para el control de concurrencia optimista. Las solicitudes de creación y eliminación no llevan esta cabecera.
Documentos relacionados
- Upload API: la solicitud para subir el ZIP de archivos estáticos y obtener el Upload que se usa al crear un Web Hosting.
- Space: el Space al que pertenece el Web Hosting.
