Как отобразить ответ от HTTP GET-запроса во внешнем интерфейсе, используя Скотти?
Я пробую Скотти в первый раз, и я не могу пройти мимо, сделав свой запрос GET. Ответ возвращается как тип
IO (Response bytestring-0.10.8.1:Data.ByteString.Lazy.Internal.ByteString)
Я знаю, что мне нужно преобразовать его в тип, который может выводить Скотти, но я не могу понять, как это сделать.
Мой полный код:
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Lens
import Control.Monad.IO.Class
import Data.Aeson (FromJSON, ToJSON, Value, decode,
encode)
import Data.Map as Map
import GHC.Generics
import Lib
import Network.Wreq as Wreq
import Web.Scotty as Scotty
main :: IO ()
main =
scotty 3000 $
Scotty.get "/" $ do
-- html "Hello World!"
Wreq.get"https://www.metaweather.com/api/location/search/?query=New%20York"
Я пытался использовать LiftIO, но это все еще дает мне ошибку типа. Я хотел знать, как именно я должен преобразовать свой Ответ, чтобы я мог отобразить его во внешнем интерфейсе так же, как я отобразил свой первоначальный "Hello World" с помощью html.
1 ответ
Решение
Если вы просто ищете быстрое подтверждение концепции и не беспокоитесь о ошибочных ответах, вы можете использовать responseBody
линзы и отправьте ленивую строку байтов raw
вместо html
:
main :: IO ()
main =
scotty 3000 $
Scotty.get "/" $ do
r <- liftIO $ Wreq.get "https://www.metaweather.com/api/location/search/?query=New%20York"
raw (r ^. responseBody)