Web Hosting

Web Hosting adalah resource yang mengunggah situs web statis yang sudah Anda build ke sebuah Space dan menyajikannya pada alamat {subdomain}.weegloo.app. Sebagai contoh toko pakaian online, menayangkan situs toko yang sudah di-build pada dailywear-shop.weegloo.app adalah satu Web Hosting.

Urutan pengunggahannya adalah sebagai berikut. Pertama, paketkan hasil build menjadi ZIP atau tar.gz, unggah lewat Upload API, dan terima satu Upload. Lalu rujuk Upload itu dan buat Web Hosting dengan POST /web-hostings. Ketika sistem memproses file yang diunggah dan sys.state menjadi COMPLETED, Anda dapat mengakses situs melalui url. Di CMA, Web Hosting adalah resource turunan dari Space, dengan path yang berdasarkan /spaces/{spaceId}/web-hostings.

Struktur resource

Berikut adalah respons pengambilan tunggal Web Hosting "Situs toko DailyWear" yang sudah selesai diproses. Bersama dengan sys (properti sistem), resource ini memiliki properti badan (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": "Situs toko DailyWear",
  "description": "Situs statis untuk toko pakaian dan aksesori",
  "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"
      }
    }
  ]
}

Key utama:

  • subdomain: subdomain tempat situs akan disajikan. Pada contoh di atas adalah dailywear-shop, dan alamat akhirnya menjadi dailywear-shop.weegloo.app.
  • url: alamat situs yang dapat diakses setelah pemrosesan selesai.
  • isSpa: apakah situs merupakan aplikasi satu halaman (SPA). Jika true, semua permintaan path diarahkan ke index.html.
  • state: status pemrosesan deployment dari file yang diunggah. Dijelaskan di bawah pada Properti sistem (sys).
  • pageMetas: Nilai tag meta yang ditimpa per dokumen. sys.originMetas menyimpan nilai sebagaimana adanya sebelum ditimpa. Keduanya dijelaskan di Metadata per dokumen di bawah.

Properti sistem (sys)

Setiap Web Hosting menyimpan properti sistem bersama dalam objek sys. space, createdBy, dan updatedBy masuk dalam bentuk Refer ({ "sys": { "id", "type": "Refer", "targetType" } }).

PropertiTipeDeskripsi
idstringIdentifier unik resource. Masuk ke {webHostingId} pada path pengambilan tunggal, pengubahan, dan penghapusan.
typestringJenis resource. Web Hosting selalu "WebHosting".
spaceRefer<Space>Space tempat Web Hosting ini berada.
createdByRefer<User>Pengguna yang membuat.
createdAtstring (date-time)Waktu pembuatan.
updatedByRefer<User>Pengguna yang terakhir mengubah.
updatedAtstring (date-time)Waktu pengubahan terakhir.
statestring (enum)Status pemrosesan deployment. Salah satu dari 4 nilai di bawah.
errorstringAlasan kegagalan saat pemrosesan gagal. Kosong jika tidak gagal.
totalFileSizeintegerUkuran total file yang diunggah (byte).
originMetasPageMeta[]Nilai tag meta yang semula dibawa dokumen. Hanya terisi pada Web Hosting yang dibuat lewat pemasangan MarketApp. Dijelaskan di Metadata per dokumen di bawah.
versioninteger (≥1)Versi resource. Naik 1 setiap pembuatan dan pengubahan. Nilai ini harus disertakan sebagai x-weegloo-version pada permintaan pengubahan dan pengubahan sebagian.

state menunjukkan tahap pemrosesan deployment file yang diunggah. Ini bukan status publikasi Content, dan Web Hosting tidak memiliki konsep publikasi maupun pengarsipan. Ketika file diproses dan menjadi COMPLETED, situs dapat diakses melalui url.

stateArti
PENDINGMenunggu untuk diproses.
PROCESSINGSedang diproses.
COMPLETEDPemrosesan selesai. Dapat diakses melalui url.
FAILEDPemrosesan gagal. Alasannya tersimpan di sys.error.

Properti badan

Properti badan dari Web Hosting adalah sebagai berikut.

PropertiTipeDeskripsi
namestring (1~64)Nama Web Hosting. Wajib saat pembuatan.
descriptionstring (≤128)Deskripsi. Opsional.
isSpabooleanApakah merupakan aplikasi satu halaman. Jika true, semua permintaan path diarahkan ke index.html (untuk routing SPA). Wajib saat pembuatan.
subdomainstring (3~32)Subdomain layanan. Pola ^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$ (huruf kecil, angka, tanda hubung; awal dan akhir tidak boleh tanda hubung). Wajib saat pembuatan.
uploadRefer<Upload>Referensi yang menunjuk file yang akan diunggah. Berupa ZIP atau tar.gz, dengan index.html di root dan aset yang dirujuk melalui path relatif.
urlstringURL akses setelah pemrosesan selesai. Diisi oleh sistem.
pageMetasPageMeta[]Nilai tag meta yang akan ditimpa per dokumen. Opsional. Dijelaskan di Metadata per dokumen di bawah.
customDomainstringCustom domain yang terhubung. Opsional. Dijelaskan di bawah pada Custom Domain.

Pengecekan subdomain

Sebelum membuat Web Hosting, Anda dapat memeriksa apakah subdomain yang ingin digunakan masih kosong. Berikan subdomain yang akan diperiksa sebagai query subdomain pada GET /web-hostings/availability?subdomain=....

Respons berbentuk seperti berikut, dan jika available bernilai true, subdomain tersebut dapat digunakan.

{ "subdomain": "dailywear-shop", "available": true }

Custom Domain

Alih-alih alamat default {subdomain}.weegloo.app, Anda dapat menghubungkan domain milik sendiri ke Web Hosting. Status domain yang terhubung dinyatakan dengan objek customDomain, dalam bentuk { id, domain, dns, cert }. dns dan cert masing-masing adalah status verifikasi kepemilikan domain (DNS) dan penerbitan sertifikat (cert), keduanya dalam bentuk { status, txtName, txtContent }. txtName dan txtContent adalah nama dan nilai DNS TXT record yang harus didaftarkan di sisi domain.

{
  "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"
  }
}

Setelah mendaftarkan TXT record di sisi domain, picu verifikasi dengan PUT /web-hostings/{webHostingId}/custom-domain/status/verify, dan ambil status saat ini dengan GET /web-hostings/{webHostingId}/custom-domain/status. Setelah verifikasi selesai, dns.status menjadi active dan cert.status menjadi ok. Memanggil pengambilan status pada Web Hosting yang tidak terhubung dengan custom domain akan merespons dengan error (lihat Error).

Metadata per dokumen

Anda dapat menimpa tag meta di <head> setiap dokumen pada situs yang sudah diunggah. Judul, deskripsi, dan gambar yang muncul di hasil pencarian dan di pratinjau tautan messenger berubah menjadi nilai ini. Tujuannya adalah mengubahnya dengan satu permintaan, tanpa membangun ulang dan mengunggah berkas lagi.

Penyuntingan hanya berlaku pada Web Hosting yang dibuat lewat pemasangan MarketApp. Begitu Anda mengganti berkas lewat upload, penyuntingan tidak lagi mungkin dan sys.originMetas ikut dikosongkan. Permintaan yang melanggar syarat ini ditolak (lihat Kesalahan).

Nilai ditaruh di array pageMetas, dan satu entri menargetkan satu dokumen.

PropertiTipeDeskripsi
filestring (1-1024)Jalur relatif dokumen tujuan. Misalnya index.html, about/index.html.
metaWebHostingMetaNilai slot yang diterapkan pada dokumen itu.

sys.originMetas berbentuk sama dan menyimpan nilai yang semula dibawa dokumen sebelum ditimpa. Untuk mengembalikan, kirim lagi nilai tersebut.

Slot

Kunci pada meta disebut slot. Satu slot mengubah beberapa tag sekaligus.

SlotPanjang maksimumTag yang diubah
title200<title>, og:title, twitter:title
description500description, og:description, twitter:description
canonical2048link[rel=canonical], og:url
image2048og:image, twitter:image
siteName200og:site_name
favicon2048link[rel=icon], link[rel="shortcut icon"], link[rel=apple-touch-icon]
themeColor32theme-color

Jika sebuah tag tidak ada di dokumen, tag itu dibuat dan disisipkan. Lima di antaranya pengecualian: twitter:title, twitter:description, twitter:image, link[rel="shortcut icon"], dan link[rel=apple-touch-icon] hanya berubah bila dokumen sudah memilikinya, dan tidak dibuat bila tidak ada.

Apa yang dilakukan tiap nilai

Hasilnya bergantung pada bentuk nilai yang Anda kirim.

Yang Anda taruh di permintaanHasil
Kunci slot tidak adaPengaturan saat ini tetap seperti semula.
Kunci slot bernilai nullPengaturan saat ini tetap seperti semula.
Kunci slot berupa string kosongTag itu dihapus dari dokumen.
Kunci slot berisi nilaiDitimpa dengan nilai tersebut.
Entri sebuah dokumen dihilangkan dari pageMetasPengaturan dokumen itu tetap seperti semula.
pageMetas tidak adaPengaturan semua dokumen tetap seperti semula.

Perhatikan khususnya dua baris terakhir. Server menggabungkan apa yang dikirim per dokumen dan per slot. Karena itu menghilangkan entri dari array tidak menghapus pengaturan; untuk menghapusnya Anda harus menyebutkan string kosong pada slot itu.

String kosong menghapus tag, bukan mengembalikan keadaan semula. Tag yang semula dibawa dokumen ikut hilang. Untuk mengembalikan nilai semula, kirim nilai yang masih tersimpan di sys.originMetas.

Badan permintaan berikut hanya mengubah judul index.html dan menghapus tag deskripsinya.

{
  "pageMetas": [
    {
      "file": "index.html",
      "meta": {
        "title": "DailyWear - pakaian untuk setiap hari",
        "description": ""
      }
    }
  ]
}

Mengubah pageMetas menjalankan kembali pemrosesan yang menerapkan nilai itu ke dokumen sebenarnya. sys.state kembali ke PENDING lalu kembali lagi ke COMPLETED, dan di antaranya perubahan dan penghapusan ditolak.

Error

Berikut adalah kode yang muncul saat Anda menangani Web Hosting. Untuk kode yang berlaku umum pada semua resource, lihat Error umum.

KodeKondisi
WGL422031Anda mencoba mengubah atau menghapus Web Hosting yang sedang memproses file deployment. Coba lagi setelah pemrosesan selesai.
WGL422113pageMetas dikirim ke Web Hosting yang metadata per dokumennya tidak dapat disunting. Entah tidak dibuat lewat pemasangan MarketApp, atau berkasnya sejak itu telah diganti lewat unggahan.
WGL500039Sistem gagal membaca informasi custom domain yang terhubung dari jaringan pengiriman.
WGL429001Pemanggil mencoba memasang custom domain baru pada Web Hosting yang sebelumnya tidak memiliki custom domain, tetapi jumlah custom domain pada Organization sudah mencapai batas paket langganan. Mengganti domain yang sudah ada tidak menambah jumlah custom domain, sehingga penggantian itu tidak menjalani pemeriksaan ini.

API

Base URL untuk semua endpoint di bawah adalah https://cma.weegloo.com/v1, dan header Authorization memerlukan Bearer token yang mengautentikasi ke CMA. Pengubahan dan pengubahan sebagian harus mengirim header X-Weegloo-Version (yaitu sys.version resource saat ini) untuk kontrol konkurensi optimistis. Permintaan pembuatan dan penghapusan tidak menyertakan header ini.

  • Upload API: permintaan untuk mengunggah ZIP file statis dan menerima Upload yang digunakan untuk membuat Web Hosting.
  • Space: Space tempat Web Hosting berada.