Sinatra: Up and Running была опубликована в конце прошлого года издательством O’Reilly Press и является первой книгой, написанной исключительно о Синатре . Это написано Аланом Харрисом и Константином Хаазе . Константин в настоящее время поддерживает Синатру и, вероятно, знает о ней больше, чем кто-либо другой (о нем вы можете узнать больше в моем интервью ). Алан уже написал две книги о Python, а также является активным пользователем Rubyist и Sinatra. Я долго ждал, чтобы написать книгу о Синатре, и очень ждал этого… и это не разочаровало.
Книга очень тонкая и весит чуть более 100 страниц. Но, как и Синатра, он упаковывает большой удар в маленькую, скудную упаковку. Он охватывает последнюю версию Sinatra на момент написания (1.3.1) и быстро начинается: первая глава знакомит с Sinatra вместе с его целями и философией проектирования. Также есть интересный раздел о том, как изучение Sinatra поможет развить передаваемые навыки, которые можно использовать в других средах разработки. Первая глава завершается кратким руководством, которое использует Sinatra для создания полноценного веб-приложения. Это очень базовое исполнение классической детской игры « Рок, ножницы из бумаги», которая идеально подчеркивает стремление Синатры к быстрому развитию. В этой главе подробно рассматриваются некоторые из наиболее продвинутых аспектов Синатры, но это больше для того, чтобы разжечь аппетит к тому, что следует делать, а не для обучения тому, как это работает (и это ясно показано в тексте).
Вторая глава очень справочна по своей природе, поскольку в ней рассматривается большое количество методов Синатры и то, как они работают. Он начинается с изучения основ HTTP-заголовков и глаголов, таких как GET, POST, PUT, DELETE и недавно добавленного PATCH, что помогает понять, как Sinatra по сути является оберткой поверх Rack для маршрутизации HTTP-запросов. Фактически, эта глава иллюстрирует тот факт, что Sinatra — это просто набор вспомогательных методов, которые предоставляют синтаксический сахар для методов Rack. Основным моментом в этой главе было введение нового потокового API, который позволяет держать соединение с сервером открытым и выполнять такие действия:
get ‘/’ do | |
stream do |out| | |
out << «3 | |
sleep 1 | |
out << «2 \n« | |
sleep 1 | |
out << «1\n« | |
sleep 1 | |
out << «BLAST OFF!!!» | |
end | |
end | |
В этой главе также рассматриваются полезные вещи, такие как кэширование, обработка ошибок (в частности, 404 и 500 внутренних ошибок сервера), фильтры до и после, а также рендеринг представлений и сеансов. Многое из этой информации можно найти в отличном разделе ReadMe на сайте Sinatra, но было приятно видеть, что все это записано в одном месте.
Глава 3 начинает становиться все тяжелее и освещает симбиотические отношения, которые Синатра имеет с Rack — основой его магии. Например, есть хорошее объяснение того, как работает метод get. В нем также рассказывается, как расширить функциональность Sinatra с помощью методов расширения и помощников. Как правило, расширения используются для конфигурации или маршрутизации, тогда как помощники используются в блоках представления и шаблонах. Затем в главе достаточно подробно рассказывается о Rack, и в ней приведен прекрасный пример мини-реализации Sinatra с использованием Rack, в которой показано немного о том, как Sinatra и Rack работают вместе. Глава заканчивается обсуждением того, как использовать Sinatra для создания промежуточных приложений Rack.
Глава 4 показывает, как вы можете создать подкласс Sinatra для создания модульных приложений. Это закладывает основы хорошей практики создания вашей собственной структурированной структуры. Это делается путем подклассификации самой Синатры следующим образом:
require ‘sinatra/base’ | |
class MyApp < Sinatra::Base | |
… code for your App goes here ... | |
end |
Затем он объясняет, как использовать run!
команда для запуска сервера. Настройки обсуждаются далее и, оказывается, на самом деле это просто методы класса приложения. Это также охватывает подклассы этих классов и то, как маршруты наследуются. Следующий раздел действительно классный — он показывает, как можно очень легко имитировать архитектуру контроллеров Rails, создав подкласс Sinatra :: Base с классом ApplicationController, а затем подклассифицировать свои контроллеры, например, так:
require ‘sinatra/base’ | |
class ApplicationController < Sinatra::Base | |
… general controller code goes here … | |
end | |
class MyController < ApplicationController | |
… specific controller code goes here … | |
end |
Все становится еще круче, поскольку авторы демонстрируют, как динамически создавать приложения на лету с помощью Sinatra.new
В заключение главы показано, как эти подклассы встраиваются в экосистему Rack в качестве промежуточного программного обеспечения, а также как использовать расширения и помощники в модульных приложениях.
В последней главе книги описан учебный подход, описывающий шаги, необходимые для создания блогового приложения, использующего Git для управления версиями. В этой главе есть несколько замечательных самородков, в том числе использование библиотеки ostruct для хранения сообщений в блоге, использование ловушки для перезагрузки приложения при появлении обновлений и анализ данных для каждой статьи на страницах. Было также приятно видеть, как была структурирована папка проекта и некоторые примеры представлений, использующих erb, markdown, JavaScript и CSS. Как учебное пособие, оно движется в справедливом темпе — большая часть материала освещена всего в нескольких страницах — но за ним легко следовать.
Я был действительно впечатлен этой книгой. Там не так много, но то, что там, стоит на вес золота, и вы можете пролететь через него в выходные дни (плюс, на мой взгляд). Слово предостережения, хотя — это довольно теоретический местами. Хотя вам не нужно ничего знать о Синатре в качестве предварительного условия, вам потребуется разумный уровень знаний Ruby, чтобы следовать им. Вы также должны быть достаточно уверены в использовании командной строки и установке гемов, а также в запуске локального сервера.
Это никого не должно отталкивать — ничего особенно сложного, и поскольку все в Синатре — просто Руби, есть много мест, где вы можете найти больше информации. Я также обнаружил, что книга действительно помогла улучшить мои навыки в Ruby — она полна хорошо написанных фрагментов ruby. Он также призывает вас запустить сеанс irb и поэкспериментировать с Sinatra, чтобы помочь вам лучше понять, как он работает.
Как первая книга о Синатре, я чувствую, что эта книга пользуется успехом. Авторы проделали большую работу, представив Синатру, а также предоставив читателю полное понимание ее внутренней работы. Хотя первая и последняя главы содержат примеры приложений, в действительности они не охватывают множество вариантов использования. Я чувствую, что еще есть место для более практичной книги, в которой подробно рассматриваются вопросы создания приложений и шаблоны проектирования, которые можно использовать для различных типов приложений. Например, приложения, управляемые базой данных, вообще не представлены в книге. Если вам нужен более практичный совет, я могу порекомендовать клонирование интернет-приложений в Ruby от Shau Seung.
Хорошая новость в том, что я слышал, что запланировано продолжение. Некоторые вещи, которые я хотел бы видеть покрытыми:
- Дополнительные примеры использования потокового API
- Тестирование… в книге это вообще не рассматривается
- Как структурировать модульное приложение (структура файла и т. Д.)
В то же время я бы порекомендовал всем, кто заинтересован в улучшении своих навыков в Синатре или Руби, или в том, чтобы узнать, что вся эта суета Синатры собирается купить в этой книге.