In httpy, a responder is simply an object with a respond callable. For example, a responder can be a module with a respond function, or a class instance with a respond method. Responders have two optional data attributes, which, if not present, will be added by whatever coupler is in use. For responders that are classes, this API addition takes place prior to instantiation, so the information is available to the constructor.
| request) |
500 Internal Server
Error
response.
| ) |
Responders are validated using Zope's interface machinery. Your responder may provide this interface without explicitly declaring so. If a responder does not have a respond callable, or if respond does not accept exactly one argument, then an Exception is raised.
Responders must be able to respond to multiple (non-concurrent) requests.
Here is an example showing the general feel of a responder. This example assumes a logic module with API for getting and setting data based on a URI path and a POST body. The suggestion here is that these might return a commonly formatted data structure, which would then be used to populate a common template. Notice the authorization check before setting data.
import auth
import logic
import templating
from httpy import Response
def respond(request):
if request.method == 'GET':
result = logic.get_data(request.path)
elif request.method == 'POST':
if not auth.check(request):
raise Response(403)
result = logic.set_data(request.path, request.raw_body)
else:
raise Response(501)
template = templating.get_template(request.path)
body = template.render(result)
return Response(200, body)
This is a contrived example, basically following the popular Model-View-Controller pattern: the auth and logic modules are the model, the templating module provides the view, and the responder is the controller. However, this pattern is not enforced in any way, and the bottom line is that you've got all of Python to play with in writing your responders.
httpy is Zeta software. It is copyright © 2006 by Chad Whitacre, and is offered free of charge, warranty, and restrictions.