少し試行錯誤した後、Yesod で次の関数を作成して、JSON POST からオブジェクトを取得し、EventFolder
エンティティを作成してデータベースに保存することができました。
postAddEventFolderR :: Handler RepJson
postAddEventFolderR = do
r <- waiRequest
v <- liftIO . runResourceT $ requestBody r $$ sinkParser json
let v1 :: EventFolder
v1 = case fromJSON v of
Success a -> a
Error s -> error s
runDB $ insert $ v1
return $ RepJson $ toContent $ show v1
テスト関数は次のようになりcurl -H "Content-Type: application/json" -X POST -d '{"name":"test_folder"}' http://localhost:5000/AddEventFolder
ます。
問題は、まず、この関数をもっと簡潔に書く方法はないかということです。次に、JSON から一般的にオブジェクトを作成する関数を抽出するにはどうすればよいでしょうか? だから私は次のようなもので終わりたいと思います
postAddEventFolderR = do
v1 = extractEntityFromJsonPost (whatever params) :: EventFolder
runDB $ insert $ v1
return $ RepJson $ toContent $ show v1
Haskell はまったくの初心者です。