19 Jan 2025·7 menit membaca

Form berbasis server untuk iterasi cepat di aplikasi web dan mobile

Form yang dikendalikan server memungkinkan menyimpan definisi field di database sehingga aplikasi web dan native merender formulir yang diperbarui tanpa perlu redeploy klien.

Form berbasis server untuk iterasi cepat di aplikasi web dan mobile

Kenapa mengubah formulir lebih lambat dari seharusnya

Formulir terlihat sederhana di layar, tetapi seringkali tertanam secara hard-coded dalam aplikasi. Ketika formulir dibundel dalam rilis, bahkan perubahan kecil pun berubah menjadi siklus pengiriman penuh: ubah kode, uji ulang, deploy, dan koordinasikan peluncuran.

Yang orang sebut “edit kecil” biasanya menyembunyikan pekerjaan nyata. Mengganti label bisa memengaruhi tata letak. Menandai field sebagai wajib memengaruhi validasi dan status error. Mengubah urutan pertanyaan bisa merusak asumsi dalam analitik atau logika. Menambahkan langkah baru dapat mengubah navigasi, indikator progres, dan apa yang terjadi saat seseorang berhenti di tengah alur.

Di web, rasa sakitnya lebih kecil tapi tetap nyata. Anda masih membutuhkan deployment dan QA karena formulir yang rusak memblokir pendaftaran, pembayaran, atau permintaan dukungan. Di mobile, kondisi jadi lebih buruk: Anda mengirim build baru, menunggu peninjauan toko aplikasi, dan berurusan dengan pengguna yang tidak segera memperbarui. Sementara itu backend dan tim dukungan mungkin harus menangani beberapa versi formulir sekaligus.

Keterlambatan ini bisa diprediksi: produk ingin tweak cepat tapi engineering menaruhnya di kereta rilis berikutnya; QA menjalankan ulang seluruh alur karena satu perubahan field bisa memecah pengiriman; pembaruan mobile butuh hari ketika kebutuhan bisnis mendesak; dukungan harus menjelaskan layar yang tidak cocok ke pengguna yang berbeda.

Iterasi cepat terlihat berbeda. Dengan form yang dikendalikan server, tim memperbarui definisi formulir dan melihat perubahan live di web dan aplikasi native dalam hitungan jam, bukan minggu. Jika formulir onboarding menyebabkan banyak drop-off, Anda bisa menghapus satu langkah, mengubah nama field yang membingungkan, dan menjadikan satu pertanyaan opsional di sore yang sama, lalu mengukur apakah penyelesaian membaik.

Apa arti form yang dikendalikan server dalam bahasa sederhana

Form yang dikendalikan server berarti aplikasi tidak membawa tata letak formulir yang diprogram secara statis. Sebagai gantinya, server mengirimkan deskripsi formulir (field mana yang ditampilkan, urutannya, label dan aturan), dan aplikasi web atau mobile merendernya.

Bayangkan seperti menu restoran. Aplikasi adalah pelayan yang tahu cara menyajikan item, mengumpulkan pilihan, dan mengirim pesanan. Server adalah dapur yang memutuskan apa saja yang ada di menu hari ini.

Yang tetap di aplikasi adalah mesin perender: bagian UI yang dapat digunakan ulang seperti input teks, pemilih tanggal, dropdown, unggah file, dan kemampuan untuk menampilkan error serta mengirim data. Yang pindah ke server adalah definisi formulir: seperti apa formulir onboarding tertentu saat ini.

Penting untuk memisahkan dua hal:

  • Definisi bidang (skema): label, tipe, wajib atau opsional, teks bantuan, nilai default, opsi untuk dropdown
  • Data yang dimasukkan pengguna: jawaban nyata yang diketik atau dipilih seseorang

Kebanyakan sistem form berbasis server menggunakan blok bangunan yang sama, meskipun tim menyebutnya berbeda: field (input tunggal), grup (bagian), langkah (alur multi-halaman), aturan (tampil atau sembunyikan, kondisi wajib, nilai terhitung), dan aksi (submit, simpan draf, pindah ke langkah lain).

Contoh sederhana: aplikasi native Anda sudah tahu cara merender dropdown. Server bisa mengubah label dropdown dari “Role” menjadi “Job title”, memperbarui opsi, dan menandainya sebagai wajib, tanpa merilis versi aplikasi baru.

Kapan pendekatan ini ide yang bagus (dan kapan tidak)

Form yang dikendalikan server paling berguna ketika formulir berubah lebih sering daripada aplikasinya. Jika tim Anda sering mengubah copy, menambah field, atau menyesuaikan aturan, form berbasis server bisa menghemat hari menunggu peninjauan toko aplikasi dan rilis terkoordinasi. Klien tetap sama. Skema berubah.

Cocok

Ini cocok untuk alur di mana tata letak cukup dapat diprediksi, tetapi pertanyaan dan aturan sering berubah: onboarding dan pengaturan profil, survei dan umpan balik, tools internal dan alur admin, pembaruan kepatuhan, dan intake dukungan yang bervariasi menurut jenis masalah.

Keuntungan besar adalah kecepatan dengan koordinasi lebih sedikit. Product manager bisa menyetujui definisi formulir yang diperbarui, dan baik web maupun native mengambilnya pada muatan berikutnya.

Kurang cocok

Biasanya buruk jika pengalaman formulir adalah produk itu sendiri, atau jika UI membutuhkan kontrol native yang sangat ketat. Contohnya adalah tata letak sangat kustom, pengalaman offline-first kompleks yang harus bekerja penuh tanpa koneksi, animasi berat dan interaksi gesture per field, atau layar yang bergantung pada komponen platform-spesifik mendalam.

Tradeoff-nya sederhana: Anda mendapat fleksibilitas, tetapi mengorbankan sedikit kontrol atas UI yang presisi. Anda masih bisa menggunakan komponen native, tetapi mereka harus bisa dipetakan dengan rapi ke skema Anda.

Aturan praktis: jika Anda bisa mendeskripsikan formulir sebagai “field, aturan, dan aksi submit” dan sebagian besar perubahan adalah konten dan validasi, gunakan server-driven. Jika perubahan kebanyakan berupa interaksi kustom, perilaku offline, atau sentuhan visual, tetaplah client-driven.

Cara menyimpan definisi field di database

Model database yang baik untuk form berbasis server memisahkan dua hal: identitas formulir yang stabil, dan detail yang dapat berubah tentang tampilan dan perilakunya. Pemisahan ini memungkinkan Anda memperbarui formulir tanpa merusak submission lama atau klien lama.

Struktur umum terlihat seperti ini:

  • Form: formulir yang bertahan lama (mis. “Customer onboarding”)
  • FormVersion: snapshot tak-ubah yang bisa dipublikasikan dan dikembalikan
  • Field: satu baris per field per versi (tipe, key, required, dsb.)
  • Options: pilihan untuk field select atau radio, termasuk urutan
  • Layout: pengelompokan dan petunjuk tampilan (section, pembatas)

Jaga tipe field awal Anda sederhana. Anda bisa pergi jauh dengan text, number, date, select, dan checkbox. Unggahan file berguna, tapi tambahkan hanya setelah Anda memikirkan uploads, batas ukuran, dan penyimpanan secara menyeluruh.

Untuk pengurutan dan pengelompokan, hindari “magic” berdasarkan waktu pembuatan. Simpan posisi eksplisit (integer) pada field dan opsi. Untuk pengelompokan, referensikan section_id (dinormalisasi) atau simpan blok layout yang mencantumkan key field di setiap section.

Visibilitas kondisional bekerja paling baik jika disimpan sebagai data, bukan kode. Pendekatan praktis adalah objek visibility_rule JSON pada setiap field, seperti “tampilkan jika field X sama dengan Y”. Batasi tipe aturan di awal (equals, not equals, is empty) agar setiap klien bisa mengimplementasikannya dengan cara yang sama.

Lokalisasi lebih mudah jika Anda memisahkan teks, misalnya tabel FieldText(field_id, locale, label, help_text). Itu menjaga terjemahan rapi dan memungkinkan orang memperbarui copy tanpa menyentuh logika.

Untuk JSON vs tabel ter-normalisasi, gunakan aturan sederhana: normalisasi data yang sering Anda query dan laporkan, dan gunakan JSON untuk detail UI yang jarang difilter. Tipe field, required, dan key cocok disimpan di kolom. Petunjuk styling, placeholder, dan objek aturan lebih kompleks bisa tinggal di JSON, selama mereka juga diberi versi bersama form.

Cara web dan native merender skema yang sama

Prototype server-driven forms faster
Build a server-driven form prototype with backend, web, and native apps from one workspace.
Try AppMaster

Agar form berbasis server bekerja lintas web dan native, kedua klien perlu kontrak yang sama: server menggambarkan formulir, dan klien mengubah setiap field menjadi komponen UI.

Polanya praktis adalah “field registry”. Setiap aplikasi menyimpan peta kecil dari tipe field ke komponen (web) atau view (iOS/Android). Registry ini tetap stabil meskipun formulir berubah.

Yang dikirim server sebaiknya lebih dari sekadar daftar field. Payload yang baik mencakup skema (id field, tipe, label, urutan), nilai default, aturan (required, min/max, pattern, visibilitas kondisional), pengelompokan, teks bantuan, dan tag analitik. Jaga aturan bersifat deskriptif daripada mengirim kode yang dapat dieksekusi, agar klien tetap sederhana.

Field select sering membutuhkan data asinkron. Alih-alih mengirim daftar besar, kirim deskriptor sumber data (mis. “countries” atau “products”) plus pengaturan pencarian dan paging. Klien memanggil endpoint generik seperti “fetch options for source X, query Y”, lalu merender hasil. Itu menjaga perilaku web dan native konsisten saat opsi berubah.

Konsistensi bukan berarti pixel-perfect. Sepakati blok bangunan bersama seperti jarak, penempatan label, penanda wajib, dan gaya error. Setiap klien masih bisa menyajikan makna yang sama dengan cara yang sesuai platform.

Aksesibilitas mudah dilupakan dan sulit diperbaiki kemudian. Perlakukan itu sebagai bagian dari kontrak skema: setiap field perlu label, hint opsional, dan pesan error yang jelas. Urutan fokus harus mengikuti urutan field, ringkasan error harus dapat diakses dengan keyboard, dan picker harus bekerja dengan pembaca layar.

Validasi dan aturan tanpa membuat klien terlalu pintar

Make support forms easier to change
Stand up a support intake form that adapts by issue type using a shared schema.
Start Now

Dengan form yang dikendalikan server, server tetap menentukan arti “valid”. Klien masih bisa melakukan pengecekan cepat untuk umpan balik instan (seperti wajib atau terlalu pendek), tetapi keputusan akhir ada di server. Kalau tidak, Anda akan mendapatkan perilaku berbeda di web vs iOS vs Android, dan pengguna bisa mengakali aturan dengan mengirim permintaan langsung.

Simpan aturan validasi di dekat definisi field. Mulailah dengan aturan yang sering ditemui: field wajib (termasuk wajib hanya ketika X bernilai tertentu), min/max untuk angka dan panjang, pengecekan regex untuk kode pos, pemeriksaan antar-field (tanggal mulai sebelum tanggal selesai), dan nilai yang diizinkan (harus salah satu dari opsi ini).

Logika kondisional sering membuat klien terlalu rumit. Alih-alih mengirim logika aplikasi baru, kirim aturan sederhana seperti “tampilkan field ini hanya ketika field lain bernilai tertentu”. Contoh: tampilkan “Company size” hanya ketika “Account type” = “Business”. Aplikasi mengevaluasi kondisi dan menampilkan atau menyembunyikan field. Server menegakkannya: jika field disembunyikan, jangan jadikan wajib.

Penanganan error adalah separuh kontrak lain. Jangan mengandalkan teks bebas yang berubah setiap rilis. Gunakan kode error yang stabil dan biarkan klien memetakannya ke pesan yang ramah pengguna (atau menampilkan teks server sebagai fallback). Struktur yang berguna adalah code (identifikator stabil seperti REQUIRED), field (input yang gagal), message (teks tampil opsional), dan meta (detail tambahan seperti min=3).

Catatan keamanan: jangan pernah mempercayai validasi hanya di sisi klien. Anggap pengecekan klien sebagai kemudahan, bukan penegakan.

Langkah demi langkah: implementasi form berbasis server dari awal

Mulailah kecil. Pilih satu formulir nyata yang sering berubah (onboarding, intake dukungan, capture lead) dan dukung hanya beberapa tipe field di awal. Itu membuat versi pertama mudah di-debug.

1) Definisikan v1 dan tipe field

Pilih 4–6 tipe field yang dapat Anda render di mana saja, seperti text, multiline text, number, select, checkbox, dan date. Tentukan apa yang diperlukan setiap tipe (label, placeholder, required, options, default) dan apa yang belum didukung (unggah file, grid kompleks).

2) Rancang respons skema

API Anda harus mengembalikan semua yang dibutuhkan klien dalam satu payload: identifier formulir, versi, dan daftar field berurutan dengan aturan. Jaga aturan sederhana di awal: required, min/max length, regex, dan show/hide berdasarkan field lain.

Pembagian praktis adalah satu endpoint untuk mengambil definisi dan satu endpoint lain untuk mengirim respons. Klien tidak boleh menebak aturan.

3) Bangun satu renderer, lalu tiru di platform lain

Implementasikan renderer di web dulu karena lebih cepat untuk iterasi. Saat skema terasa stabil, bangun renderer yang sama di iOS dan Android menggunakan tipe field dan nama aturan yang sama.

4) Simpan submission terpisah dari definisi

Anggap submission sebagai catatan append-only yang mereferensikan (form_id, version). Ini ramah audit: Anda selalu bisa melihat apa yang dilihat pengguna saat mereka mengirim, bahkan setelah formulir berubah.

5) Tambah workflow edit dan publish

Buat draf di layar admin, validasi skema, lalu publish versi baru. Alur sederhana sudah cukup: salin versi saat ini ke draf, edit field dan aturan, jalankan validasi server-side saat menyimpan, publish (menambah versi), dan biarkan versi lama bisa dibaca untuk pelaporan.

Uji satu formulir nyata end-to-end sebelum menambah lebih banyak tipe field. Di situlah kebutuhan tersembunyi muncul.

Versi, rollout, dan mengukur apa yang berubah

Keep rules readable and testable
Use Business Processes to express rules like required, show or hide, and cross-field checks.
Try AppMaster

Perlakukan setiap perubahan formulir seperti rilis. Form berbasis server memungkinkan Anda mengirim perubahan tanpa update toko aplikasi, yang bagus, tetapi juga berarti skema yang buruk bisa merusak semua pengguna sekaligus.

Mulailah dengan model versi sederhana. Banyak tim menggunakan status “draft” dan “published” agar editor bisa beriterasi dengan aman. Tim lain menggunakan nomor versi (v12, v13) sehingga mudah membandingkan dan mengaudit. Bagaimanapun, jaga versi yang dipublikasikan tetap immutable dan buat versi baru untuk setiap perubahan, bahkan yang kecil.

Rollout perubahan seperti fitur: rilis ke kohort kecil dulu, lalu tingkatkan. Jika Anda sudah memakai feature flag, sebuah flag bisa memilih versi formulir. Jika tidak, aturan server seperti “users created after date X” dapat berfungsi.

Untuk memahami apa yang berubah di dunia nyata, log beberapa sinyal secara konsisten: render errors (unknown field type, missing options), validation failures (aturan apa gagal dan pada field mana), titik drop-off (langkah/section terakhir yang dilihat), waktu penyelesaian (total dan per langkah), dan outcome submission (sukses, ditolak server). Selalu lampirkan versi formulir pada setiap submission dan tiket dukungan.

Untuk rollback, lakukan sederhana: jika v13 memicu lonjakan error, kembalikan pengguna ke v12 segera, lalu perbaiki v13 sebagai v14.

Kesalahan umum yang menyusahkan di kemudian hari

Form berbasis server memudahkan mengganti apa yang dilihat pengguna tanpa menunggu persetujuan toko aplikasi. Kekurangannya, jalan pintas bisa berubah menjadi kegagalan besar saat Anda punya beberapa versi aplikasi di pasar.

Satu kesalahan adalah memadati skema dengan instruksi UI sampai tingkat pixel. Web mungkin bisa menangani “grid dua kolom dengan ikon tooltip,” tetapi layar native mungkin tidak mendukungnya. Fokuskan skema pada makna (tipe, label, required, opsi) dan biarkan setiap klien menentukan presentasi.

Masalah umum lain adalah memperkenalkan tipe field baru tanpa fallback. Jika klien lama tidak tahu cara merender “signature” atau “document scan,” mereka bisa crash atau mengabaikan field. Rencanakan penanganan tipe-unknown: tampilkan placeholder aman, sembunyikan dengan peringatan, atau minta “Perbarui aplikasi”.

Masalah tersulit sering muncul dari perubahan campuran, seperti mengedit definisi formulir dan memigrasi jawaban tersimpan dalam rilis yang sama, mengandalkan pengecekan klien untuk aturan sensitif, membiarkan JSON “sementara” tumbuh sampai tidak ada yang tahu isinya, mengubah nilai opsi tanpa mempertahankan nilai lama, atau mengasumsikan satu versi klien dan lupa instalasi native lama.

Kegagalan realistis: Anda mengganti nama key field dari company_size menjadi team_size sambil mengubah cara menyimpan jawaban. Web memperbarui instan, tetapi build iOS lama terus mengirim key lama, dan backend mulai menolak submission. Perlakukan skema sebagai kontrak: tambahkan field baru terlebih dahulu, terima kedua key untuk sementara, dan hapus yang lama hanya setelah penggunaannya menurun.

Daftar periksa cepat sebelum mem-publish versi formulir baru

Ship the same form everywhere
Create one renderer concept and deliver it across web, iOS, and Android.
Build Now

Sebelum Anda mem-publish skema baru, lakukan pemeriksaan cepat untuk masalah yang biasanya muncul hanya setelah pengguna nyata mulai mengirim data.

Setiap field membutuhkan identifier yang stabil dan permanen. Label, urutan, dan teks bantuan bisa berubah, tetapi id field tidak boleh. Jika “Company size” menjadi “Team size,” id tetap sama agar analytics, pemetaan, dan draft tersimpan tetap bekerja.

Validasi skema di server sebelum live. Perlakukan respons skema seperti API: periksa properti wajib, tipe field yang diizinkan, daftar opsi, dan ekspresi aturan.

Checklist pre-ship singkat:

  • Field id bersifat immutable, dan field yang dihapus ditandai deprecated (bukan dipakai ulang secara diam-diam).
  • Klien punya fallback untuk tipe field yang tidak dikenal.
  • Pesan error konsisten di web dan native dan memberi tahu pengguna cara memperbaiki input.
  • Setiap submission menyertakan versi formulir (dan idealnya hash skema).

Akhirnya, uji satu skenario “klien lama, skema baru”. Di situlah form berbasis server terasa mulus atau gagal dengan cara yang membingungkan.

Contoh: mengubah formulir onboarding tanpa redeploy aplikasi

Version form changes safely
Add versioning and rollback to your forms with a publish workflow you control.
Get Started

Sebuah tim SaaS punya formulir onboarding yang berubah hampir setiap minggu. Tim sales tahu detail baru yang mereka butuhkan, kepatuhan meminta pertanyaan tambahan, dan dukungan ingin lebih sedikit follow-up “silakan email kami”. Dengan form yang dikendalikan server, aplikasi tidak meng-hardcode field. Aplikasi meminta definisi formulir terbaru dari backend dan merendernya.

Dalam dua minggu, mungkin terlihat seperti ini: Minggu 1 menambah dropdown Company size (1–10, 11–50, 51–200, 200+) dan menjadikan nomor VAT opsional. Minggu 2 menambah pertanyaan kondisional industri-teratur seperti License ID dan Compliance contact, dan menjadikannya wajib hanya ketika pengguna memilih industri seperti Finance atau Healthcare.

Tidak ada yang menyubmit build mobile baru. Web berubah segera. Aplikasi native mengambil skema baru saat mereka memuat formulir berikutnya (atau setelah periode cache singkat). Perubahan backend hanyalah memperbarui definisi field dan aturan.

Dukungan juga mendapat alur kerja yang lebih bersih. Setiap catatan onboarding menyertakan metadata seperti form_id dan form_version. Ketika pengguna berkata, “Saya tidak pernah melihat pertanyaan itu,” dukungan bisa membuka versi persis yang diisi pengguna dan melihat label, flag wajib, dan field kondisional yang sama.

Langkah selanjutnya: buat prototipe kecil dan skala

Pilih satu formulir yang sering berubah dan berdampak jelas, seperti onboarding, intake dukungan, atau capture lead. Definisikan apa yang harus didukung pada hari pertama: set ketat tipe field (text, number, select, checkbox, date) dan beberapa aturan dasar (required, min/max, kondisional show/hide). Tambahkan komponen yang lebih kaya nanti.

Prototipe end-to-end dengan ruang lingkup sempit: konversi satu formulir, rancang model data Anda (form, version, fields, options, rules), definisikan JSON yang dikembalikan API Anda, bangun renderer kecil di web dan mobile, dan tegakkan validasi di server supaya perilaku tetap konsisten.

Kemenangan konkret pertama: ubah “Company size” dari teks bebas menjadi dropdown, tambahkan checkbox persetujuan wajib, dan sembunyikan “Phone number” kecuali “Contact me” dicentang. Jika skema dan renderer Anda terpasang dengan benar, pembaruan tersebut menjadi perubahan data, bukan rilis klien.

Jika Anda ingin membangun ini tanpa menulis setiap endpoint backend dan alur klien secara manual, platform no-code seperti AppMaster (appmaster.io) bisa menjadi pilihan praktis. Anda bisa memodelkan skema dan data di satu tempat dan menjaga validasi di backend, sambil menghasilkan web dan aplikasi native yang merender apa yang dijelaskan server.

FAQ

Why do “small” form changes take so long?

Mereka terpatri di rilis aplikasi, jadi perubahan kecil pun memicu perubahan kode, pengujian, dan deployment. Di mobile Anda juga menunggu peninjauan toko aplikasi dan menghadapi pengguna yang belum update, sehingga dukungan harus menangani beberapa varian formulir sekaligus.

What exactly is a server-driven form?

Form yang dikendalikan server berarti aplikasi merender formulir dari definisi yang dikirim server. Aplikasi menjaga seperangkat komponen UI yang stabil, sementara server mengontrol bidang, urutan, label, dan aturan untuk setiap versi yang dipublikasikan.

When are server-driven forms the best fit?

Mulailah dengan onboarding, penerimaan dukungan, pengaturan profil, survei, dan alur admin/internal yang sering berubah pertanyaannya atau validasinya. Nilai paling besar terlihat saat Anda perlu menyesuaikan teks, flag wajib, opsi, atau aturan kondisional tanpa menunggu rilis klien.

When should I not use server-driven forms?

Hindari jika UI formulir itu sendiri adalah produk atau membutuhkan interaksi sangat khusus, animasi berat, atau perilaku platform-spesifik yang dalam. Juga kurang cocok untuk alur yang harus bekerja sepenuhnya offline tanpa koneksi.

How should I model server-driven form definitions in the database?

Gunakan satu record Form yang stabil dan snapshot FormVersion yang tidak dapat diubah. Simpan Field per versi (type, key, required, position), Options untuk field tipe select, model Layout/groupping kecil, dan simpan submission terpisah yang mereferensikan (form_id, version).

What’s the rule for field IDs and renaming fields?

Berikan setiap bidang identifier permanen yang tidak berubah, meski label berganti. Jika perlu arti baru, tambahkan id field baru dan tandai id lama sebagai deprecated agar analytics, draft tersimpan, dan klien lama tidak rusak.

How can web and native apps render the same form reliably?

Anggap renderer klien sebagai registry: setiap tipe bidang dipetakan ke komponen UI yang dikenal di web, iOS, dan Android. Jaga skema bersifat deskriptif (tipe, label, urutan, required, aturan) dan hindari instruksi tata letak pixel-level yang tidak bisa diterjemahkan lintas platform.

Where should validation live in a server-driven setup?

Lakukan pengecekan cepat di sisi klien untuk umpan balik instan, tetapi tegakkan semua aturan di server agar web, iOS, dan Android bersikap konsisten dan pengguna tidak bisa melewati validasi. Kembalikan error dengan kode stabil dan id field yang gagal sehingga klien bisa menampilkan pesan konsisten.

How do I roll out changes safely and measure impact?

Versi setiap perubahan, jadikan versi terpublikasi tidak dapat diubah, dan rollout ke kohort kecil dulu sebelum meluas. Catat versi formulir pada semua render error, kegagalan validasi, titik drop-off, waktu menyelesaikan, dan submission sehingga Anda bisa membandingkan versi dan rollback cepat jika ada masalah.

Can a no-code tool help me build server-driven forms faster?

Jika Anda ingin membuat prototipe ini tanpa menulis setiap endpoint backend dan alur klien secara manual, AppMaster dapat membantu dengan memodelkan data dan validasi di backend sekaligus menghasilkan web dan aplikasi native yang mampu merender skema yang disediakan server. Anda tetap harus menjaga kontrak skema agar stabil dan versioned, tetapi ini dapat mengurangi jumlah kode kustom yang harus dipelihara.

Mudah untuk memulai
Ciptakan sesuatu yang menakjubkan

Eksperimen dengan AppMaster dengan paket gratis.
Saat Anda siap, Anda dapat memilih langganan yang tepat.

Memulai