Скотти веб-сервис

Мне нужно создать веб-сервис для конвертации между разными валютами, используя скотти веб-фреймворк на 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 показалось, что он чище.

Другие вопросы по тегам