Я хочу создать простой HTML-сайт, содержащий еще более простую форму только с одной кнопкой «Отправить». Для этого я создал следующий Servant API:
type ClientAPI =
"prices" :> Get '[HTML] (Html ()) -- returns HTML UI to the user
:<|> "updatePrices" :> Post '[HTML] (Html ()) -- handles a recalc request
Моя цель — перенаправить пользователя на сайт «цены» после завершения процедуры «updatePrices». Для этого я возвращаю представление «цены» в конце обработчика «updatePrices»:
updatePricesView :: Handler (Html ())
updatePricesView = do
-- do the required logic here
pricesView -- return the view for "prices" endpoint
Это работает почти нормально. Единственным недостатком является то, что адрес в моем браузере установлен на "/updatePrices" вместо "/prices". В результате, если я нажму F5, вся процедура будет выполнена еще раз, что немного нелогично.
Это на самом деле заставляет меня задуматься: как правильно обрабатывать форму с помощью Servant? В других языках я обычно реализую это как перенаправление на нужный сайт, но здесь ничего подобного не вижу.