Скотти веб-сервис
Мне нужно создать веб-сервис для конвертации между разными валютами, используя скотти веб-фреймворк на Haskell.
Веб-сервис должен отвечать на запросы, такие как /convert/15? To=usd&from=eur.
У меня есть этот код до сих пор:
{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty
import Data.Monoid (mconcat)
functionxs :: a -> Int
functionxs a = 5
main = scotty 3000 $ do
get "/:word" $ do
name <- param "word"
html $ mconcat ["<h1>Hi, ", name, " what's up!</h1>"]
Таким образом, когда вы выполняете в браузере: http://localhost:3000/Tony, результат будет таким: Привет, Тони, что случилось!
Проблема в том, что я не знаю, как изменить код, чтобы иметь "/convert/15? To = usd & from = eur". как запрос и получить правильный ответ.
Надеюсь, кто-нибудь может мне помочь.
Заранее спасибо.
Отредактировано с окончательным решением:
{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty
import Data.Monoid (mconcat)
import Data.Text.Lazy (Text, pack)
main = scotty 3000 $ do
get "/convert/:amount" $ do
money <- param "amount"
to <- param "to"
frm <- param "from"
html $ mconcat ["<h1>The result is: ", pack (show (convert
money to frm)), "</h1>"]
convert :: Double -> String -> String -> Double
convert a b c = if (b=="euro" && c=="usd")
then (a*1.091)
else if (b=="usd" && c=="euro")
then (a*0.915)
else 0
1 ответ
Глядя на документы, вам нужно вызвать param, чтобы получить то, что вам нужно.
Попробуйте это как отправную точку:
{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty
import Data.Monoid
main = scotty 3000 $ do
get "/convert/:amt" $ do
amt <- param "amt"
frm <- param "from"
to <- param "to"
html $ "<h1>" <> amt <>" in " <> frm <> " is " <> to <> "</h1>"
Я оставлю часть конверсии для вас, чтобы выяснить. С помощью <>
вместо mconcat показалось, что он чище.