Reka Bentuk API yang Bersih dalam Node.js
Kebanyakan API Node.js bermula dengan satu fail server.js dan beberapa laluan (routes). Ini berfungsi apabila aplikasi masih kecil.
Kemudian, aplikasi mula berkembang.
Laluan bertambah banyak. Logik perniagaan mula meresap ke dalam pengendali laluan (route handlers). Pengendalian ralat menjadi kucar-kacir dengan kod yang disalin dan ditampal. Pembangun baharu sukar untuk mencari di mana sesuatu fungsi itu berada. API masih berfungsi, tetapi ia menjadi sukar untuk diselenggara.
Reka bentuk API yang bersih dapat mengelakkan perkara ini. Anda memerlukan struktur yang mengasingkan tanggungjawab (separates concerns).
Berikut adalah cara untuk membina lapisan API secara profesional:
- Struktur Projek: Gunakan folder ciri (feature folders). Setiap domain harus mempunyai router, controller, service, dan schema sendiri.
- Versi (Versioning): Mulakan dengan /api/v1/ dari hari pertama. Menambah v2 kemudian seharusnya hanya melibatkan pemindahan folder, bukannya pengubahsuaian semula (refactor) secara menyeluruh.
- Lapisan Controller: Controller mengendalikan HTTP. Ia menterjemah permintaan (requests) kepada panggilan service dan menghantar respons. Ia tidak mengandungi logik perniagaan.
- Lapisan Service: Di sinilah logik perniagaan anda berada. Service tidak sepatutnya mengetahui tentang objek req atau res. Ia hanya mementingkan data dan peraturan.
- Pengesahan (Validation): Gunakan Zod pada sempadan (boundary). Sahkan input sebelum ia sampai ke controller anda. Ini menghalang data yang tidak sah daripada merosakkan logik anda.
- Pengendalian Ralat Berpusat: Gunakan satu pengendali ralat tunggal untuk keseluruhan aplikasi. Ini memastikan setiap respons ralat mempunyai struktur yang sama.
- Respons yang Konsisten: Gunakan pembantu (helper) untuk membentuk respons kejayaan dan ralat anda. JSON yang boleh diramal memudahkan urusan pembangun frontend.
- Had Kadar (Rate Limiting): Lindungi endpoint anda daripada penyalahgunaan dengan middleware.
- Dokumentasi: Gunakan Swagger untuk menjana dokumentasi API interaktif secara automatik.
Mengapa ini penting:
Apabila anda mengasingkan lapisan-lapisan ini, anda mendapat fleksibiliti. Jika anda perlu bertukar daripada pangkalan data simulasi (mock database) kepada yang sebenar, anda hanya perlu mengubah service tersebut. Controller dan router tidak akan terjejas.
Jika anda mahukan prestasi yang lebih baik dan sokongan TypeScript terbina dalam, pertimbangkan Fastify. Prinsip struktur tetap sama, tetapi framework tersebut mengendalikan lebih banyak perkara untuk anda.
Berhenti meletakkan segalanya dalam satu fail buat masa ini. Membina struktur yang betul dari awal bukanlah "overengineering". Ia adalah keperluan minimum untuk backend yang boleh diselenggara.
Bagaimanakah tetapan Express anda sekarang? Adakah anda menggunakan seni bina berlapis (layered architecture) atau yang bersifat organik?
Sumber: https://dev.to/gavincettolo/clean-api-design-in-nodejs-a-practical-guide-3a32