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.