|zoom||Andrei Neculau||10/10/12 12:59 AM|
In https://vimeo.com/49609648, Matt talks about the zoom functionality.
It looks like the representation types are not versioned, correct?
For those that cannot afford not-versioned representations though, how would that look: zoom=price-v2 ?
That doesn't really work since what you want is to zoom into price, and get the v2 representation of price.
It gets more obvious with a level 2: zoom=price.currency (imagine that for some reasons currency would be a versioned representation)
Do you then switch to media-type parameters?
> Accept: application/vnd.a.item-v1;price=price-v2
And beyond that, am I the only one that understands Matt's talk on query-string, in conjunction with zoom as:
1. POST /items?zoom=price // this request will create an item
2. create the item at /items/123
3. return 201 with Location /items/123?zoom=price
|Re: zoom||Matthew Bishop||10/10/12 9:50 AM|
Versioning and zoom, interesting topic. My thoughts are very much in line with Steve Klabnick's post here: https://secure.designinghypermediaapis.com/nodes/fdivisitjqwp
...but you already read that one Andrei ;)
The kind of versioning you are describing is in the rel names, so 'price' links take you to an old price, while 'price-v2' take you to a new price resource. Inside both there might be a 'currency' link to describe the currency of the price. Two different clients would zoom into two different paths (with results):
and then for the new version
The trick is that the items representation would have to surface both links. This is either easy or hard, depending on how links are attached to a representation. The easy way would use something like WRML's 'link formulas' where the links are added by individual strategies via a whiteboard or similar; the hard way woud be to modify /items to have to know about both link relations.
About the second part, I think you are missing a bit:
1. POST /items?zoom=price&followlocation // this request will create an item
3. return 201 with Location /items/123 (no ?zoom=price)
as well as the items representation in the body; the representation will have a 'self' field with the zoom in it like this:
The zoom is part of the URI identifying the representation because it contains injected data from a related resource.
|Re: zoom||Andrei Neculau||10/11/12 4:18 AM|
Hmm, I will let this one sink in, Matt.
The surfacing of both links/rels is the easy part. The hard part is digesting versioned relations :) One versioned relation per versioned representation, in the context of minimizing as much as possible the versioning boom..
Thanks for replying so precisely.