Mark Nottingham wrote:

Hi James,

On 29/06/2005, at 10:09 AM, James M Snell wrote:


1. This appears to be addressed at solving the same problem as Bob Wyman's RFC3229+feed proposal [http://bobwyman.pubsub.com/main/ 2004/09/using_rfc3229_w.html]. Do you have any empiracle data similar to what Bob provides @ http://bobwyman.pubsub.com/main/ 2004/10/massive_bandwid.html that would indicate that your approach is a better solution to this problem? These are actually not mutually exclusive solutions, they're just different and could be used for different scenarios -- e.g. Bob's tends to make a lot of sense for blog dashboard feeds like what we use within IBM to show all post and commenting activity within our internal blogs server while your mechanism would work rather well for things like Top Ten lists, etc. I would just like to see a bit of a compare/contrast on the two approaches.


It's orthoganal to RFC3229. The problem I'm solving is how to reconstruct the *entire* state of the logical feed, not just one partial representation of it; although RFC3229 could be used to do that, it would require feed authors to post the entire content of their feed (potentially, many megabytes). This would incur a huge load, because any clients that don't support RFC3229 would have to GET the entire feed, leading to severe bandwidth problems.

To give a concrete example, Dave Winer would have to post one RSS file containing every entry he's made in Scripting News for the past 10+ years to use RFC3229 to meet the same goal; with this proposal, he'd just have to add a 'prev' to each archived feed (assuming he has archives around, which if he doesn't, I imagine he could reconstruct).

At times we do get spolied by the ability to dynamically generate responses don't we ;-) You're obviously correct when it comes to statically generated content - RFC3229+feed does not provide a workable solution in that case.

2. Is the feed state mechanism a way of paging through the current contents of a collection or a snapshot-in-time view of a feed? That is...

   is it

A) Collection has a bunch of entries. Each feed representation has 15 entries and the prev link acts like a paging mechanism similar to what we see currently use in search results. Deleting the first ten entries out of the collection would cause all of the entries in the feed to "shift backwards"
            in the feeds

B) Each prev link is representative of how the feed looked at a given point in time. E.g. the feed as it would
             have appeared at a given hour of a given day

If it's A, then Bob's RFC3229+feed solution seems much more efficient. (see #1)

If it's B, then I'm wondering why you don't just use an ETag based approach, e.g.

      <fs:Stateful>1</fs:Stateful>
      <fs:prev>{ETag}</fs:prev>

This would allow clients to only ever have to deal with a single URI for a feed and use conditional-gets with ETag to differentiate which snapshot of the feed they want to get and would likely make it easier to remediate potential recursive reference attacks, (e.g. feed A references feed B which references feed C which is a blind redirect to Feed A).


This proposal doesn't handle deletion or other aspects of identity in feeds; I tried to introduce language like that earlier in Atom itself, but we failed to gain consensus around it.

How does an ETag help you locate a previous feed to reconstruct state? Even if it could, I'm not sure intermingling HTTP protocol details with application semantics; although there's nothing to prevent this theoretically, in many implementations, it might be problematic to predict what the ETag is.

It's not so much using ETag to reconstruct state as much as it is to view access previous views of the feed. Btw, I threw this out for discussions sake and not because I think it's the "right" solution. I'm not particularly in love with it myself.


3. Microsoft's RSS Lists spec uses <cf:treatAs /> to attach behavioral semantics to a feed. This proposal uses <fs:Stateful /> to attach behavioral semantics. It would be nice if we could come up with a relatively simple and standardizable way of attaching behavioral semantics. For example, a standardized <treatAs /> element:

   <atomex:treatAs>stateful</atomex:treatAs>

The value of the treatAs element would be a list of tokens with defined semantics. Each token SHOULD be registered with IANA. Unknown tokens would be ignored. Incompatible tokens would be ignored with first-in-the-list takes precedence semantics. For example:

   <atomex:treatAs>stateful list</atomex:treatAs>

Indicates that the feed should be treated as a list whose past states can be queried using the kind of mechanism you've defined.


That seems like an awfully heavyweight solution. What does defining the container and an IANA registry add?

The value is that I would really like to see a common and consistent way of attaching behavioral semantics to the feed rather than each individual vendor / spec defining their own app and impl specific methods. It could be done without IANA support, of course, but it's just annoying to see relatively similar tasks done in completely different ways.

--
Mark Nottingham     http://www.mnot.net/



Reply via email to