[Web-SIG] help with the implementation of a WSGI middleware

Ian Bicking ianb at colorstudy.com
Tue Jul 8 04:42:24 CEST 2008


Phillip J. Eby wrote:
> I don't object to stuffing things in the environment; I object to:
> 
> 1. Putting APIs in there (the API should be regular functions or 
> objects, thanks)
> 2. Wrapping middleware around an app to put in APIs that it's going to 
> have to know about anyway.

Well, sometimes this occurs because you want the middleware at a 
different level.  E.g., something like the transaction handler in 
repoze.tm (http://svn.repoze.org/repoze.tm/trunk/) -- you expect it to 
be there, and for it to put an object with a certain API in the 
environment, and it implements an outer transaction boundary.  It's 
something you can put in fairly speculatively, so that some consumer can 
make use of it.  It's also a case where objects seemingly well outside 
the scope of the controller/web need access to some transaction manager, 
and that manager's most obvious scope is for the request, and so some 
common means to "get the current transaction manager" would be nice. 
Anyway, arguably a good example of both an API in the environment, and 
an API that would be nice if you could easily access without being bound 
to any particular framework's convention for how to get the current request.

>> Often middleware is used to implement policy separate from the 
>> application.
> 
> And that kind of middleware is therefore (one hopes) transparent to the 
> application.

Often *some* implementation must be present.  E.g., if you check 
REMOTE_USER you implicitly expect *something* to set REMOTE_USER.

>>   Libraries require another kind of abstraction, and implementing 
>> policy in libraries is, IMHO, messier than the middleware alternative 
>> for many important use cases.  Also there exists no neutral ground for 
>> libraries in Python.  Maybe egg entry points, but they aren't all that 
>> neutral, and aren't all that applicable either.  zope.interface would 
>> like to be neutral ground, but of course is not.  So multiple 
>> implementations can at least possibly congeal around a WSGI request.
> 
> Standards for data in the environ may be a good idea.  But APIs in the 
> environ are generally *not* a good idea.

Yes, generally I agree.

>> Also of course "server" is a vague term.  Request in, response out, 
>> that's the minimal abstraction for HTTP, and there is no "server" in 
>> there.  If we're talking about "things that call WSGI applications",
> 
> Nope, I mean actual servers.

Well, as I was implying, anything that calls an app is in some sense a 
server.

-- 
Ian Bicking : ianb at colorstudy.com : http://blog.ianbicking.org


More information about the Web-SIG mailing list