Study
Yesod

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.

Editor Latihan

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.