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.
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.