On 2014?02?28? 13:40, Chris Friesen wrote:
On 02/27/2014 06:00 PM, Alex Xu wrote:

Does mean our code looks like as below?
if client_version > 2:
    ....
elif client_version > 3
    ...
elif client_version > 4:
   ...
elif client_version > 5:
   ...
elif client_version > 6:
   ..

And we need test each version...  That looks bad...

I don't think the code would look like that

Each part of the API could look at the version separately. And each part of the API only needs to check the client version if it has made a backwards-incompatible change.

So a part of the API that only made one backwards-incompatible change at version 3 would only need one check.

if client_version >= 3
    do_newer_something()
else
    do_something()



Maybe some other part of the API made a change at v6 (assuming global versioning). That part of the API would also only need one check.


if client version >= 6
    do_newer_something()
else
    do_something()


Yes, I know it. But it still looks bad :(

In api code, it will be looks like as below:

def do_something(self, body):
    if client_version == 2:
       args = body['SomeArguments']
    elif client_version == 3:
       args = body['some_arguments']

   try:
        ret = self.compute_api.do_something(args)
   except exception.SomeException:
        if client_version == 2:
            raise exception.HTTPBadRequest()
        elif client_version == 4:
            raise exception.HTTPConflictRequest()

   if client_version == 2:
       return {'some_arguments': ret}
   elif client_version == 3:
       return {'SomeArguments': ret}


Chris


_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev




_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to