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 adalahdailywear-shop, dan alamat akhirnya menjadidailywear-shop.weegloo.app.url: alamat situs yang dapat diakses setelah pemrosesan selesai.isSpa: apakah situs merupakan aplikasi satu halaman (SPA). Jikatrue, semua permintaan path diarahkan keindex.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.originMetasmenyimpan 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" } }).
| Properti | Tipe | Deskripsi |
|---|---|---|
id | string | Identifier unik resource. Masuk ke {webHostingId} pada path pengambilan tunggal, pengubahan, dan penghapusan. |
type | string | Jenis resource. Web Hosting selalu "WebHosting". |
space | Refer<Space> | Space tempat Web Hosting ini berada. |
createdBy | Refer<User> | Pengguna yang membuat. |
createdAt | string (date-time) | Waktu pembuatan. |
updatedBy | Refer<User> | Pengguna yang terakhir mengubah. |
updatedAt | string (date-time) | Waktu pengubahan terakhir. |
state | string (enum) | Status pemrosesan deployment. Salah satu dari 4 nilai di bawah. |
error | string | Alasan kegagalan saat pemrosesan gagal. Kosong jika tidak gagal. |
totalFileSize | integer | Ukuran total file yang diunggah (byte). |
originMetas | PageMeta[] | Nilai tag meta yang semula dibawa dokumen. Hanya terisi pada Web Hosting yang dibuat lewat pemasangan MarketApp. Dijelaskan di Metadata per dokumen di bawah. |
version | integer (≥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.
state | Arti |
|---|---|
PENDING | Menunggu untuk diproses. |
PROCESSING | Sedang diproses. |
COMPLETED | Pemrosesan selesai. Dapat diakses melalui url. |
FAILED | Pemrosesan gagal. Alasannya tersimpan di sys.error. |
Properti badan
Properti badan dari Web Hosting adalah sebagai berikut.
| Properti | Tipe | Deskripsi |
|---|---|---|
name | string (1~64) | Nama Web Hosting. Wajib saat pembuatan. |
description | string (≤128) | Deskripsi. Opsional. |
isSpa | boolean | Apakah merupakan aplikasi satu halaman. Jika true, semua permintaan path diarahkan ke index.html (untuk routing SPA). Wajib saat pembuatan. |
subdomain | string (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. |
upload | Refer<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. |
url | string | URL akses setelah pemrosesan selesai. Diisi oleh sistem. |
pageMetas | PageMeta[] | Nilai tag meta yang akan ditimpa per dokumen. Opsional. Dijelaskan di Metadata per dokumen di bawah. |
customDomain | string | Custom 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.
| Properti | Tipe | Deskripsi |
|---|---|---|
file | string (1-1024) | Jalur relatif dokumen tujuan. Misalnya index.html, about/index.html. |
meta | WebHostingMeta | Nilai 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.
| Slot | Panjang maksimum | Tag yang diubah |
|---|---|---|
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 |
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 permintaan | Hasil |
|---|---|
| Kunci slot tidak ada | Pengaturan saat ini tetap seperti semula. |
Kunci slot bernilai null | Pengaturan saat ini tetap seperti semula. |
| Kunci slot berupa string kosong | Tag itu dihapus dari dokumen. |
| Kunci slot berisi nilai | Ditimpa dengan nilai tersebut. |
Entri sebuah dokumen dihilangkan dari pageMetas | Pengaturan dokumen itu tetap seperti semula. |
pageMetas tidak ada | Pengaturan 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.
| Kode | Kondisi |
|---|---|
WGL422031 | Anda mencoba mengubah atau menghapus Web Hosting yang sedang memproses file deployment. Coba lagi setelah pemrosesan selesai. |
WGL422113 | pageMetas 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. |
WGL500039 | Sistem gagal membaca informasi custom domain yang terhubung dari jaringan pengiriman. |
WGL429001 | Pemanggil 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.
Dokumen terkait
- Upload API: permintaan untuk mengunggah ZIP file statis dan menerima Upload yang digunakan untuk membuat Web Hosting.
- Space: Space tempat Web Hosting berada.
