- From: James Graham <jg307@cam.ac.uk>
- Date: Mon, 09 May 2005 16:29:05 +0100
Sjoerd Visscher wrote: > James Graham wrote: > >> I should have stated explicitly that when I said "marking the message >> as read in some way" I intended that the "some way" could be more >> than just changing a message's unread flag, it could be e.g. moving >> the message from the inbox to a "Read messages" folder. Even if the >> message is "just" marked as read, this can change more than the >> appearance of the message - it can change where in the interface it >> is displayed (in some sort of virtual-folder based setup), etc. So >> I don't think you can dismiss this as "not really a good example of a >> non-idempotent action" - it clearly /is/ non-idempotent yet >> representing the action as a link is normal and widely understood. >> > > What this shows is that marking a message read when it is retrieved is > a bad idea. Retrieving a message must be done with GET, so that it can > be cached. Setting the read state should be done seperately with POST. But can you do it such that it will work without javascript? I consider distinguishing read/unread messages to be a basic enough feature that it should be possible to implement it without requiring client-side scripting. In this case, the obvious implementation would be a javascript function called when the message was recieved that performed a background POST request to update the read flag on the message. Is there a better way? > Most e-mail clients only mark an item read when it's open for a few > seconds, it's a bonus that you can do that too. That's really not necessary for a web-based client (at least one with the example UI) since every message is explicitly requested by a click (as I understand it, the timer solves the problem that keyboard navigation over a list of messages can result in message being marked read). This example isn't unique in assosiating a document request with an implicit change in that status of that document to the user. Another example would be a web-based document management system which had a "recently viewed documents" section. Again, this could be implemented by POSTing a "the document is actually being viewed" notification but that's really complex compared to just putting the logic to update the recently viewed documents list in the request handling function. Better, perhaps, but much more complex and requiring client side code to do something that previously could be handled server side. Clearly allowing lins with method="post" would help these situations although they would break precaching of the webapp. Assuming that people dislike <a method="post"> and accept that not all state altering operations imply form controls, it might not be possible for HTML5 to mitigate the additional server-side complexity mandated by requiring that GET operations are shadowed by extra POST operations everytime that requesting part of a web-app has an effect on the state of the app. Even so, we should make it easy to implement the client side part of the deal, preferably in a script-free way. -- "But if science you say still sounds too deep, Just do what Beaker does, just shrug and 'Meep!'" -- Dr. Bunsen Honeydew & Beaker of Muppet Labs
Received on Monday, 9 May 2005 08:29:05 UTC