RESTful Resource Pattern
Penjelasan
Meski Yesod tidak punya generator resource otomatis seperti resources di Phoenix, pola RESTful tetap bisa disusun manual dengan konsisten: route collection (/produk) menangani GET untuk index dan POST untuk create, sedangkan route item (/produk/#ProdukId) menangani GET untuk show, PUT/PATCH untuk update, dan DELETE untuk delete. Konsistensi penamaan ini memudahkan navigasi kode karena setiap handler langsung menunjukkan method dan tujuan REST-nya lewat nama fungsi. Untuk API JSON yang benar-benar RESTful, biasanya dipisahkan namespace route (misalnya semua di bawah /api) dan handler mengembalikan Value (JSON) alih-alih Html, sementara actionnya (getProdukR, postProdukR, putProdukDetailR, deleteProdukDetailR) tetap mengikuti pola resource yang sama seperti versi HTML.
Contoh Konsep
-- config/routes
/api/produk ApiProdukR GET POST
/api/produk/#ProdukId ApiProdukDetailR GET PUT DELETE
-- Handler/Api/Produk.hs
getApiProdukR :: Handler Value -- index
postApiProdukR :: Handler Value -- create
getApiProdukDetailR :: ProdukId -> Handler Value -- show
putApiProdukDetailR :: ProdukId -> Handler Value -- update
deleteApiProdukDetailR :: ProdukId -> Handler Value -- delete
Praktikum
Susun route RESTful untuk resource artikel di bawah /api/artikel mengikuti pola index/create pada collection dan show/update/delete pada item, lalu tulis signature semua handlernya.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Pisahkan handler HTML dan JSON ke modul Handler berbeda (misalnya Handler.Produk vs Handler.Api.Produk) supaya tidak ada satu fungsi yang mencoba menangani dua format response sekaligus.