All original content is created in Ukrainian. Not all content has been translated yet. Some posts may only be available in Ukrainian.Learn more

Що таке Middleware у Ruby on Rails і коли воно використовується

Post cover: Що таке Middleware у Ruby on Rails і коли воно використовується
This content has not been translated yet.We're showing the original Ukrainian content below.
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 допомагає ізолювати технічні аспекти обробки запитів - логіку безпосередньо не пов’язану з бізнес-кодом. Це робить застосунок чистішим, розширюваним і легшим для підтримки.

This post doesn't have any additions from the author yet.

module_function у Ruby: коли методи модуля доступні як модульні та як функції
29 Oct 21:53

module_function у Ruby: коли методи модуля доступні як модульні та як функції

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Що таке memoization в Ruby?
30 Oct 10:17

Що таке memoization в Ruby?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
is_a?, kind_of?, instance_of? — як Ruby перевіряє тип об’єкта?
30 Oct 19:55

is_a?, kind_of?, instance_of? — як Ruby перевіряє тип об’єкта?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
&& vs and — різниця в Ruby, яка може зламати ваш код
30 Oct 20:23

&& vs and — різниця в Ruby, яка може зламати ваш код

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Змінні у Ruby: @, @@ та class instance variable
30 Oct 20:54

Змінні у Ruby: @, @@ та class instance variable

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Різниця між blank?, present?, empty? та nil? у Ruby
30 Oct 21:06

Різниця між blank?, present?, empty? та nil? у Ruby

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Що таке Vanilla Rails approach?
14 Nov 16:48

Що таке Vanilla Rails approach?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Що таке Elasticsearch і як він працює?
22 Nov 12:35

Що таке Elasticsearch і як він працює?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Що таке time-series база даних?
22 Nov 12:42

Що таке time-series база даних?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
22 Nov 12:49

Що таке VACUUM у PostgreSQL?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Що таке B-Tree (Balanced Tree)?
22 Nov 12:58

Що таке B-Tree (Balanced Tree)?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska