Введение в библиотеку создания веб-приложений RODA

Андрей Васильев

2020

Передача документов в сети Интернет

Базовыми протоколами, на основании которых происходит соединение между браузером и сервером, являются TCP и IP:

В рамках протокола TCP передача данных происходит кусочками, называемыми пакетам. Для передачи одного документа могут потребоваться сотни пакетов

Поверх протокола TCP реализован протокол HTTP, Hyper Text Transport Protocol—базовый протокол для передачи документов

По протоколу HTTP передаются HTML-документы, CSS-документы, JavaScript-документы, JSON-документы и т.д.

Роли в протоколе HTTP

Данный протокол выделяет следующие элементы:

В качестве клиентов могут выступать любые приложения, которые реализуют клиентскую часть протокола HTTP

Процесс выполнения HTTP-запроса

Запрос от клиента к серверу
Запрос от клиента к серверу

Базовые аспекты протокола HTTP

Изменения в новых версиях протокола

Процесс выполнения HTTP-запроса

Рассмотрим шаги, которые выполняет клиент во время запроса к серверу

  1. Клиент открывает TCP-соединение с сервером, которое используется для отправки сообщения, приёма ответа
  2. Клиент посылает HTTP-сообщение, например:

    GET / HTTP/1.1
    Host: developer.mozilla.org
    Accept-Language: ru
  3. Сервер отвечает документом на сообщение:

    HTTP/1.1 200 OK
    Date: Sat, 09 Oct 2010 14:28:02 GMT
    ...
     <!DOCTYPE html...
  4. Клиент закрывает или переиспользует TCP-соединение для другого запроса

Разбор структуры HTTP-запроса

GET / HTTP/1.1
Host: uniyar.ac.ru
Accept-Language: ru

Типы запросов

Разбор HTTP-ответа

Как и в запросе, каждая строка несёт свою смысловую нагрузку

HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
...

Группы кодов статуса

В протоколе определены следующие группы кодов ответа

Часто используемые ответы

Пути к документам в HTTP

Для определения пути к документу используется специальный формат, называемый URI, Universal Resource Identifier:

[схема ":"] путь ["?" запрос] ["#" фрагмент]

схема описывает способ связи

путь к документу, зависит от схемы

запрос содержит дополнительные параметры

фрагмент выделяет компонент в документе

Реализация серверного HTTP-стека в Ruby

В основе реализации всего современного серверного HTTP-стека для Ruby приложений лежит библиотека Rack

Без использования Rack каждому веб-серверу потребовалось бы реализовывать поддержку каждой библиотеки для создания веб-приложений

Существует множество веб-серверов: puma, unicorn, thin и т. д., обладающими различными свойствами

На основе библиотеки Rack созданы библиотеки и фреймворки: Ruby on Rails, Sinatra, Hanami, RODA, Cuba

Краткий обзор Rack

Rack больше всего интересен для разработчиков

Реализация Rack-промежуточного слоя

Компонент, совместимый с Rack, должен обладать следующими характеристиками:

Такими компонентами могут выступать лямбда-блоки

Rack::Builder

Класс Rack::Builder предоставляет предметный язык программирования, который позволяет соединять между собой промежуточные слои

Он предоставляет следующие методы:

Файл config.ru

Джем rack поставляет приложение rackup, которое предназначено для запуска Rack-приложений. Его конфигурационный файл — config.ru

require_relative 'app'
require_relative 'middleware_logger'

use MiddlewareLogger
run App.new

Библиотека RODA

RODA — это библиотека, облегчающая написание веб-приложений на Ruby

Ключевые особенности:

Архитектура RODA-приложений

Большинство Rack-приложений можно рассматривать как MVC-приложения:

В такой архитектуре к коду, использующему RODA, предъявляются стандартные требования к контроллеру: