Sebuah showcase terbaru dari aplikasi web Rust dan TypeScript telah memicu diskusi ekstensif di antara para developer tentang metode terbaik untuk mempertahankan type safety di berbagai bahasa pemrograman. Proyek asli menggunakan spesifikasi OpenAPI untuk menghasilkan klien yang type-safe, namun anggota komunitas telah berbagi berbagai pendekatan alternatif dan mengangkat pertanyaan arsitektur yang penting.
Berbagai Tools Bermunculan untuk Generasi Type Lintas Bahasa
Komunitas developer telah mengidentifikasi beberapa tools selain OpenAPI untuk menghasilkan definisi TypeScript dari kode Rust. Crate ts-rs telah mendapat popularitas untuk secara otomatis menghasilkan definisi TypeScript yang dapat disalin langsung ke aplikasi web. Opsi lain, typeshare dari 1Password, menawarkan fungsionalitas serupa meskipun memiliki beberapa keanehan. Tools ini bertujuan untuk menyelesaikan tantangan fundamental dalam menjaga definisi type tetap tersinkronisasi antara codebase backend dan frontend tanpa pemeliharaan manual.
Catatan: Crate adalah paket atau library Rust yang dapat dibagikan dan digunakan kembali di berbagai proyek.
Tool Populer untuk Generasi Type
Tool | Bahasa | Deskripsi |
---|---|---|
ts-rs | Rust → TypeScript | Menghasilkan definisi TypeScript secara otomatis |
typeshare | Rust → TypeScript | Solusi berbagi type dari 1Password |
FastAPI + Pydantic | Python → TypeScript | Menghasilkan spesifikasi OpenAPI untuk generasi type |
poem-openapi | Rust | Definisi layanan OpenAPI yang ergonomis |
utoipa-axum | Rust | Integrasi OpenAPI untuk framework Axum |
Integrasi WebAssembly Menghadirkan Kemungkinan Baru
Beberapa developer menyatakan ketertarikan pada WebAssembly (WASM) sebagai pendekatan alternatif untuk menggabungkan Rust dan TypeScript. Sementara beberapa mencatat bahwa fitur impor Rust langsung dari Parcel telah dihapus di versi 2, yang lain menunjukkan bahwa mengintegrasikan output wasm-pack ke dalam proyek Vite tetap mudah. Pendekatan WASM memungkinkan kode Rust berjalan langsung di browser, berpotensi menghilangkan kebutuhan untuk layanan backend terpisah dalam beberapa kasus.
Pilihan Arsitektur Menimbulkan Pertanyaan Performa
Setup dual-server yang umum digunakan dalam aplikasi ini telah menimbulkan perdebatan tentang overhead dan kompleksitas. Selama pengembangan, proyek biasanya menjalankan server terpisah untuk frontend dan API, namun deployment produksi sangat bervariasi. Beberapa developer mengemas kedua layanan ke dalam satu container dengan proxying internal, sementara yang lain mengaktifkan static file serving pada endpoint API atau men-deploy mereka sebagai layanan yang sepenuhnya independen.
Saya suka tidak dipanggil di malam hari, jadi saya sangat lebih memilih backend rust. Saya memiliki pengalaman dengan backend TS, Python, dan Rust dan backend Rust sangat jarang gagal bagi saya.
Pemilihan Framework Mempengaruhi Developer Experience
Pilihan antara web framework telah menjadi titik diskusi, khususnya mengenai Poem versus Axum untuk backend Rust. Sementara Axum menikmati popularitas yang lebih luas, integrasi OpenAPI dari Poem melalui poem-openapi menyediakan kemampuan definisi API yang lebih ergonomis. Untuk developer yang lebih memilih Axum, crate utoipa-axum menawarkan fungsionalitas OpenAPI serupa, meskipun dengan pola sintaks dan workflow yang berbeda.
Komponen Arsitektur Proyek
- Backend: Rust dengan framework web Poem
- Frontend: TypeScript dengan SvelteKit
- Build System: Vite untuk pengembangan dan produksi
- Type Safety: Generasi spesifikasi OpenAPI dan generasi klien
- Development: Terminal multiplexer Zellij dengan layout khusus
Type Safety Lintas Bahasa Meluas Melampaui Rust
Percakapan telah meluas untuk mencakup kombinasi bahasa lain, dengan developer Python dan TypeScript berbagi solusi mereka sendiri. FastAPI dengan Pydantic telah muncul sebagai pilihan populer untuk backend Python, secara otomatis menghasilkan spesifikasi OpenAPI yang dapat dikonversi ke type TypeScript. Pendekatan ini menghilangkan verifikasi type manual dengan menghasilkan type frontend langsung dari definisi backend.
Diskusi yang sedang berlangsung menyoroti bagaimana type safety di berbagai bahasa pemrograman tetap menjadi area inovasi yang aktif, dengan tools dan pendekatan baru terus bermunculan saat developer mencari cara yang lebih efisien untuk membangun aplikasi web yang handal.
Referensi: Rust + TypeScript Web Application