Middleware у Ruby on Rails - це проміжний шар між клієнтським запитом і вебзастосунком. Воно отримує запит до того, як він потрапляє у контролер, і може змінювати або обробляти його. Так само Middleware може перехоплювати відповідь від застосунку перед тим, як вона буде надіслана клієнту.
Rails побудований поверх бібліотеки Rack, яка визначає стандарт для таких проміжних шарів. Middleware у цьому контексті - це звичайний Ruby-клас, який реалізує метод call(env). Параметр env містить усю інформацію про HTTP-запит (наприклад, шлях, заголовки, метод). Метод повинен повертати масив із трьох елементів: статус відповіді, заголовки та тіло.
Найпростіший приклад власного Middleware може виглядати так:
class RequestLogger
def initialize(app)
@app = app
end
def call(env)
puts "Отримано запит до #{env['PATH_INFO']}"
status, headers, body = @app.call(env)
puts "Повернено статус #{status}"
[status, headers, body]
end
end
У цьому прикладі кожен запит буде логуватися у консоль - як при надходженні, так і після обробки.
Middleware часто використовують для таких завдань:
- логування запитів і відповідей;
- кешування;
- обробки помилок;
- аутентифікації чи перевірки токенів;
- стиснення чи модифікації тіла відповіді;
- встановлення загальних заголовків.
У Rails ланцюг middleware визначається у файлі config/application.rb або переглядається командою:
bin/rails middleware
Щоб додати власне middleware, його можна вставити до стеку:
config.middleware.use RequestLogger
або між іншими шарами:
config.middleware.insert_before Rack::Runtime, RequestLogger
Middleware допомагає ізолювати технічні аспекти обробки запитів - логіку безпосередньо не пов’язану з бізнес-кодом. Це робить застосунок чистішим, розширюваним і легшим для підтримки.
Цей допис поки що не має жодних доповнень від автора/ки.