Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

Czym jest Middleware w Ruby on Rails i kiedy jest używane

Okładka posta: Czym jest Middleware w Ruby on Rails i kiedy jest używane
Ta treść została automatycznie przetłumaczona z ukraińskiego.
Middleware w Ruby on Rails to warstwa pośrednia między żądaniem klienta a aplikacją internetową. Odbiera żądanie zanim trafi do kontrolera i może je modyfikować lub przetwarzać. Podobnie Middleware może przechwytywać odpowiedź od aplikacji przed jej wysłaniem do klienta.
Rails jest zbudowany na bibliotece Rack, która definiuje standard dla takich warstw pośrednich. Middleware w tym kontekście to zwykła klasa Ruby, która implementuje metodę call(env). Parametr env zawiera wszystkie informacje o żądaniu HTTP (np. ścieżkę, nagłówki, metodę). Metoda powinna zwracać tablicę z trzema elementami: status odpowiedzi, nagłówki i ciało.
Najprostszy przykład własnego Middleware może wyglądać tak:
class RequestLogger
  def initialize(app)
    @app = app
  end

  def call(env)
    puts "Otrzymano żądanie do #{env['PATH_INFO']}"
    status, headers, body = @app.call(env)
    puts "Zwrócono status #{status}"
    [status, headers, body]
  end
end
W tym przykładzie każde żądanie będzie logowane w konsoli - zarówno przy przyjęciu, jak i po przetworzeniu.
Middleware często używa się do takich zadań:
  • logowania żądań i odpowiedzi;
  • cache'owania;
  • obsługi błędów;
  • autoryzacji lub weryfikacji tokenów;
  • kompresji lub modyfikacji ciała odpowiedzi;
  • ustawiania wspólnych nagłówków.
W Rails łańcuch middleware definiowany jest w pliku config/application.rb lub przeglądany za pomocą polecenia:
bin/rails middleware
Aby dodać własne middleware, można je wstawić do stosu:
config.middleware.use RequestLogger
lub między innymi warstwami:
config.middleware.insert_before Rack::Runtime, RequestLogger
Middleware pomaga izolować techniczne aspekty przetwarzania żądań - logikę bezpośrednio niezwiązaną z kodem biznesowym. Dzięki temu aplikacja jest czystsza, bardziej rozszerzalna i łatwiejsza w utrzymaniu.

Ten post nie ma jeszcze żadnych dodatków od autora.

module_function w Ruby: kiedy metody modułu są dostępne jako modułowe i jako funkcje
29 paź 21:53

module_function w Ruby: kiedy metody modułu są dostępne jako modułowe i jako funkcje

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest memoizacja w Ruby?
30 paź 10:17

Czym jest memoizacja w Ruby?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
is_a?, kind_of?, instance_of? — jak Ruby sprawdza typ obiektu?
30 paź 19:55

is_a?, kind_of?, instance_of? — jak Ruby sprawdza typ obiektu?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
&& vs and — różnica w Ruby, która może zepsuć twój kod
30 paź 20:23

&& vs and — różnica w Ruby, która może zepsuć twój kod

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Zmienne w Ruby: @, @@ oraz zmienna instancji klasy
30 paź 20:54

Zmienne w Ruby: @, @@ oraz zmienna instancji klasy

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Różnica między blank?, present?, empty? a nil? w Ruby
30 paź 21:06

Różnica między blank?, present?, empty? a nil? w Ruby

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest podejście Vanilla Rails?
14 lis 16:48

Czym jest podejście Vanilla Rails?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest Elasticsearch i jak działa?
22 lis 12:35

Czym jest Elasticsearch i jak działa?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest baza danych typu time-series?
22 lis 12:42

Czym jest baza danych typu time-series?

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

Co to jest VACUUM w PostgreSQL?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest B-Tree (drzewo zrównoważone)?
22 lis 12:58

Czym jest B-Tree (drzewo zrównoważone)?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Fix problem with installing Ruby 3.4.3 (and not only) via RVM on macOS (Apple Silicon)
30 gru 14:05

Fix problem with installing Ruby 3.4.3 (and not only) via RVM on macOS (Apple Silicon)

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