На прошлой неделе на Хабре было целых две статьи о реализации RESTful web-сервисов на Java. Что ж, не будем отставать и напишем свой вариант на Scala, с монадами и аппликативными функторами. Матёрые разработчики на Scala вряд ли найдут в этой статье что-то новое, а любители Django вообще скажут что у них эта функциональность есть «из-коробки», но я надеюсь что Java-разработчикам и просто любопытствующим будет интересно почитать.
Подготовка
За основу возьмём задачу из предыдущей статьи, но постараемся решить её так, что бы код решения умещался на экран. Хотя бы на 40-дюймовый и пятым шрифтом. В конце концов, в XXI веке должна быть возможность решать простые задачи без мегабайтов xml-конфигов и десятков абстрактных фабрик.
Для тех, кто не хочет ходить по ссылкам уточню: мы собираемся реализовать простейший RESTful сервис для доступа к базе данных клиентов. Из необходимой функциональности — создание и удаление объектов в базе, а также постраничная выдача списка всех клиентов с возможностью сортировки по разным полям.
В качестве кирпичиков, из которых мы будем строить дом, возьмём:
Scala — даже не кирпичик, а скорее фундамент,
Unfiltered — отличная библиотека для обработки HTTP-запросов,
Squeryl — библиотека для запросов к базе данных,
Jackson — библиотека для работы с JSON, изначально написанная для Java, но на ура справляющаяся и со Scala-типами,
Scalaz — библиотека, позволяющая писать в коде разные забавные символы типа ⊛, ↦ или ∃, а заодно реализующая такие полезные абстракции, как аппликативные функторы, моноиды, полугруппы и стрелки Клейсли. Последние, правда, мне пока не приходилось использовать, но скорее всего это объясняется тем, что я ещё не достиг нужной степени функционального просветления.
По ходу статьи я постараюсь давать достаточно пояснений, что бы код был понятен людям не знакомым со Scala, но не обещаю что у меня получится.
В бой!
Война войной, а обед по расписанию. Поэтому в назначенный час сотрудники офисов и предприятий, студенты и преподаватели, воспитатели и воспитанники детсадов, тренера, учителя и школьники откладывают все дела и принимаются за еду. И хотя у каждого - свой рацион, количество и калорийность, но все равно ужасно интересно, чем кормят за соседним столом, в соседнем здании, в соседнем городе? Фотопроект School Lunch как раз и посвящен этому вопросу: чем обедают школьники мира?