我写一个路由器,它接受一个请求的路径,匹配正则表达式,并调用一个WSGI处理程序,如果正则表达式匹配.具有匹配捕获组的dict将添加到envrion中.用WSGI中间件修改环境是不好的风格?
但那是WSGI中间件的发明吗?我刚读了WSGI Middleware Considered Harmful并想知道是否应该重写我的路由器不再是中间件.如果应用程序使用带有捕获组的dict,则应用程序将依赖于我的中间件.另一方面,没有应用程序必须使用此额外的dict.我还可以放弃路径参数提取并将路由器减少到路由,但是然后每个应用程序必须第二次重新运行正则表达式以进行路径参数提取.
那么该怎么办:
>原样离开;与路由,路径参数提取和环境操作
>使路由器成为WSGI应用程序和当前WSGI应用程序框架特定处理程序
>将路由器减少到路由并提取第二次执行正则表达式,以便在请求路由到的应用程序中提取路径参数
解决方法:
如果您向环境中添加内容然后在应用程序中使用这些内容而没有任何后备,那么您必须在某种程度上将应用程序绑定到中间件.
在这种特殊情况下,有一个约定如何将这些捕获的值添加到environ:wsgiorg.routing_args.因此,当您将此捕获的引用添加到您的应用程序时,它不是一个完全临时的通信.
(虽然你当然可以过度使用中间件,但我认为特定的文章夸大了这个案例;中间件可以是一个很好的抽象,可以单独考虑,实现和测试应用程序的不同部分,即使最初这些部分是为了一个单一的目标实现的一个人)