Study
Yesod

Type-Safe Routing (File Routes + Dispatch)

Penjelasan

Route di Yesod didefinisikan dalam file teks khusus config/routes, tiap baris berisi pola URL, nama tipe route (diakhiri huruf R sesuai konvensi, misalnya HomeR), dan method HTTP yang didukung. Dari file ini, Template Haskell menghasilkan tipe data Route App dengan constructor untuk setiap route, sehingga link ke halaman lain ditulis sebagai nilai Haskell (misalnya ProdukR produkId), bukan string URL mentah. Karena route adalah tipe data biasa, kompiler akan menolak kode yang mencoba membuat link ke route yang tidak ada atau memberi parameter dengan tipe salah, inilah inti dari type-safe routing. Untuk merender link di template, dipakai fungsi @{RouteR} di dalam Hamlet yang otomatis menghasilkan URL string yang benar berdasarkan tipe route tersebut.

Contoh Konsep

-- config/routes
/                HomeR       GET
/produk          ProdukR     GET POST
/produk/#ProdukId  ProdukDetailR GET

-- src/Handler/Produk.hs
getProdukDetailR :: ProdukId -> Handler Html
getProdukDetailR produkId = do
  produk <- runDB $ get404 produkId
  defaultLayout [whamlet|<h1>#{produkNama produk}|]

-- Membuat link type-safe di template Hamlet:
-- <a href=@{ProdukDetailR produkId}>Lihat detail

Praktikum

Tambahkan route baru /artikel/#ArtikelId bernama ArtikelDetailR dengan method GET di config/routes blog_app.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Nama tipe route selalu diakhiri huruf R besar sebagai konvensi Yesod, ini membantu membedakan tipe route dari tipe data biasa saat membaca kode.