API versioning strategy


#1

I am developing a service to be accessed within a browser and via API. I
am not sure what the best practise for API versioning is.

AdWords API split into major version by URI mutilation: /v1, /v2 etc.

My current thoughts are:

Website accessible from www.myservice.com
API accessible from v1.myserviceapi.com This will be a separate instance
with its own mongrels/mod_rails.

Major updates will go under a incremented subdomain,
v2.myserviceapi.com. This will happen infrequently. Perhaps once a year.

Minor updates will be a normal capistrano deploy.

Can anyone please comment on the above? It’s much appreciated.

Zac


#2

From what I can tell, your strategy of v1.example.com and
v2.example.com work well. Another strategy is api.example.com/v1/
and api.example.com/v2/

I personally prefer the latter, but it means everything listening on
api.example.com must speak both protocols, or you have to have a fancy
redirector that inspects packets.

–Michael

On Mon, Dec 15, 2008 at 3:48 PM, Zac Z.


#3

For service apis with end point on the network, it’s usually preferred
to keep the end point stable as you don’t want to your client apps to
change often when you start versioning. If your new version breaks
compatibility significantly, then it’s ok to have a new end point but
otherwise the versioning might be better handled at the message level.
ie, your message may have a header with v=v1, etc.

Regards,

rp8

http://lun.competo.com/

Zac Z. wrote:

I am developing a service to be accessed within a browser and via API. I
am not sure what the best practise for API versioning is.

AdWords API split into major version by URI mutilation: /v1, /v2 etc.

My current thoughts are:

Website accessible from www.myservice.com
API accessible from v1.myserviceapi.com This will be a separate instance
with its own mongrels/mod_rails.

Major updates will go under a incremented subdomain,
v2.myserviceapi.com. This will happen infrequently. Perhaps once a year.

Minor updates will be a normal capistrano deploy.

Can anyone please comment on the above? It’s much appreciated.

Zac