- From: Michael Burrows <asplake@googlemail.com>
- Date: Tue, 19 May 2009 09:10:28 +0100
- To: uri@w3.org
- Cc: joe@bitworking.org
- Message-Id: <A33982EF-5C33-4F2F-A236-E67A23C5B5DF@asplake.co.uk>
[I'm not a member of this list - I'm responding to Joe's blog post, so apologies if this message doesn't thread properly] I used URI Templates in a proof-of-concept that demonstrated scripting (in Ruby) and acceptance testing of a real-time Java-based component in the bond trading arena that previously had no HTTP interface. I'm no longer with the firm, but the project was regarded as a success (others are building on it), and the idea of resource-oriented HTTP interfaces also gained traction internally. Now on leave, I have built on the experience to prototype a metadata-driven Rubygem path- to, and then described_routes, which generates said data from Rails in JSON, YAML and XML. I'm aware of one real-world Javascript client for the JSON data. Ruby has excellent URI template support in the shape of Bob Aman's (sporkmonger's) addressable gem. I've taken advantage of a recent feature which allows templates to be partially expanded, which in my case allows the generation of metadata specific to a resource instance, which in turn points the way to discovery via arbitrary landing sites, not just the application's root or some designated metadata link. I find this interesting as it may offer convenient ways for client applications to find and follow hyperlinks that relate to arbitrary non-html-based representations. I do use the prefix and join operators. For example, typical Rails routes translate to paths like /parent/{parent_id}{-prefix|.|format} /parent/{parent_id}/child{-prefix|.|format} where {format} is an optional parameter. The {format} parameter makes it difficult to model this nicely in schemes that are strictly hierarchical and (more generally) there's merit I think in the indirection offered by having full URI templates. I have argued that this reduces coupling. The join operator is useful when modelling APIs that rely heavily on query parameters (e.g. Delicious). I like being able to disregard whether a parameter goes into the path or the query. A lot of this is covered in Partial template expansion in described_routes (including the comments) and Manifesto and roadmaps for described_routes and path-to. The whole 3-4 week journey is covered extensively in earlier posts. My conclusion therefore is to keep the more advanced features of URI Templates. The examples (if they're intended as a test set) could do with beefing up - I contributed a couple of bug fixes to Addressable that weren't covered by them. I did express regrets early on that URI templates didn't distinguish between optional and mandatory parameters, but I've dealt with that now in the surrounding metadata and it's no longer a concern. I'm not interested personally in parsing. Decent web frameworks do it already, and if clients need to do it there's probably something wrong somewhere. Regards, Mike mjb@asplake.co.uk http://positiveincline.com http://twitter.com/asplake > It's been a while since the URI Template draft has been updated, and > in the interim > there has been some implementation experience: > > http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/ > http://code.google.com/p/uri-templates/wiki/Implementations > > In the intervening months two things have happened: > > 1. In all the URI Template examples I've seen, only the simplest > case {foo} has > even been shown. > > 2. I've been repeatedly asked about "going the other way", i.e. > parsing URIs > based on templates. > > This leads to two questions: > > 1. Are there any real-world uses of the more complex URI Templates, or > is {foo} enough? > > 2. *If* the syntax is simplified to {foo} there is an opportunity to > support the parsing > case, ala http://bitworking.org/projects/1812/wsgidispatcher.html > Is that of interest to anyone? > > Thanks, > -joe > > -- > Joe Gregorio http://bitworking.org
Received on Tuesday, 19 May 2009 09:21:15 UTC