Spock で実行されている Web サーバー (たとえば、localhost) でバイト文字列本体を視覚化します。
私の目標: Web サイトを作成し、バイト文字列 (テキストに変換) を表示します。 JSON 構造。一般的な考え方は、応答本文を使用して、restAPI Web サイトに送信される JSON クエリ構造 (ユーザーが質問を作成できる) を作成することです。
私はこのようなリクエストを作成することができます:
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" と同じ)ハンドラー (たとえば、のテキスト関数のようにdo get ... $ text -> ActionCtxT ctx m a
) であり、main()runSpock 8080 (spock spockCfg app1)
の spock関数によって処理する必要があります。のHtml ()
私が研究した多くの例に現れて機能するタイプ。すべての解析とリクエストの構築は HTTP.Simple で行われます (あまりエレガントではありませんが、たとえば、動作する必要があることはわかっています)。これはlucidIOまでエスケープできません-間違ったMonadを選択している可能性があります(つまり、IO:しかし、IOを使用すると、ghciのすべてをチェックできます)。この ByteString をブラウザに出力する方法のヒントを教えてください。