Belajar ElysiaJS - Routing & HTTP Methods
Episode 4 of 21

Belajar ElysiaJS - Routing & HTTP Methods

Menguasai routing di ElysiaJS: definisi route dengan berbagai HTTP method, dynamic parameters, query strings, validasi bawaan, dan route grouping untuk mengorganisir endpoint secara modular.

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Setelah di episode 3 kita membuat proyek pertama dan menjalankan server, pada episode ini kita akan memahami routing — fondasi dari setiap API. ElysiaJS menawarkan pendekatan yang sangat elegan untuk routing: setiap method HTTP punya fungsi dedicated, parameter otomatis terekspos ke handler, dan validasi bawaan memastikan request selalu valid.

Defining Routes

ElysiaJS menyediakan fungsi untuk setiap HTTP method:

Definisi route dengan berbagai HTTP method
import { Elysia } from 'elysia'
 
const app = new Elysia()
  .get('/users', () => 'List users')
  .post('/users', ({ body }) => `Created: ${body.name}`)
  .put('/users/:id', ({ params, body }) => `Updated ${params.id}`)
  .delete('/users/:id', () => `Deleted`)
  .patch('/users/:id', ({ body }) => `Patched ${params.id}`)
  .listen(3000)

Setiap fungsi route menerima path sebagai parameter pertama, dan handler sebagai parameter kedua. Return value handler secara otomatis menjadi response.

Dynamic Parameters

Parameter dinamis didefinisikan dengan prefix : di path:

Dynamic parameters dengan TypeBox
import { Elysia, t } from 'elysia'
 
const app = new Elysia()
  .get('/user/:id', ({ params }) => {
    return { id: params.id, name: 'John' }
  }, {
    params: t.Object({
      id: t.String(),
    })
  })
  .listen(3000)

Perhatikan bahwa params.id otomatis bertipe string — TypeBox menginferensi tipe dari schema. Kalian juga bisa menggunakan t.Numeric() untuk memastikan parameter berupa angka:

Parameter numerik
.get('/user/:id', ({ params }) => {
  return { id: params.id } // params.id bertipe number
}, {
  params: t.Object({
    id: t.Numeric(),
  })
})

Typed Parameters & Query Strings

Query strings didefinisikan dengan parameter query di route options:

Query string dengan validasi otomatis
.get('/search', ({ query }) => {
  return { term: query.q, page: query.page }
}, {
  query: t.Object({
    q: t.String(),
    page: t.Optional(t.Numeric()),
  })
})

Jika client mengirim request tanpa query q, ElysiaJS secara otomatis mengembalikan 422 Unprocessable Entity — tidak perlu validasi manual di handler.

Multiple HTTP Methods dalam Satu Route

Untuk mendaftarkan beberapa method ke path yang sama:

Multiple methods di satu route
import { Elysia } from 'elysia'
 
const app = new Elysia()
  .route('/resource', {
    get: () => 'Get resource',
    post: ({ body }) => 'Create resource',
    put: ({ body }) => 'Update resource',
    delete: () => 'Delete resource',
  })
  .listen(3000)

Ini lebih bersih daripada mendefinisikan route terpisah untuk setiap method.

Route Grouping

Route grouping memungkinkan kalian mengorganisir endpoint ke dalam namespace:

Route grouping untuk modularisasi
import { Elysia } from 'elysia'
 
const app = new Elysia()
  .group('/api/v1', (app) =>
    app
      .get('/users', () => 'List users')
      .post('/users', ({ body }) => 'Create user')
  )
  .group('/api/v1', (app) =>
    app
      .get('/posts', () => 'List posts')
      .post('/posts', ({ body }) => 'Create post')
  )
  .listen(3000)

Grouping memudahkan pemisahan concern — kalian bisa memisahkan route berdasarkan domain (users, posts, auth) atau versi API.

Tip

Untuk proyek yang mulai tumbuh, pertimbangkan untuk memisahkan route ke file terpisah menggunakan plugin pattern — yang akan kita bahas mendalam di episode 7.

Penutup

Pada episode 4 ini, kalian telah menguasai fondasi routing di ElysiaJS — dari definisi route sederhana hingga dynamic parameters, query strings, multiple methods, dan route grouping.

Inti yang harus dibawa pulang:

  • ElysiaJS menyediakan fungsi dedicated untuk setiap HTTP method.
  • Dynamic parameters didefinisikan dengan :param dan otomatis terekspos ke handler.
  • Query strings didefinisikan dengan query option dan divalidasi otomatis.
  • Route grouping memudahkan pengorganisiran endpoint secara modular.
  • Validasi bawaan mengembalikan 422 jika request tidak valid.

Di episode 5 selanjutnya kita akan memahami request, response, dan type inference — memahami object context ctx, berbagai response type, status code, dan headers. Sampai jumpa di episode 5!

Belajar ElysiaJS - Routing & HTTP Methods | Belajar ElysiaJS