Статьи

Синатра и работает: Книжное обозрение

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

view raw
gistfile1.rb
hosted with ❤ by GitHub

В этой главе также рассматриваются полезные вещи, такие как кэширование, обработка ошибок (в частности, 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

view raw
gistfile1.rb
hosted with ❤ by GitHub

Затем он объясняет, как использовать 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

view raw
gistfile1.rb
hosted with ❤ by GitHub

Все становится еще круче, поскольку авторы демонстрируют, как динамически создавать приложения на лету с помощью Sinatra.new В заключение главы показано, как эти подклассы встраиваются в экосистему Rack в качестве промежуточного программного обеспечения, а также как использовать расширения и помощники в модульных приложениях.

В последней главе книги описан учебный подход, описывающий шаги, необходимые для создания блогового приложения, использующего Git для управления версиями. В этой главе есть несколько замечательных самородков, в том числе использование библиотеки ostruct для хранения сообщений в блоге, использование ловушки для перезагрузки приложения при появлении обновлений и анализ данных для каждой статьи на страницах. Было также приятно видеть, как была структурирована папка проекта и некоторые примеры представлений, использующих erb, markdown, JavaScript и CSS. Как учебное пособие, оно движется в справедливом темпе – большая часть материала освещена всего в нескольких страницах – но за ним легко следовать.

Я был действительно впечатлен этой книгой. Там не так много, но то, что там, стоит на вес золота, и вы можете пролететь через него в выходные дни (плюс, на мой взгляд). Слово предостережения, хотя – это довольно теоретический местами. Хотя вам не нужно ничего знать о Синатре в качестве предварительного условия, вам потребуется разумный уровень знаний Ruby, чтобы следовать им. Вы также должны быть достаточно уверены в использовании командной строки и установке гемов, а также в запуске локального сервера.

Это никого не должно отталкивать – ничего особенно сложного, и поскольку все в Синатре – просто Руби, есть много мест, где вы можете найти больше информации. Я также обнаружил, что книга действительно помогла улучшить мои навыки в Ruby – она ​​полна хорошо написанных фрагментов ruby. Он также призывает вас запустить сеанс irb и поэкспериментировать с Sinatra, чтобы помочь вам лучше понять, как он работает.

Как первая книга о Синатре, я чувствую, что эта книга пользуется успехом. Авторы проделали большую работу, представив Синатру, а также предоставив читателю полное понимание ее внутренней работы. Хотя первая и последняя главы содержат примеры приложений, в действительности они не охватывают множество вариантов использования. Я чувствую, что еще есть место для более практичной книги, в которой подробно рассматриваются вопросы создания приложений и шаблоны проектирования, которые можно использовать для различных типов приложений. Например, приложения, управляемые базой данных, вообще не представлены в книге. Если вам нужен более практичный совет, я могу порекомендовать клонирование интернет-приложений в Ruby от Shau Seung.

Хорошая новость в том, что я слышал, что запланировано продолжение. Некоторые вещи, которые я хотел бы видеть покрытыми:

  • Дополнительные примеры использования потокового API
  • Тестирование… в книге это вообще не рассматривается
  • Как структурировать модульное приложение (структура файла и т. Д.)

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