Визуализация тела строки байтов на веб-сервере, работающем на Spock (например, localhost)
Моя цель: создать сайт и просмотреть строку байтов (преобразованную в текст) Framework: Http Simple для выполнения запроса на перезапуск API Spock для моегоСервер, например, я не хочу создавать JSON, так как мне нужно манипулировать / проверять мой ответ перед созданием структуры JSON.Общая идея заключается в том, что я хочу использовать тело ответа для построения структуры запроса JSON (пользователь сможет составить свой вопрос), который будет отправлен на сайт restAPI.
Мне удается создать запрос, подобный следующему:
connect = do
request' <- (parseRequest "http://localhost")
let request = setRequestMethod "POST"
$ setRequestHost (S8.pack ("xx.xxx.xxx.xxx"))
$ setRequestPath "/api/Integration/Login"
$ setRequestBodyJSON me
$ setRequestPort 1000
$ request'
response <- httpJSON request
return (getResponseBody response :: Auth)
, затем я использовал его для запроса страницы API
getRequest :: RequestPath -> HtmlT IO L.ByteString
getRequest rpath = do
atoken <- liftIO connect
request' <- liftIO (parseRequest "http://localhost")
let request = setRequestMethod "POST"
$ setRequestHost (S8.pack ("xx.xxx.xxx.xxx"))
$ setRequestPort 1000
$ setRequestPath (S8.pack ("/api/Integration/" ++ rpath))
$ addRequestHeader hAuthorization (S8.pack (unpack (token_type (atoken)) ++ " " ++ unpack (access_token (atoken))))
$ setRequestBodyJSON r1
$ request'
response <- httpLBS request
return (getResponseBody (response))
, затем следую короткой монадой SpockM:
app1 = do get root $ text "root"
fct
с fct, равным
fct = do get "/further" $ lucidIO ( fmap TL.decodeUtf8 (getRequest "GetProperties"))
Все отлично компилируется. Я даже могу видеть результат в GHCI с вызовом вроде: connect >>= (\ x -> print x)
(то же самое с getRequest "GetProperties"Что я не понимаю, так это то, что lucidIO должен дать мне тип ActionCtxtT ctx mb, который идеально подходит для типа обработчика (например, как текстовая функция в do get ... $ text -> ActionCtxT ctx m a
) и должен обрабатываться функцией спока в main() то есть runSpock 8080 (spock spockCfg app1)
Я попытался избавиться от типа 'конечного' ByteString, заменив его на (), чтобы максимально имитировать тип Html ()
, который обнаруживается и работает во многих примерах, которые я изучал.Весь синтаксический анализ и построение запросов выполняется с помощью HTTP.Simple (это не очень элегантно, я знаю, например, что он просто должен работать), который тянет меня с самого начала в монаде (из-за первой функции 'parseRequest' -> m Request) изот которого я не могу убежать до lucidIO - может быть, я выбираю неправильную монаду (т.е. IO: но с IO я могу проверить все в ghci).Не могли бы вы дать мне несколько советов о том, как распечатать эту строку ByteString в моем браузере?