7

Đối với phiên bản mới nhất của Ruby on Rails (4 tại thời điểm đặt câu hỏi này), cách ưa thích để triển khai mã làm thay đổi yêu cầu/phản hồi như một cơ chế xác thực là gì. Tôi thấy nhiều trang web và hướng dẫn ủng hộ Rack middleware trong khi có vẻ như chức năng tương tự có thể đạt được thông qua Action Controller filter methods.RoR - Tùy chọn nào được ưu tiên - Bộ lọc Bộ điều khiển Hoạt động Middleware hoặc Bộ điều khiển Hoạt động?

Ngoài việc nói về phương pháp được ưu tiên, có thể so sánh điểm mạnh và điểm yếu của từng phương pháp được cung cấp không? Trong điều tra ban đầu của tôi, dường như các phương pháp lọc bộ điều khiển hành động được tích hợp chặt chẽ hơn vào một ứng dụng RoR để bạn có thể bỏ qua việc chạy các bộ lọc nhất định trên các đầu cuối điều khiển nhất định trong khi phần mềm trung gian dường như không có mức điều khiển đó. Chi tiết như thế này sẽ rất tuyệt. Cảm ơn!

Trả lời

9

Kệ middleware và ActionCo ntroller Bộ lọc thực sự khá khác nhau.

Giá là giao diện máy chủ web Ruby chuẩn. Nó được thiết kế để hoạt động theo cách mà các ứng dụng Rack hoặc "Middlewares" có thể được xích lại với nhau, mỗi biến đổi yêu cầu/đáp ứng theo một cách cụ thể. Nếu bạn tạo/sử dụng Rack Middleware, bạn sẽ có cơ hội chuyển đổi yêu cầu trước khi nó thực sự đến được ứng dụng Rails.

Bộ lọc ActionController chỉ đơn giản là trước/sau khi móc thực thi trước hoặc sau các phương pháp điều khiển tức thời của bạn trong Rails. Các lệnh này sẽ được gọi ngay trước hoặc sau phương thức điều khiển của bạn, nhưng sau toàn bộ phần còn lại của ngăn xếp Rails. Do đó có sự khác biệt đáng kể trong những gì có thể thông qua Rack Middleware và bộ lọc ActionController, cụ thể là vì Rack Middleware đang thực thi trước mã ứng dụng của bạn, nó sẽ không được thực hiện trong phạm vi tương tự như mã ứng dụng của bạn - ví dụ bạn sẽ không thể sử dụng các mô hình ứng dụng của mình, trừ khi bạn yêu cầu chúng một cách rõ ràng và thực hiện khởi tạo cần thiết (như thiết lập kết nối cơ sở dữ liệu).

Nếu bạn đang tìm kiếm quy tắc của ngón tay cái, ra khỏi đỉnh đầu của tôi ở đây là những gì tôi sẽ nói với bạn:

  1. Nếu bạn muốn làm điều gì đó với các yêu cầu trước khi phương pháp duy nhất trong một bộ điều khiển cụ thể , sử dụng bộ lọc trước trong bộ điều khiển đó.

  2. Nếu bạn muốn làm điều gì đó với yêu cầu trước khi tất cả các phương pháp điều khiển trong ứng dụng của bạn, và những gì bạn muốn làm là rất cụ thể cho ứng dụng của bạn hoặc dựa vào mã ứng dụng của bạn, hãy sử dụng bộ lọc trên ApplicationController của bạn.

  3. Nếu bạn muốn làm điều gì đó chung chung với yêu cầu, không gắn với mã ứng dụng của bạn, và bạn tưởng tượng sẽ tốt hơn nếu có thể sử dụng lại trong ứng dụng khác, Rack Middleware sẽ là phù hợp hơn.

Hy vọng điều đó sẽ hữu ích.

0

Theo như tôi hiểu bộ lọc hành động điều khiển và middlewares rack đang làm khá nhiều điều tương tự, ngoại trừ hai điều:

  • Kệ middleware được gọi trước khi chồng Rails, vì vậy mà bạn có thể đạt được một số hiệu suất (không chắc chắn về dù đó)
  • Kệ middleware là khép kín và tái sử dụng giữa các ứng dụng rack khác nhau, do đó Rails/bộ điều khiển động cơ của bạn và Sinatra/Merb/Padrino apss được sạch sẽ và khô
Các vấn đề liên quan