Блог

Web server haskell

После создания проекта добавляем зависимости http-typeswai и warp. К слову, этот код практически слово-в-слово повторяет helloworld от авторов библиотеки WAI.

Если при запущенном сервере открыть в браузере url http: Сервер работает!

RPC на основе WAI

Это запуск сервера warp на порту с единственным WAI-приложением - application. Приложение application имеет тип Applicationкоторый является синонимом. В данном случае приложение сразу же отвечает фиксированным сообщением, поэтому тело приложения - единственный вызов ответчика respond. Вот, собственно и всё! Это уже вполне самостоятельный сервер, можно пускать в production: Сервер работает, настало время решать конкретную задачу.

Для начала заведем несколько вспомогательных функций для работы с ответами:. Так как мы собираемся обрабатывать только GET -запросы, добавим отсечку по типу запроса с соответствующим сообщением об ошибке:.

GET -запросы мы уже фильтруем, теперь на запрос к корневому url нужно возвращать список функций. Значит нужна библиотека функций:. Самих функций пока нет, но библиотека есть, как есть и функции для работы с.

Добавим ветвления в наше приложение, заодно переписав if -ветки в виде охранных выражений:. Проверим работу того, что уже наработано, с помощью curl предполагается, что сервер запущен в другом окне терминала:.

А что хоть за задачи у тебя - хоумпейдж, интернет-магазин, соцсеть? Почему haskell, а не RoR тот же? Продуктовая линейка и открытые проекты из одной области. Хочу все вместе разместить.

А haskell при том, что технически и идеологически самая сильная часть в виде одной из открытых библиотек написана мною на haskell. Подумал, было бы неплохо и сайт на этом языке написать: Как хаскеллист могу сказать, что для многих из нас RoR в принципе не входит в множество фреймворков, у которых есть юзкейсы, в силу поносности языка, библиотек, тулзов и комьюнити. Объективно RoR чуть ли не самая развитая из инфраструктур для веба. Из альтернатив по сути только python и clojure но из-за jvm это далеко не для всех задач приемлемое решение.

Язык явно будет получше пхп, батареек не меньше чем в yii, да и выглядит стройнее. Не на java же ты предлагаешь веб писать, правильно? RU Регистрация - Вход. Был ли у кого опыт работы с такими решениями? Есть ли для них готовые виджеты, например, для создания красивого меню?

Ну, и насколько дороже хостинг по сравнению с php, если веб-сервер написан на Haskell?

Пример минимального веб-сервера warp

Веб-сервер на Haskell Испытываю дефицит времени то есть года у тебя нет? Для дела Ты гонишь. Ответ на: Чем хорош php. Он - скриптовый. Восстановится апач после перезагрузки, и ладно. А для создания меню по навигации по сайту есть виджеты? Уже понятнее. Как понимаю, апач настраивать не надо LOL, причем тут апач? Это только когда программист безмозглый. Elm на фронтенд не забудь, камрад.

Для того чтобы не держать в голове много информации, люди придумали средства абстрагирования никак не ограничивает программиста LOL а про изменение логики.

Это взаимосвязанные вещи sadlinuxoid 9 окт. Для того чтобы не держать в голове много информации, люди придумали средства абстрагирования Не всегда решает эту проблему LOL Докажи обратное или иди на хуй Это взаимосвязанные вещи Нет. Логику меняет заказчик. Сервера копейки давно стоят.

оптимизация производительности сервера vps для битрикс

А что тут доказывать? Достаточно просто перечислить ограничения Я про реальные возможности. Никто уже не пользуется хостингами. Ну, я и правда сильно отстал от этой темы. Лет на десять. Поэтому и спрашиваю. У тебя хорошая новость. Рекомендую посмотреть доку и захотеть делать не нём anonymous 9 окт. Этот фреймворк чересчур строго диктует свои представления о том, как правильно делать веб-приложения, и не со всем я согласен.

как установить сервер l2 на vds

Поэтому базой будет маленькая библиотечка Scottyпредлагающая красивый синтаксис описания маршрутов для веб-сервера Warp. Задача Разработать сервер веб-приложения для простого блога. Будут доступны следующие маршруты: Для stateless-сервиса очень удобно использовать Basic-аутентификациютак как каждый запрос содержит логин и пароль пользователя. Что понадобится? Некоторые начальные знания Haskell, общее понимание монад и функторов, устройства программы, ввода-вывода и.

Утилита cabal, умение использовать sandbox-ы, подключать библиотеки, компилировать и запускать проект. MySQL и самые начальные знания о. Архитектура Для реализации архитектуры предлагаю использовать следующие библиотеки. Web-сервер — Warp. Маршрутизатор — Scotty. Конфигурация приложения — configurator. Доступ к БД: Пул соединений с БД: Разобьем наше приложение на модули.

Приступаем Давайте создадим простой проект cabal для нашего приложения. Вот используемые библиотеки, которые необходимо добавить в build-depends в файл hblog.

Yesod = Haskell $ Web / Хабр

Давайте посмотрим, как устроено минимальное веб-приложение на Scotty. Документация и примеры использования этого микро-фреймворка очень хороши, так что с первого взгляда все становится понятно.

Gainesville Functional Programming, May Meetup: Haskell Web Frameworks

А если у вас есть опыт с Sinatra, Compojure или Scalatra — считайте, что вам повезло, так как этот опыт здесь полностью пригодится.

Scotty import Data. Сейчас объясню. Если очень кратко, то на практике используются три базовых типа строковых данных: String — список символов. Этот тип данных встроен в язык. Находится в библиотеке text и существует в двух видах: Подробнее — здесь ByteString — предназначен для сериализации строк в поток байтов.

Поставляется в библиотеке bytestring и также в двух вариантах: Вернемся к заголовку OverloadedStrings. Штука в том, что, учитывая наличие нескольких типов строковых данных, исходник будет пестреть вызовами вроде T.

Вот чтобы убрать этот синтаксический мусор используется директива OverloadedStrings, которая самостоятельно выполняет преобразование строковой лексемы к нужному строковому типу.

Файл Main. Required "application. ActionM TL. Text deleteArticle pool id deletedArticle id Для конфигурации приложения воспользуемся пакетом configurator. Конфигурацию будем хранить в файле application. Соединение с БД — удовольствие дорогое, так что лучше не создавать его на каждый запрос, а дать возможность переиспользовать старые. Тип функции createPool такой: Для открытия соединения используем функцию newConn из Db.

String, dbUser:: String, dbPassword:: Config, который мы прочитали и распарсили из application.

RPC на основе WAI

Такая запись для начинающих возможно покажется немного непонятной, и я попытаюсь пояснить, что здесь происходит. Тип выражения C. Извлечь его из IO можно так: Тип конструктора данных DbConfig такой: Короче, это обычный map. Maybe DbConfig Аутентификация В функции main осталась последняя сложная конструкция — это middleware basicAuth.

Тип функции basicAuth такой: Их типы: ByteStringauthOnNoAuth:: Нас же интересует здесь всего один параметр — authIsProtected. Это функция, которая по Request-у умеет определить, требовать ли аутентификацию, или. Вот её реализация для нашего блога: А вот функция verifyCredentials, которая проверяет пользователя и пароль, относится к взаимодействию с БД, и поэтому о ней — ниже. Взаимодействие с базой данных Утилитные функции для извлечения данных из БД с использованием пула соединений: Изменение данных можно сделать функцией execSql: Но в базе данных хранятся не только пользователи, но и статьи, которые блог должен уметь создавать-редактировать-отображать.

В файле Domain.