Jenis-jenis Arsitektur Framework Backend

Setiap framework/library harus memiliki cara agar bisa dikembangkan tanpa mengubah kode internal—disebut dengan open-close principle. Disini kita bahas apa saja pondasi arsitektur backend yang sering digunakan berbagai framework/library backend.

Middleware Pattern

Middleware adalah sistem kecil yang menjembatani komunikasi dari berbagai sub-sistem lainnya. Aplikasi Backend Middleware biasanya menjembatani proses request dari browser terhadap sistem internal, contohnya Database, Cache, Sistem atau sub-sistem lainnya.

Middleware menghubungkan middleware lainnya secara berurutan, biasanya dibuat oleh user library/framework, jarang disiapkan oleh library secara built-in kecuali dibantu oleh projek open-source lainnya.

  • Express.js berjalan diatas arsitektur middleware seperti gambar diatas, middleware manapun bisa akses dan modifikasi req dan res. Expressjs bisa dibangun menggunakan middleware tambahan seperti parsing, validasi, view engine, dan lain-lain.
  • NestJS, pada dasarnya berdiri diatas expresjs/fastify middleware, tetapi mereka punya framework penerapan Guards, dan Filter sebelum route handler yang sebenarnya. Nestjs punya kerangka siap pakai dari pada dibuat oleh user.
  • Hono, framework server dengan algoritma Routing tercepat dan dapat berjalan di berbagai Serverless Platform.
  • Gin, framework berbahasa Golang menggunakan konsep middleware, dan terdapat template middleware yang siap pakai seperti logging dan recovery.
  • H3, framework mini server dengan Web Standard.

Metode middleware memberikan kebebasan pada pengguna untuk membuat middleware sendiri, seperti validation, transformation, response mutation, dan lain-lain. User membuat middleware masing-masing dengan kreasinya masing-masing. Kelemahannya adalah sulit untuk tracing masalah karena berbagai middleware berjalan secara anonymous dan tanpa arah yang jelas akan sulit untuk memulai projek baru dan perlu update berbagai library middleware.

Hook Pattern

Metode hook menyiapkan interface untuk diimplementasi lewat plugin-plugin. Tersedia berbagai hook untuk memodifikasi alur proses utama. Kelebihan metode ini adalah tersedia berbagai interface siap pakai, dari pada menyiapkan middleware-middleware dan urutan eksekusi tanpa resposibilitas yang jelas—merupakan kelemahan middleware.

  • Elysia plugin pattern, user bisa mengatur berbagai hook yang dibutuhkan dalam plugin.
  • NestJS menjelaskan peran Guard dan Pipes sebagai solusi dari middleware, dalam dokumentasinya mengatakan “…But middleware, by its nature, is dumb“.

Metode hook mudah digunakan karena tidak perlu membuat middleware dan library tambahan, karena semua aksi dari plugin di eksekusi sesuai fungsinya masing-masing. Setiap plugin memiliki label untuk memudahkan debuggin problem. Cara ini bertujuan untuk menjaga open-closed principle, bisa extend fungsi dari aplikasi tanpa mengubah kode utama.

MVC (Model-View-Controller)

Pendekatan diatas, seluruh proses request harus ditangani pengguna, mulai dari membuat mulai dari validasi, handle data, transform data, hingga tampilan degan kode terpisah-pisah. Beda dengan MVC fokus pada solusi, yaitu siapkan data dan tampilan lalu tampilkan melalui Controller.

MVC punya Tiga komponen yaitu Model, Controller dan View. Model untuk mengolah data, Controller untuk menerima request dan mengirimkan view ke browser, sedangkan View berupa kode template tampilan.

  • Sail.js framework MVC dari node.js
  • Laravel, framework backend paling populer berbahasa PHP.
  • Django, Django tidak menyebut sebagai MVC, tanpa controller melainkan langsung ditangani view dan template.

Pendekatan MVC jadi andalan jika pengguna ingin membuat aplikasi yang siap pakai secepat mungkin. Tidak terbatas Logging, validasi, error handling, validasi, parsing request, fitur-fitur bawaan dari MVC sudah lebih dari cukup untuk membangun website.

Server-Side Rendering

SSR atau Server-side Rendering awalnya adalah CSR (Client-Side Rendering) dari framework UI seperti React.js, Vue.js, Angular, dan Svelte. SSR melengkapi kelemahan CSR tidak bisa dibaca tanpa javascript sehingga berdampak pada SEO dan sulit dibaca oleh crawler engine.

Oleh karena itu, Server-side Rendering adalah metode server untuk generate halaman berupa HTML sehingga mudah dibaca oleh SEO. Mirip dengan MVC, tetapi menggunakan kode yang sama dengan Framework UI yang digunakan.

  • Next.js, framework fullstack React.js yang paling populer, didukung oleh vercel sebagai server deployment.
  • Nuxt, Framework fullstack Vue.js opensource yang punya fitur server bawaan seperti logging, validasi, SSR, dan berbagai modul yang siap pakai.
  • Sveltekit, Meta-framework mendukung kode svelte dengan fitur routing, SSR, hingga prerendering

Berbeda dengan metode sebelumnya, SSR berfokus pada bagaimana tampilan dibuat dan dibentuk tanpa mengorbankan reaktif dari framework UI. Biasanya tidak memiliki authentikasi dan session bawaan, jadi butuh pengguna/developer untuk mengembangkan authentikasi sendiri.

Berbagai metode arsitektur backend dapat digunakan untuk mengolah data dan menampilkan UI. Berbagai framework dibuat memiliki landasan arsitektur yang berbeda-beda. Masing-masing punya kelebihdan dan kekurangan. Kebijakan dari developer untuk memilih framework yang digunakan.

Add a comment

Subscribe now!