何时使用WSGI中间件?
我写了一个路由器,它会接收请求的路径,然后用正则表达式去匹配,如果匹配成功,就会调用一个WSGI处理器。匹配到的结果会放到一个字典里,并添加到环境变量中。这样做在WSGI中修改环境变量算不算不好的做法呢?
但是,WSGI中间件不就是为了这个目的而设计的吗?我刚刚读了《WSGI中间件的危害》这篇文章,开始怀疑我是否应该重写我的路由器,让它不再是一个中间件。如果一个应用程序使用了这个包含匹配结果的字典,那它就会依赖于我的中间件。另一方面,没有哪个应用程序一定要使用这个额外的字典。我也可以选择不提取路径参数,只保留路由功能,但那样每个应用就得再跑一次正则表达式来提取路径参数。
所以,我该怎么做呢:
- 保持现状;继续进行路由、路径参数提取和环境变量的修改
- 把路由器变成一个WSGI应用,而当前的WSGI应用则使用框架特定的处理器
- 简化路由器,只保留路由功能,让应用在请求路由后再进行一次正则匹配来提取路径参数
1 个回答
5
如果你往环境中添加东西,然后在应用程序中使用这些东西,而没有任何备用方案,那么在某种程度上,你就把应用程序和中间件绑定在了一起。
在这种情况下,有一个约定,告诉你如何把这些捕获的值添加到环境中:wsgiorg.routing_args。所以虽然你会在应用程序中引用这个捕获的内容,但这并不是完全随意的沟通。
(虽然确实可以过度使用中间件,我认为那篇文章有些夸大其词;中间件可以是一个很好的抽象方式,让你考虑、实现和测试应用程序的不同部分,即使最开始这些部分是由一个人为了一个单一目标实现的)