什么是 Ruby 中的 Rack 中间件?对于“中间件”的含义,我找不到任何好的解释。
Rack 中间件不仅仅是“一种过滤请求和响应的方法”——它是使用Rack的 Web 服务器的管道设计模式的实现。
它非常清晰地分离了处理请求的不同阶段——关注点分离是所有设计良好的软件产品的关键目标。
例如,使用 Rack 我可以有管道的单独阶段:
身份验证 :当请求到达时,用户的登录信息是否正确?如何验证此 OAuth、HTTP 基本身份验证、名称/密码?
授权 :“用户是否有权执行此特定任务?”,即基于角色的安全性。
缓存 :我已经处理了这个请求,我可以返回一个缓存的结果吗?
装饰 :如何增强请求以使下游处理更好?
性能和使用监控 :我可以从请求和响应中获得哪些统计信息?
执行 :实际处理请求并提供响应。
能够分离不同的阶段(并且可以选择包括它们)对于开发结构良好的应用程序有很大帮助。
还有一个围绕机架中间件开发的很棒的生态系统——您应该能够找到预先构建的机架组件来完成上述所有步骤以及更多。有关中间件列表,请参阅Rack GitHub wiki 。
中间件是一个可怕的术语,它指的是任何帮助但不直接参与执行某些任务的软件组件/库。非常常见的示例是日志记录、身份验证和其他 常见的水平处理组件 。这些往往是每个人都需要跨多个应用程序的东西,但没有太多人有兴趣(或应该)构建自己。
关于它是一种过滤请求的方法的评论可能来自RailsCast 第 151 集:机架中间件屏幕截图。
Rack 中间件是从 Rack 演变而来的,在Introduction to Rack middleware中有很好的介绍。
此处有 Wikipedia 上的中间件介绍。