JSON API dengan Yesod
Penjelasan
Yesod bisa melayani JSON API dengan mudah karena terintegrasi langsung dengan library aeson, library JSON standar Haskell. Entity Persistent yang dideklarasikan dengan json di config/models otomatis mendapat instance ToJSON dan FromJSON, sehingga handler tinggal memanggil returnJson atau selectRep untuk mengembalikan data sebagai response JSON. Untuk endpoint yang menerima body JSON (misalnya POST create), dipakai requireCheckJsonBody yang otomatis mem-parsing body request menjadi tipe Haskell tertentu lewat instance FromJSON, sekaligus mengembalikan error otomatis jika body tidak sesuai skema. Pola ini memberi keamanan tipe yang sama seperti form, tapi untuk klien non-browser seperti mobile app atau frontend SPA.
Contoh Konsep
-- config/models: Produk json
getApiProdukR :: Handler Value
getApiProdukR = do
produkList <- runDB $ selectList [] []
returnJson produkList
postApiProdukR :: Handler Value
postApiProdukR = do
produk <- requireCheckJsonBody :: Handler Produk
produkId <- runDB $ insert produk
returnJson $ object ["id" .= produkId]
Praktikum
Buat handler getApiArtikelR yang mengembalikan semua Artikel sebagai JSON memakai returnJson.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Tambahkan keyword json setelah nama entity di config/models jika ingin entity tersebut otomatis mendukung serialisasi JSON tanpa menulis instance ToJSON manual.