I'm working on a RESTful API for an application (much thanks for Catalyst::Controller::REST, by the way) and need to handle the If-Modified-Since header to efficiently check when things have changed.
It seems my controllers will follow the pattern: 1. Initial validation of the request and get the base object that the request is about. 2. Check for If-Modified-Since header. If it is present and no older than the last-modified date of the object, return a 304 status with no body. 3. Otherwise, set the Last-modified and Expires headers. (The latter to keep Firefox from caching the result too long.) 4. If a HEAD request, exit. Otherwise return the object, which involves some more reads from the database etc. I've looked at the Cache::HTTP plugin, but it doesn't do what I want, which is to pre-empt running queries if they don't need to be run. Is there another plugin for doing this sort of thing? If not, I am thinking of writing a plugin that would work something like $c->if_unmodified( headers => $sub1, content => $sub2 ); where $sub1 would be code to set the last-modified and maybe weak etags (based on the last-modified if nothing else is specified). The method would check for a If-Match and If-Modified-Since headers, etc. If they matched, it would return a 304 error, otherwise it would run $sub2. Does this seem a worthwhile endeavor? _______________________________________________ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/