Fwd: [Cosmo] content negotiation and cosmo

Bobby Rullo br at osafoundation.org
Tue Mar 14 15:58:53 PST 2006



On Mar 13, 2006, at 3:31 PM, Matthew Eernisse wrote:

> Content negotiation does on its face seem to be more complicated,  
> and a
> bit more opaque and brittle than the simplicity of allowing explicit
> choice of content-type through the URI.
>
> The one bit of personal experience I have with this type of thing  
> is the
> responseXML property of the XHR object not getting populated properly
> because the response from a Web service comes back with a MIME type of
> 'application/soap+xml' instead of the expected 'application/xml' or
> 'text/xml.' A lot of people seem to get bitten by this because the
> response coming back is clearly well-formed XML, and the only way to
> figure out what's wrong is to know that XHR is broken in this way and
> inspect the headers of the response.
>
> My two piastres.
>
>

The main issue I have with content negotiation is that it requires  
that clients that use it know the right stuff to put in Accept. What  
if you have some client which wants an Atom feed, but the only way to  
get an Atom feed is to use a URL like "http://cosmoserver/home/user/ 
feeds" in conjunction with the proper Accept header. If your client  
doesn't know from Accept hearers and you have no way to tell it to  
use them then you are out of luck.

Whereas the URI based way you can do:
	http://cosmoserver/home/user/feeds/rss
	http://cosmoserver/home/user/feeds/atom
	http://cosmoserver/home/user/feeds/someotherformat

and know just what you're getting.

I guess it's similar to the problem the author describes where he  
says "I get no chance to tweak the services Accept: header."

Maybe you could have your cake and eat it too like this:

	When doing a GET in the user's DAV home without an Accept header,  
(they're not required, right?) return the default cosmo format for  
that resource. If they specify something in Accept, respect the  
client's wishes.

	In addition, have content-type-specific paths for different feeds  
and formats, and requests in those paths will only return the one  
type of format that it is intended for.

This way you get maximum interop:

	1) For clients that are don't use "Accept" but have users who know  
which URI to use it works.
	2) For clients that DO use "Accept" but have users who don't  
understand the difference between the different formats and hence not  
know which path to put in (or don't want to think about it) it also  
works.

Bobby




More information about the cosmo-dev mailing list