Paparan terbaru aplikasi web Rust dan TypeScript telah mencetuskan perbincangan meluas dalam kalangan pembangun mengenai kaedah terbaik untuk mengekalkan keselamatan jenis merentas bahasa pengaturcaraan yang berbeza. Projek asal menggunakan spesifikasi OpenAPI untuk menjana klien type-safe, tetapi ahli komuniti telah berkongsi pelbagai pendekatan alternatif dan membangkitkan soalan seni bina yang penting.
Pelbagai Alat Muncul untuk Penjanaan Jenis Merentas Bahasa
Komuniti pembangunan telah mengenal pasti beberapa alat selain daripada OpenAPI untuk menjana definisi TypeScript daripada kod Rust. Crate ts-rs telah mendapat populariti untuk menjana definisi TypeScript secara automatik yang boleh disalin terus ke aplikasi web. Pilihan lain, typeshare daripada 1Password, menawarkan fungsi yang serupa walaupun mempunyai beberapa keanehan. Alat-alat ini bertujuan untuk menyelesaikan cabaran asas mengekalkan definisi jenis yang disegerakkan antara pangkalan kod bahagian belakang dan hadapan tanpa penyelenggaraan manual.
Nota: Crate adalah pakej atau perpustakaan Rust yang boleh dikongsi dan digunakan semula merentas projek.
Alat Penjanaan Jenis Popular
Alat | Bahasa | Penerangan |
---|---|---|
ts-rs | Rust → TypeScript | Menjana definisi TypeScript secara automatik |
typeshare | Rust → TypeScript | Penyelesaian perkongsian jenis daripada 1Password |
FastAPI + Pydantic | Python → TypeScript | Menjana spesifikasi OpenAPI untuk penjanaan jenis |
poem-openapi | Rust | Definisi perkhidmatan OpenAPI yang ergonomik |
utoipa-axum | Rust | Integrasi OpenAPI untuk rangka kerja Axum |
Integrasi WebAssembly Membentangkan Kemungkinan Baru
Beberapa pembangun menyatakan minat terhadap WebAssembly ( WASM ) sebagai pendekatan alternatif untuk menggabungkan Rust dan TypeScript. Walaupun ada yang menyatakan bahawa ciri import Rust terus Parcel telah dikeluarkan dalam versi 2, yang lain menunjukkan bahawa mengintegrasikan output wasm-pack ke dalam projek Vite kekal mudah. Pendekatan WASM membolehkan kod Rust berjalan terus dalam pelayar, berpotensi menghapuskan keperluan untuk perkhidmatan bahagian belakang yang berasingan dalam sesetengah kes.
Pilihan Seni Bina Menimbulkan Persoalan Prestasi
Persediaan dwi-pelayan yang biasa digunakan dalam aplikasi ini telah menimbulkan perdebatan mengenai overhed dan kerumitan. Semasa pembangunan, projek biasanya menjalankan pelayan berasingan untuk bahagian hadapan dan API, tetapi penggunaan pengeluaran berbeza dengan ketara. Sesetengah pembangun membungkus kedua-dua perkhidmatan ke dalam satu bekas dengan proksi dalaman, manakala yang lain membolehkan penyajian fail statik pada titik akhir API atau menggunakannya sebagai perkhidmatan yang benar-benar bebas.
Saya suka tidak dipanggil pada waktu malam, jadi saya sangat lebih suka bahagian belakang rust. Saya mempunyai pengalaman dengan bahagian belakang TS, Python, dan Rust dan bahagian belakang Rust sangat jarang gagal untuk saya.
Pemilihan Rangka Kerja Mempengaruhi Pengalaman Pembangun
Pilihan antara rangka kerja web telah menjadi titik perbincangan, terutamanya mengenai Poem berbanding Axum untuk bahagian belakang Rust. Walaupun Axum menikmati populariti yang lebih luas, integrasi OpenAPI Poem melalui poem-openapi menyediakan keupayaan definisi API yang lebih ergonomik. Untuk pembangun yang lebih suka Axum, crate utoipa-axum menawarkan fungsi OpenAPI yang serupa, walaupun dengan sintaks dan corak aliran kerja yang berbeza.
Komponen Seni Bina Projek
- Backend: Rust dengan kerangka kerja web Poem
- Frontend: TypeScript dengan SvelteKit
- Sistem Binaan: Vite untuk pembangunan dan pengeluaran
- Keselamatan Jenis: Penjanaan spesifikasi OpenAPI dan penjanaan klien
- Pembangunan: Pengganda terminal Zellij dengan susun atur tersuai
Keselamatan Jenis Merentas Bahasa Melangkaui Rust
Perbualan telah berkembang untuk merangkumi gabungan bahasa lain, dengan pembangun Python dan TypeScript berkongsi penyelesaian mereka sendiri. FastAPI dengan Pydantic telah muncul sebagai pilihan popular untuk bahagian belakang Python, menjana spesifikasi OpenAPI secara automatik yang boleh ditukar kepada jenis TypeScript. Pendekatan ini menghapuskan pengesahan jenis manual dengan menjana jenis bahagian hadapan terus daripada definisi bahagian belakang.
Perbincangan yang berterusan menyerlahkan bagaimana keselamatan jenis merentas bahasa pengaturcaraan yang berbeza kekal sebagai bidang inovasi yang aktif, dengan alat dan pendekatan baru terus muncul ketika pembangun mencari cara yang lebih cekap untuk membina aplikasi web yang boleh dipercayai.
Rujukan: Aplikasi Web Rust + TypeScript