Как создать JSON Rest API с помощью Happstack?Тело JSON? - PullRequest
6 голосов
/ 15 января 2012

Я пытаюсь создать JSON REST API с помощью Happstack.Это должно разрешить POSTS с телом JSON.Как я могу это сделать?Кажется, что все функции в API happstack ищут вещи на основе имени параметра.Он думает, что тело всегда закодировано в URL.

Если это невозможно с Happstack, какой фреймворк мне использовать?

1 Ответ

10 голосов
/ 15 января 2012

Хорошо, вот что я понял.

{-# LANGUAGE OverloadedStrings, DeriveDataTypeable #-}
import qualified Data.ByteString.Lazy.Char8 as L
import Happstack.Server
import Happstack.Server.Types
import Control.Monad.IO.Class (liftIO)

import Data.Data (Data, Typeable)

-- easiest to serialize/deserialize objects
data Unit = Unit { x :: Int, y :: Int } deriving (Show, Eq, Data, Typeable)

-- put this function in a library somewhere
getBody :: ServerPart L.ByteString
getBody = do
    req  <- askRq 
    body <- liftIO $ takeRequestBody req 
    case body of 
        Just rqbody -> return . unBody $ rqbody 
        Nothing     -> return "" 

myRoute :: ServerPart Response
myRoute = do
    body <- getBody -- it's a ByteString
    let unit = fromJust $ A.decode body :: Unit -- how to parse json
    ok $ toResponse $ A.encode unit -- how to send json back. 
...