Content
Terakhir diperbarui: 3 Juli 2026
Sebuah Content adalah satu data nyata yang dicetak dari Content Type (cetakannya). Ambil contoh toko pakaian: Content Type "Produk" menetapkan susunan atribut seperti nama produk, harga, dan deskripsi, sedangkan satu "Stainless Tumbler 500ml" adalah satu Content yang mengikuti cetakan tersebut.
Sebuah Content terdiri dari dua bagian. fields memuat nilai nyata dari setiap field, dan sys memuat status seperti publikasi, versi, dan pengarsipan. Pada CMA, Content adalah sub-resource dari Space. Jalur baca dan hapus mengacu pada /spaces/{spaceId}/contents, sedangkan jalur buat dan ubah mengacu pada /spaces/{spaceId}/content-types/{contentTypeId}/contents yang berada di bawah Content Type. Operasi pengelolaan dilakukan pada CMA, dan snapshot yang dipublikasikan dikirim melalui CDA.
Struktur resource
Berikut adalah respons baca tunggal untuk Content "Stainless Tumbler 500ml" yang sudah dipublikasikan. Bersama dengan sys (properti sistem), ia memiliki fields (nilai field) dan metadata (informasi tambahan seperti tag).
{
"sys": {
"id": "3trmXRM3RqbgSnifyg7PUl8DzDgDzP",
"type": "Content",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } },
"publish": {
"version": 1,
"at": "2026-06-18T09:51:44.128Z",
"firstAt": "2026-06-18T09:51:44.128Z",
"counter": 1,
"by": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } }
},
"createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
"createdAt": "2026-06-18T09:51:14.597Z",
"updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
"updatedAt": "2026-06-18T09:51:44.128Z",
"version": 2,
"status": "Published"
},
"fields": {
"price": { "en-US": 18000 },
"productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }
},
"metadata": { "tags": [] }
}Properti utama:
sys.id: Pengidentifikasi unik dari Content. Nilai ini masuk ke{contentId}pada jalur baca tunggal, ubah, hapus, dan publikasi.sys.contentType: SebuahReferyang menunjuk ke Content Type yang diikuti Content ini.fields: Nilai dari setiap field. Kuncinya adalahapiNamedari field, dan nilainya adalah peta per-locale. Hal ini dijelaskan di Kunci field adalah apiName di bawah.metadata.tags: Daftar Tag yang dilampirkan ke Content ini. Setiap entri berbentukRefer<Tag>, dan berupa array kosong[]jika tidak ada tag yang dilampirkan.
Kunci field adalah apiName
Kunci dari objek fields adalah apiName dari masing-masing field. Bukan id internal dari Content Type, bukan pula nama field yang ditampilkan di studio konten (mis. Nama Produk). Jadi saat membuat atau membaca Content, Anda harus memakai apiName yang didefinisikan pada Content Type sebagai kunci.
Field dari Content Type "Produk" demo dan pemetaan apiName-nya adalah sebagai berikut.
| Nama studio konten | apiName | type | localized | required |
|---|---|---|---|---|
| Nama Produk | productName | ShortText | true | true |
| Harga | price | Long | false | false |
| Deskripsi | description | RichText | true | false |
| Foto Utama | photo | Refer<Media> | false | false |
| Merek | brand | Refer | false | false |
Setiap nilai field adalah peta per-locale. Bentuk nilainya bergantung pada localized.
- Field
localized: truedapat menyimpan nilai untuk beberapa locale dalam bentuk{ "<locale>": nilai }. Contoh:"productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }. - Field
localized: false(field non-lokalisasi) hanya menerima nilai di bawah satu kunci Locale default dari Space. Kunci locale lain tidak diperbolehkan. Karena Locale default Space demo adalahen-US, harga hanya memiliki satu kuncien-US, seperti pada"price": { "en-US": 18000 }.
Apa itu Locale default, hingga locale mana sebuah field required harus diisi, dan aturan fallback saat nilai tidak ada dibahas di Multibahasa (konsep).
Bentuk nilai per tipe
Bentuk nilai yang masuk ke dalam kunci locale mengikuti type dari field. Sebagian besar tipe menyimpan nilai dari tipe tersebut apa adanya (tipe teks berupa string, Number dan Long berupa angka, Boolean berupa true/false). Tipe yang nilainya berbentuk objek atau array sehingga mudah membingungkan adalah sebagai berikut.
Location: Berupa objek{ "latitude": <angka>, "longitude": <angka> }.latitudebernilai antara -90 dan 90,longitudeantara -180 dan 180, dan kedua kunci itu wajib ada. Selain kunci yang didefinisikan, tidak ada yang diterima, sehingga kunci singkat sepertilat,lng, ataulonakan ditolak.Refer: Nilainya adalah objekReferyang menunjuk ke target, dan Anda tidak memasukkan string id saja melainkan objeksysapa adanya. Jika menunjuk ke Content lain,targetType-nya adalahContent; jika menunjuk ke Media, nilainyaMedia. BentukReferitu sendiri didefinisikan di Bentuk Refer pada properti sistem (sys).Array: Berupa array JSON yang memuat nilai dari tipe elemennya. Jika elemennya teks, ia berupa array string; jika elemennyaRefer(Content atau Media), ia berupa array dari objekRefer. Bukan array dari string id.
Berikut adalah contoh nilai yang masuk ke dalam fields (saat Locale default Space adalah en-US).
{
"location": { "en-US": { "latitude": 37.5662, "longitude": 126.9910 } },
"tags": { "en-US": ["baru", "edisi terbatas"] },
"photo": { "en-US": { "sys": { "type": "Refer", "id": "3trmXRM3RqbgSnifyg7PUl8DzDgDzP", "targetType": "Media" } } },
"photos": { "en-US": [ { "sys": { "type": "Refer", "id": "3trmXRM3RqbgSnifyg7PUl8DzDgDzP", "targetType": "Media" } } ] }
}Properti sistem (sys)
Setiap Content membawa properti sistem bersama di dalam objek sys. space, contentType, createdBy, dan updatedBy berbentuk Refer ({ "sys": { "id", "type": "Refer", "targetType" } }).
| Properti | Tipe | Deskripsi |
|---|---|---|
id | string | Pengidentifikasi unik resource. |
type | string | Jenis resource. Untuk Content selalu "Content". |
space | Refer<Space> | Space tempat Content ini berada. |
contentType | Refer<ContentType> | Content Type yang diikuti Content ini. |
publish | object | Penunjuk status publikasi. Lihat kunci di bawah. |
archive | object | Informasi pengarsipan. Hanya ada saat sedang diarsipkan, selain itu kuncinya tidak ada. Lihat kunci di bawah. |
createdBy | Refer<User> | Pengguna yang membuat. |
createdAt | string (date-time) | Waktu pembuatan. |
updatedBy | Refer<User> | Pengguna yang terakhir mengubah. |
updatedAt | string (date-time) | Waktu perubahan terakhir. |
version | integer (≥1) | Versi resource. Naik 1 pada setiap perubahan seperti buat, ubah, publikasi, batal publikasi, dan arsip. |
status | string (enum) | Status publikasi. Salah satu dari 4 nilai di bawah. |
status adalah salah satu dari 4 nilai berikut.
status | Arti |
|---|---|
Draft | Sedang disusun dan belum dipublikasikan. |
Changed | Pernah dipublikasikan, tetapi setelah itu diubah sehingga ada perubahan yang belum dipublikasikan. |
Published | Sudah dipublikasikan dan tidak ada perubahan yang belum dipublikasikan. |
Archived | Sedang diarsipkan. |
Objek publish adalah penunjuk yang menandakan status publikasi. Saat sedang dipublikasikan, ia memiliki semua kunci berikut.
| Kunci | Tipe | Deskripsi |
|---|---|---|
version | integer | sys.version pada saat dipublikasikan. |
at | string (date-time) | Waktu publikasi terakhir. |
firstAt | string (date-time) | Waktu publikasi pertama. Tetap tersimpan meskipun publikasi dibatalkan. |
counter | integer | Jumlah kumulatif publikasi. |
by | Refer<User> | Pengguna yang terakhir mempublikasikan. |
Saat publikasi dibatalkan, version, at, dan by hilang dari publish dan hanya firstAt serta counter yang tersisa. Jika belum pernah dipublikasikan sama sekali, publish berisi { "counter": 0 }.
Objek archive hanya ada saat sedang diarsipkan. Saat diarsipkan, ia memiliki version (sys.version pada saat pengarsipan), at (waktu pengarsipan), dan by (pengguna yang mengarsipkan); jika tidak berstatus arsip, kunci archive itu sendiri tidak ada.
sys.version dan semua nilai waktu pada contoh di bawah adalah nilai pada saat pemanggilan sebenarnya, dan berbeda pada setiap pemanggilan.
Publikasi, versi, dan konkurensi
Siklus hidup Content adalah sebagai berikut.
- Saat dibuat,
statusadalahDraft.Contenttidak otomatis dipublikasikan saat dibuat. Inilah yang membedakannya dari Content Type. Content Type otomatis dipublikasikan bersamaan dengan pembuatannya, tetapi Content memerlukan pemanggilan publikasi terpisah agar masuk ke jalur pengiriman. - Saat dipublikasikan,
statusmenjadiPublished. - Jika diubah setelah dipublikasikan,
statusmenjadiChanged. Artinya ada perubahan yang belum dipublikasikan. - Saat publikasi dibatalkan,
statuskembali menjadiDraft. - Untuk mengarsipkan, Anda harus membatalkan publikasi terlebih dahulu. Content yang berstatus publikasi tidak dapat langsung diarsipkan.
sys.version naik 1 pada setiap perubahan.
Permintaan ubah, ubah sebagian, publikasi, batal publikasi, arsip, dan batal arsip harus menyertakan sys.version saat ini pada header x-weegloo-version. Jika nilai ini hilang atau tidak cocok dengan versi saat ini, hal itu dianggap sebagai konflik perubahan bersamaan dan permintaan ditolak. Permintaan buat dan hapus tidak memakai header ini. Transisi status seperti publikasi, batal publikasi, arsip, dan batal arsip tidak memiliki badan permintaan tersendiri.
API
URL dasar untuk semua endpoint di bawah adalah https://cma.weegloo.com/v1, dan diperlukan token Bearer yang mengautentikasi ke CMA pada header Authorization. Ubah, ubah sebagian, publikasi, batal publikasi, arsip, dan batal arsip harus mengirimkan header X-Weegloo-Version (sys.version resource saat ini) untuk kontrol konkurensi optimistis.
Saat memfilter atau mengurutkan daftar /contents (GET /spaces/{spaceId}/contents) dengan fields.*, Content Type juga harus ditentukan dengan sys.contentType.sys.id={contentTypeId}. Bentuk contentType={contentTypeId} tidak dapat menggantikannya. Path /content-types/{contentTypeId}/contents sudah mencantumkan Content Type pada path, sehingga tidak perlu ditentukan secara terpisah.
Dokumen terkait
- Content Type: Cetakan dari Content ini (definisi field, apiName).
- CDA Content: Mengirimkan Content yang dipublikasikan ke pengunjung (baca).
- Tag: Label klasifikasi yang dilampirkan pada metadata.tags.
- Multibahasa (konsep): Locale default, pengisian wajib, fallback.
