In the example you use, the proper HTTP behavior is for the API should allow 
for a HTTP 302 response and clients should follow the permanent move. This 
provides both a persistent reference based on the URI and a way to handle the 
alteration of URI structure.

-George

On Oct 11, 2011, at 2:56 PM, Brian Waldon wrote:

> I'm not sure I agree with that. A URI should be a persistent reference to a 
> resource within the context of a major version of an API. Between major 
> versions, the URI structure can change completely (for example /servers -> 
> /instances), destroying your persistent reference.
> 
> Additionally, if we only support requests within the context of the latest 
> minor version of an API, the major version is the only piece of information 
> that matters. The mechanism for versioning through content types will only be 
> valid within a single major version, as I do not want to define a spec that 
> resides above all major versions of our api.
> 
> Waldon
> 
> 
> On Oct 11, 2011, at 9:14 AM, George Reese wrote:
> 
>> Versioning should not be included in the URI. It belongs in the headers. A 
>> URI should be a persistent reference to a resource. As such, versioning 
>> always breaks that persistent reference.
>> 
>> -George
>> 
>> On Oct 11, 2011, at 1:40 PM, Brian Waldon wrote:
>> 
>>> I'm all for exposing only the major version in the URI (/v1). We have 
>>> fallen into a trap with v1.0 and v1.1 as they are not 
>>> backckwards-compatible specs while their versioning implies they are. I 
>>> think we can have a whole separate discussion on how to solve that problem, 
>>> so like I said earlier, I would like to get buy-in on my original proposal 
>>> before we move on to spec-specific details.
>>> 
>>> Thanks for the great input, guys!
>>> 
>>> Waldon
>>> 
>>> 
>>> On Oct 11, 2011, at 2:12 AM, Bryan Taylor wrote:
>>> 
>>>> On 10/11/2011 12:26 AM, Mark Nottingham wrote:
>>>>> Where would these versions show up? In URLs? In documentation? In
>>>>> response payloads?
>>>>> 
>>>>> If they show up in URLs, then every backwards-compatible change would
>>>>> be made into a backwards-incompatible change. E.g., if you had
>>>>> 
>>>>> http://www.example.com/v1.2.3/foo
>>>>> 
>>>>> as a resource, and adding a new resource .../bar bumps it to v1.2.4,
>>>>> then that backwards-compatible change (because it doesn't break old
>>>>> clients) now causes everybody to break.
>>>> 
>>>> Right. This is a trap to be avoided.
>>>> 
>>>>> The only sensible thing to put in URIs is a major version identifier
>>>> that indicates backwards-incompatible changes (i.e., the slate is wiped
>>>> clean, it's a different URL tree). E.g.,
>>>>> 
>>>>> http://www.example.com/v1/
>>>>> 
>>>>> Of course, that can be any arbitrary string, whether it be "v1" or
>>>>> "v1.1" or "essex". However, putting "v1.1" in there is going to confuse
>>>>> people, because most people believe that a minor release is, by nature,
>>>>> backwards compatible.
>>>> 
>>>> I like just plain old v1 as it's short and sweet. 
>>>> 
>>>>> If we want to just use them in documentation, there's no harm, of
>>>>> course. Likewise, the client could query the server to find out what it
>>>>> supports, but something more descriptive than a linear version number
>>>>> would be useful; e.g., some sort of linked capability catalogue format.
>>>> 
>>>> We are usually putting a version info resource at the version root, eg:
>>>> http://www.example.com/v1/
>>>> 
>>>> See here for how compute is doing it:
>>>> <http://docs.openstack.org/trunk/openstack-compute/developer/openstack-compute-api-1.0/content/ch03s09.html>
>>>> 
>>>> Unfortunately the example uses "v1.0" and is confusing as you noted above.
>>>> 
>>>> An idea I've dabbled with is putting the major and minor version number 
>>>> in the WADL filename. It'd be a good addition to WADL to allow it to 
>>>> express what
>>>> version it is in its conent.
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Mailing list: https://launchpad.net/~openstack
>>>> Post to     : openstack@lists.launchpad.net
>>>> Unsubscribe : https://launchpad.net/~openstack
>>>> More help   : https://help.launchpad.net/ListHelp
>>>> This email may include confidential information. If you received it in 
>>>> error, please delete it.
>>>> 
>>> 
>>> 
>>> 
>>> --------------------------------------
>>> Brian Waldon
>>> Cloud Software Developer
>>> Rackspace Hosting
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> Mailing list: https://launchpad.net/~openstack
>>> Post to     : openstack@lists.launchpad.net
>>> Unsubscribe : https://launchpad.net/~openstack
>>> More help   : https://help.launchpad.net/ListHelp
>> 
>> --
>> George Reese - Chief Technology Officer, enStratus
>> e: george.re...@enstratus.com    t: @GeorgeReese    p: +1.207.956.0217    f: 
>> +1.612.338.5041
>> enStratus: Governance for Public, Private, and Hybrid Clouds - @enStratus - 
>> http://www.enstratus.com
>> To schedule a meeting with me: http://tungle.me/GeorgeReese
>> 
>> This email may include confidential information. If you received it in 
>> error, please delete it.
> 
> 
> 
> --------------------------------------
> Brian Waldon
> Cloud Software Developer
> Rackspace Hosting
> 
> 

--
George Reese - Chief Technology Officer, enStratus
e: george.re...@enstratus.com    t: @GeorgeReese    p: +1.207.956.0217    f: 
+1.612.338.5041
enStratus: Governance for Public, Private, and Hybrid Clouds - @enStratus - 
http://www.enstratus.com
To schedule a meeting with me: http://tungle.me/GeorgeReese

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
Mailing list: https://launchpad.net/~openstack
Post to     : openstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openstack
More help   : https://help.launchpad.net/ListHelp

Reply via email to