13 Des 2025·6 menit membaca

Memperluas backend Go yang diekspor dengan middleware kustom yang aman

Memperluas backend Go yang diekspor tanpa kehilangan perubahan: di mana menaruh kode kustom, cara menambah middleware dan endpoint, serta cara merencanakan upgrade.

Memperluas backend Go yang diekspor dengan middleware kustom yang aman

Apa yang salah saat Anda menyesuaikan kode yang diekspor

Kode yang diekspor tidak sama dengan repo Go yang dibuat tangan. Dengan platform seperti AppMaster, backend digenerasi dari model visual (skema data, proses bisnis, pengaturan API). Saat Anda mengekspor ulang, generator dapat menulis ulang bagian besar kode agar sesuai dengan model yang diperbarui. Itu bagus untuk menjaga kebersihan, tapi mengubah cara Anda harus menyesuaikan.

Kegagalan paling umum adalah mengedit file yang digenerasi secara langsung. Itu berhasil sekali, lalu ekspor berikutnya menimpa perubahan Anda atau membuat konflik merge yang berantakan. Lebih buruk lagi, suntingan kecil bisa diam-diam merusak asumsi yang dibuat generator (urutan routing, rantai middleware, validasi request). Aplikasi masih bisa dibangun, tapi perilaku berubah.

Kustomisasi yang aman berarti perubahan Anda dapat diulang dan mudah ditinjau. Jika Anda dapat mengekspor ulang backend, menerapkan lapisan kustom, dan dengan jelas melihat apa yang berubah, Anda berada di posisi yang baik. Jika setiap upgrade terasa seperti arkeologi, Anda tidak.

Berikut masalah yang biasanya muncul saat kustomisasi dilakukan di tempat yang salah:

  • Suntingan Anda hilang setelah re-export, atau Anda menghabiskan berjam-jam menyelesaikan konflik.
  • Route bergeser dan middleware Anda tidak lagi berjalan di tempat yang diharapkan.
  • Logika diduplikasi antara model no-code dan kode Go, lalu menyimpang.
  • Perubahan "satu baris" berubah menjadi fork yang tidak ada yang mau sentuh.

Aturan sederhana membantu menentukan di mana perubahan seharusnya berada. Jika perubahan adalah bagian dari perilaku bisnis yang non-developer harus bisa sesuaikan (field, validasi, workflow, permission), letakkan di model no-code. Jika itu perilaku infrastruktur (integrasi auth kustom, logging request, header khusus, rate limit), letakkan di lapisan Go kustom yang bertahan saat re-export.

Contoh: audit logging untuk setiap request biasanya berupa middleware (kode kustom). Field baru yang wajib pada order biasanya bagian dari model data (no-code). Jaga pembagian itu jelas dan upgrade akan tetap dapat diprediksi.

Peta codebase: bagian yang digenerasi vs bagian milik Anda

Sebelum memperluas backend yang diekspor, luangkan 20 menit untuk memetakan apa yang akan digenerasi ulang saat re-export dan apa yang benar-benar Anda miliki. Peta itu adalah yang membuat upgrade membosankan.

Kode yang digenerasi seringkali menandakan dirinya sendiri: komentar header seperti "Code generated" atau "DO NOT EDIT", pola penamaan yang konsisten, dan struktur yang sangat seragam dengan sedikit komentar manusia.

Cara praktis mengklasifikasikan repo adalah mengurutkan semuanya ke dalam tiga keranjang:

  • Generated (read-only): file dengan penanda generator yang jelas, pola berulang, atau folder yang terlihat seperti kerangka kerja.
  • Milik Anda: paket yang Anda buat, wrapper, dan konfigurasi yang Anda kontrol.
  • Shared seams: titik wiring yang dimaksudkan untuk pendaftaran (route, middleware, hook), di mana suntingan kecil mungkin diperlukan tapi sebaiknya seminimal mungkin.

Perlakukan keranjang pertama sebagai read-only meski secara teknis Anda bisa mengeditnya. Jika Anda mengubahnya, anggap generator akan menimpanya nanti atau Anda akan membawa beban merge selamanya.

Buat batas itu nyata untuk tim dengan menulis catatan singkat dan menyimpannya di repo (misalnya, README di root). Buatlah sederhana:

"Generator-owned files: anything with a DO NOT EDIT header and folders X/Y. Our code lives under internal/custom (or similar). Only touch wiring points A/B, and keep changes there small. Any wiring edit needs a comment explaining why it can't live in our own package."

Catatan itu mencegah perbaikan cepat berubah menjadi sakit kepala upgrade permanen.

Di mana menaruh kode kustom agar upgrade tetap sederhana

Aturan paling aman sederhana: perlakukan kode yang diekspor sebagai read-only, dan letakkan perubahan Anda di area kustom yang jelas Anda miliki. Saat Anda mengekspor ulang nanti (misalnya dari AppMaster), Anda ingin merge menjadi kebanyakan "ganti kode yang digenerasi, pertahankan kode kustom".

Buat paket terpisah untuk tambahan Anda. Paket itu bisa berada di dalam repo, tetapi tidak boleh bercampur dengan paket yang digenerasi. Kode yang digenerasi menjalankan inti aplikasi; paket Anda menambahkan middleware, route, dan helper.

Tata letak praktis:

  • internal/custom/ untuk middleware, handler, dan helper kecil
  • internal/custom/routes.go untuk mendaftarkan route kustom di satu tempat
  • internal/custom/middleware/ untuk logika request/response
  • internal/custom/README.md dengan beberapa aturan untuk suntingan di masa depan

Hindari mengedit wiring server di lima tempat yang berbeda. Tujuannya satu "hook point" tipis di mana Anda memasang middleware dan mendaftarkan route ekstra. Jika server yang digenerasi mengekspos router atau handler chain, colokkan di sana. Jika tidak, tambahkan satu file integrasi dekat entrypoint yang memanggil sesuatu seperti custom.Register(router).

Tulis kode kustom seolah-olah Anda akan memasukkannya ke ekspor baru besok. Jaga dependensi minimal, hindari menyalin tipe yang digenerasi bila memungkinkan, dan gunakan adapter kecil sebagai gantinya.

Langkah demi langkah: menambahkan middleware kustom dengan aman

Tujuannya menempatkan logika di paket Anda sendiri, dan hanya menyentuh kode yang digenerasi di satu tempat untuk melakukan wiring.

Pertama, buat middleware sempit: request logging, pengecekan auth sederhana, rate limit, atau request ID. Jika mencoba melakukan tiga pekerjaan sekaligus, Anda akan melakukan lebih banyak perubahan file nanti.

Buat paket kecil (misalnya, internal/custom/middleware) yang tidak perlu mengetahui seluruh aplikasi Anda. Jaga surface publik kecil: satu fungsi konstruktor yang mengembalikan wrapper handler Go standar.

package middleware

import "net/http"

func RequestID(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		// Add header, log, or attach to context here.
		next.ServeHTTP(w, r)
	})
}

Sekarang pilih satu titik integrasi: tempat di mana router atau server HTTP dibuat. Daftarkan middleware Anda di sana, sekali, dan hindari menyebar perubahan ke route individual.

Pertahankan siklus verifikasi singkat:

  • Tambahkan satu tes fokus menggunakan httptest yang memeriksa satu hasil (kode status atau header).
  • Lakukan satu request manual dan konfirmasi perilaku.
  • Pastikan middleware berperilaku masuk akal saat terjadi error.
  • Tambahkan komentar singkat di dekat baris registrasi yang menjelaskan mengapa ia ada.

Diff kecil, satu titik wiring, re-export mudah.

Langkah demi langkah: menambahkan endpoint baru tanpa mem-fork semuanya

Ekspor kode tanpa kejutan
Modelkan data dan alur kerja secara visual, lalu ekspor backend Go yang dapat Anda perluas dengan aman.
Coba AppMaster

Perlakukan kode yang digenerasi sebagai read-only dan tambahkan endpoint Anda di paket kustom kecil yang diimpor aplikasi. Itu yang membuat upgrade tetap masuk akal.

Mulailah dengan menuliskan kontrak sebelum menyentuh kode. Apa yang diterima endpoint (query params, body JSON, header)? Apa yang dikembalikan (bentuk JSON)? Pilih kode status di awal agar Anda tidak berakhir dengan perilaku "yang bekerja saja".

Buat handler di paket kustom Anda. Jaga agar sederhana: baca input, validasi, panggil service atau helper DB yang ada, tulis response.

Daftarkan route di titik integrasi yang sama yang Anda gunakan untuk middleware, bukan di dalam file handler yang digenerasi. Cari tempat di mana router dirakit saat startup dan mount route kustom Anda di sana. Jika proyek yang digenerasi sudah mendukung hook pengguna atau registrasi kustom, gunakan itu.

Checklist singkat menjaga konsistensi perilaku:

  • Validasi input lebih awal (field wajib, format, min/max).
  • Kembalikan satu bentuk error di mana-mana (message, code, details).
  • Gunakan context timeout saat pekerjaan bisa menggantung (DB, panggilan jaringan).
  • Log error tak terduga sekali, lalu kembalikan 500 yang bersih.
  • Tambahkan tes kecil yang memanggil route baru dan memeriksa status serta JSON.

Juga pastikan router mendaftarkan endpoint Anda tepat satu kali. Pendaftaran ganda adalah jebakan umum setelah merge.

Pola integrasi yang menjaga perubahan terkandung

Berhenti membuat fork kode yang digenerasi
Hemat waktu dengan menggenerasi aplikasi inti, lalu hanya tulis kode untuk integrasi yang diperlukan.
Bangun Tanpa Kode

Perlakukan backend yang digenerasi seperti dependency. Pilih komposisi: sambungkan fitur di sekitar aplikasi yang digenerasi alih-alih mengedit logika inti.

Utamakan konfigurasi dan komposisi

Sebelum menulis kode, periksa apakah perilaku bisa ditambahkan melalui konfigurasi, hook, atau komposisi standar. Middleware contoh bagus: tambahkan di edge (router/HTTP stack) agar bisa dihapus atau diubah urutannya tanpa menyentuh logika bisnis.

Jika Anda membutuhkan perilaku baru (rate limiting, audit logging, request ID), simpan di paket Anda sendiri dan daftarkan dari satu file integrasi. Dalam review, harus mudah dijelaskan: "satu paket baru, satu titik registrasi".

Gunakan adapter untuk menghindari bocornya tipe yang digenerasi

Model dan DTO yang digenerasi sering berubah lintas ekspor. Untuk mengurangi sakit upgrade, terjemahkan di boundary:

  • Konversi tipe request yang digenerasi ke struct internal milik Anda.
  • Jalankan logika domain hanya menggunakan struct milik Anda.
  • Konversi hasil kembali ke tipe response yang digenerasi.

Dengan cara itu, jika tipe yang digenerasi bergeser, compiler menunjuk ke satu tempat yang harus diperbarui.

Saat Anda benar-benar harus menyentuh kode yang digenerasi, isolasi itu ke satu file wiring. Hindari suntingan di banyak handler yang digenerasi.

// internal/integrations/http.go
func RegisterCustom(r *mux.Router) {
    r.Use(RequestIDMiddleware)
    r.Use(AuditLogMiddleware)
}

Aturan praktis: jika Anda tidak bisa mendeskripsikan perubahan dalam 2-3 kalimat, kemungkinan perubahan itu terlalu terentang.

Cara menjaga diff tetap dapat dikelola seiring waktu

Tujuannya agar re-export tidak berubah menjadi minggu konflik. Jaga suntingan kecil, mudah ditemukan, dan mudah dijelaskan.

Gunakan Git sejak hari pertama dan pisahkan update yang digenerasi dari pekerjaan kustom Anda. Jika dicampur, Anda tidak akan tahu apa yang menyebabkan bug nanti.

Rutinitas commit yang bisa dibaca:

  • Satu tujuan per commit ("Add request ID middleware", bukan "misc fixes").
  • Jangan mencampur perubahan format saja dengan perubahan logika.
  • Setelah setiap re-export, commit update yang digenerasi dulu, lalu commit penyesuaian kustom Anda.
  • Gunakan pesan commit yang menyebut paket atau file yang Anda ubah.

Simpan CHANGELOG_CUSTOM.md sederhana yang mencantumkan setiap kustomisasi, kenapa ada, dan di mana lokasinya. Ini sangat berguna dengan ekspor AppMaster karena platform bisa menghasilkan kembali kode sepenuhnya dan Anda ingin peta cepat apa yang harus diterapkan ulang atau divalidasi.

Kurangi noise diff dengan format dan aturan lint yang konsisten. Jalankan gofmt di setiap commit dan gunakan cek yang sama di CI. Jika kode yang digenerasi menggunakan gaya tertentu, jangan "membersihkannya" secara manual kecuali Anda siap mengulangi pembersihan itu setelah setiap re-export.

Jika tim Anda mengulangi suntingan manual yang sama setelah setiap ekspor, pertimbangkan workflow patch: ekspor, terapkan patch (atau script), jalankan tes, deploy.

Rencanakan upgrade: re-export, merge, dan validasi

Pindah dari ekspor ke produksi
Deploy ke AppMaster Cloud atau cloud Anda sendiri setelah mengekspor dan memvalidasi perubahan.
Deploy Aplikasi

Upgrade paling mudah ketika Anda memperlakukan backend sebagai sesuatu yang bisa Anda regenerasi, bukan sesuatu yang dipelihara manual selamanya. Tujuan konsisten: ekspor ulang kode bersih, lalu terapkan kembali perilaku kustom melalui titik integrasi yang sama setiap kali.

Pilih ritme upgrade yang sesuai toleransi risiko dan seberapa sering aplikasi berubah:

  • Per rilis platform jika Anda membutuhkan perbaikan keamanan atau fitur baru cepat
  • Per kuartal jika aplikasi stabil dan perubahan kecil
  • Hanya saat diperlukan jika backend jarang berubah dan tim kecil

Saat waktunya upgrade, lakukan re-export dry-run di branch terpisah. Bangun dan jalankan versi yang diekspor baru itu sendiri dulu, sehingga Anda tahu apa yang berubah sebelum lapisan kustom Anda terlibat.

Kemudian terapkan kembali kustomisasi melalui seam yang direncanakan (registrasi middleware, grup router kustom, paket kustom Anda). Hindari suntingan bedah di file yang digenerasi. Jika sebuah perubahan tidak bisa diekspresikan melalui titik integrasi, itu sinyal untuk menambahkan seam baru sekali, lalu gunakan itu selamanya.

Validasi dengan checklist regresi singkat yang fokus pada perilaku:

  • Alur auth bekerja (login, refresh token, logout)
  • 3 sampai 5 endpoint API kunci mengembalikan kode status dan bentuk yang sama
  • Satu unhappy path per endpoint (input buruk, auth hilang)
  • Job background atau tugas terjadwal masih berjalan
  • Endpoint health/readiness mengembalikan OK di setup deployment Anda

Jika Anda menambahkan audit logging middleware, verifikasi bahwa log masih menyertakan user ID dan nama route untuk satu operasi tulis setelah setiap re-export dan merge.

Kesalahan umum yang menyulitkan upgrade

Cara tercepat merusak re-export Anda berikutnya adalah mengedit file yang digenerasi "hanya sekali". Rasanya tidak berbahaya saat Anda memperbaiki bug kecil atau menambahkan cek header, tapi beberapa bulan kemudian Anda tidak akan ingat apa yang diubah, kenapa, atau apakah generator sekarang menghasilkan output yang sama.

Perangkap lain adalah menyebarkan kode kustom ke mana-mana: helper di satu paket, cek auth kustom di paket lain, tweak middleware dekat routing, dan handler satu-off di folder acak. Tidak ada yang punya, dan setiap merge menjadi perburuan harta karun. Simpan perubahan di beberapa tempat yang jelas.

Ketergantungan ketat pada internal generator

Upgrade menyakitkan ketika kode kustom Anda bergantung pada struct internal yang digenerasi, field privat, atau detail layout paket. Bahkan refactor kecil di kode yang digenerasi bisa memutus build Anda.

Boundary yang lebih aman:

  • Gunakan DTO request/response yang Anda kontrol untuk endpoint kustom.
  • Berinteraksi dengan lapisan yang digenerasi melalui interface atau fungsi yang diekspor, bukan tipe internal.
  • Buat keputusan middleware berdasarkan primitif HTTP (header, method, path) bila memungkinkan.

Melewatkan tes di area yang paling dibutuhkan

Bug middleware dan routing menyita waktu karena kegagalan bisa tampak seperti 401 acak atau "endpoint not found". Beberapa tes fokus menyelamatkan jam kerja.

Contoh realistis: Anda menambahkan audit middleware yang membaca body request untuk logging, dan tiba-tiba beberapa endpoint menerima body kosong. Tes kecil yang mengirim POST melalui router dan memeriksa efek samping audit serta perilaku handler menangkap regresi itu dan memberi keyakinan setelah re-export.

Checklist pra-rilis cepat

Taruh aturan bisnis di model
Gunakan alat visual untuk field, validasi, dan permission agar aturan tidak menyimpang.
Mulai

Sebelum mengirim perubahan kustom, lakukan pemeriksaan cepat yang melindungi Anda selama re-export berikutnya. Anda harus tahu persis apa yang harus diterapkan ulang, di mana ia berada, dan bagaimana memverifikasinya.

  • Simpan semua kode kustom di satu paket/folder dengan nama jelas (misalnya, internal/custom/).
  • Batasi touchpoint dengan wiring yang digenerasi ke satu atau dua file. Perlakukan mereka seperti jembatan: daftar route sekali, daftar middleware sekali.
  • Dokumentasikan urutan middleware dan alasannya ("Auth before rate limiting" dan kenapa).
  • Pastikan setiap endpoint kustom memiliki setidaknya satu tes yang membuktikan ia bekerja.
  • Tulis routine upgrade yang dapat diulang: re-export, terapkan kembali lapisan kustom, jalankan tes, deploy.

Jika Anda hanya melakukan satu hal, buat catatan upgrade. Itu mengubah "sepertinya baik" menjadi "kita bisa membuktikan masih bekerja".

Contoh: menambahkan audit logging dan endpoint health

Kirim endpoint kustom dengan rapi
Prototipe endpoint baru di AppMaster, lalu pasang handler kustom kecil di tempat yang tepat.
Coba Sekarang

Misalkan Anda mengekspor backend Go (misalnya dari AppMaster) dan ingin dua tambahan: request ID plus audit logging untuk aksi admin, dan endpoint /health kecil untuk monitoring. Tujuannya membuat perubahan mudah diterapkan ulang setelah re-export.

Untuk audit logging, letakkan kode di tempat yang jelas Anda miliki seperti internal/custom/middleware/. Buat middleware yang (1) membaca X-Request-Id atau menghasilkan satu, (2) menyimpannya di context request, dan (3) mencatat satu baris audit singkat untuk route admin (method, path, user ID bila ada, dan hasil). Batasi satu baris per request dan hindari membuang payload besar.

Pasang di edge, dekat tempat route didaftarkan. Jika router yang digenerasi punya satu file setup, tambahkan satu hook kecil di sana yang mengimpor middleware Anda dan menerapkannya hanya ke grup admin.

Untuk /health, tambahkan handler kecil di internal/custom/handlers/health.go. Kembalikan 200 OK dengan body pendek seperti ok. Jangan tambahkan auth kecuali monitor Anda membutuhkannya. Jika menambahkan, dokumentasikan.

Struktur commit untuk menjaga perubahan mudah diterapkan ulang:

  • Commit 1: Tambah internal/custom/middleware/audit.go dan tes
  • Commit 2: Wire middleware ke route admin (diff sekecil mungkin)
  • Commit 3: Tambah internal/custom/handlers/health.go dan daftarkan /health

Setelah upgrade atau re-export, verifikasi dasar: route admin masih memerlukan auth, request ID muncul di log admin, /health merespon cepat, dan middleware tidak menambahkan latensi tampak di beban ringan.

Langkah berikutnya: tetapkan workflow kustomisasi yang bisa Anda pertahankan

Perlakukan setiap ekspor seperti build baru yang bisa Anda ulang. Kode kustom Anda harus terasa sebagai lapisan tambahan, bukan rewrite.

Tentukan apa yang masuk ke kode vs model no-code berikutnya. Aturan bisnis, bentuk data, dan logika CRUD standar biasanya masuk ke model. Integrasi satu kali dan middleware spesifik perusahaan biasanya masuk ke kode kustom.

Jika Anda menggunakan AppMaster (appmaster.io), rancang pekerjaan kustom Anda sebagai lapisan ekstensi bersih di sekitar backend Go yang digenerasi: simpan middleware, route, dan helper di sejumlah folder kecil yang dapat Anda bawa maju lintas re-export, dan biarkan file yang dimiliki generator tidak disentuh.

Pengecekan akhir yang praktis: jika rekan bisa mengekspor ulang, menerapkan langkah Anda, dan mendapatkan hasil yang sama dalam waktu kurang dari satu jam, workflow Anda dapat dipertahankan.

FAQ

Can I just edit the exported Go files directly?

Jangan mengedit file yang dimiliki generator. Letakkan perubahan Anda di paket yang jelas Anda miliki (misalnya, internal/custom/) dan hubungkan melalui satu titik integrasi kecil dekat startup server. Dengan begitu re-export biasanya menggantikan kode yang digenerasi sementara lapisan kustom Anda tetap utuh.

How do I tell which parts of the exported repo will be regenerated?

Asumsikan apa pun yang diberi komentar seperti “Code generated” atau “DO NOT EDIT” akan ditulis ulang. Perhatikan juga struktur folder yang sangat seragam, penamaan yang berulang, dan minimnya komentar manusia — itu semua adalah jejak generator. Aturan paling aman: perlakukan bagian-bagian ini sebagai read-only meski secara teknis Anda bisa mengubahnya.

What does a good “single integration point” look like?

Pertahankan satu file "hook" yang mengimpor paket kustom Anda dan mendaftarkan semuanya: middleware, route tambahan, dan sedikit wiring. Jika Anda mulai menyentuh lima file routing atau banyak handler yang digenerasi, berarti Anda sedang mendekati fork yang menyulitkan upgrade.

How do I add custom middleware without breaking upgrades?

Tulislah middleware di paket Anda sendiri dan buat fungsinya sempit, seperti Request ID, audit logging, rate limit, atau header khusus. Kemudian daftarkan sekali pada saat pembuatan router atau HTTP stack, bukan per-route di dalam handler yang digenerasi. Satu pengecekan sederhana dengan httptest untuk header atau status yang diharapkan biasanya cukup untuk mendeteksi regresi setelah re-export.

How can I add a new endpoint without forking the generated backend?

Tentukan kontrak endpoint dulu, lalu implementasikan handler di paket kustom Anda dan daftarkan route pada titik integrasi yang sama dengan middleware. Buat handler sederhana: validasi input, panggil service yang ada, kembalikan bentuk error yang konsisten, dan hindari menyalin logika handler yang digenerasi. Ini menjaga perubahan Anda portable ke ekspor baru.

Why do routes and middleware order change after a re-export?

Urutan route bisa berubah ketika generator mengubah cara pendaftaran route, pengelompokan, atau rantai middleware. Untuk melindungi diri, andalkan seam pendaftaran yang stabil dan dokumentasikan urutan middleware tepat di sebelah baris registrasinya. Jika urutan penting (mis. auth sebelum audit), jelaskan secara eksplisit dan verifikasi dengan tes kecil.

How do I avoid duplicating logic between the no-code model and custom Go code?

Jika Anda mengimplementasikan aturan yang sama di dua tempat, keduanya akan menyimpang dari waktu ke waktu dan Anda akan mendapatkan perilaku yang membingungkan. Taruh aturan bisnis yang seharusnya bisa diubah non-developer (field, validasi, workflow, permission) di model no-code, dan simpan concern infrastruktur (logging, integrasi auth, rate limit, header) di lapisan Go kustom. Pembagian ini harus jelas bagi siapa pun yang membaca repo.

How do I stop my custom code from depending on generated internal types?

DTO dan struct internal yang digenerasi bisa berubah saat ekspor ulang, jadi isolasi churn itu di boundary. Konversi input menjadi struct internal milik Anda, jalankan logika domain pada struct itu, lalu konversi hasil kembali di tepi sistem. Saat tipe berubah setelah re-export, Anda hanya perlu memperbarui satu adapter, bukan mengejar error kompilasi di seluruh lapisan kustom.

What’s the best Git workflow for re-exports and customizations?

Pisahkan update yang digenerasi dari pekerjaan kustom Anda di Git sehingga Anda tahu apa yang berubah dan mengapa. Alur praktis: commit perubahan hasil re-export terlebih dahulu, lalu commit wiring minimal dan penyesuaian lapisan kustom. Menyimpan changelog kecil yang menjelaskan apa yang Anda tambahkan dan dimana membuat upgrade berikutnya jauh lebih cepat.

How should I plan upgrades so re-exports don’t turn into days of conflicts?

Lakukan dry-run re-export di branch terpisah, bangun dan jalankan versi yang diekspor baru itu sendiri dulu, sehingga Anda tahu apa yang berubah sebelum lapisan kustom Anda dilibatkan. Kemudian terapkan kembali kustomisasi melalui seam yang sama, lalu jalankan validasi singkat pada beberapa endpoint kunci dan satu unhappy path per endpoint. Jika sesuatu tidak bisa diekspresikan melalui seam, tambahkan satu seam baru sekali dan gunakan itu selamanya.

Mudah untuk memulai
Ciptakan sesuatu yang menakjubkan

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

Memulai