<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 2014年02月28日 13:40, Chris Friesen
      wrote:<br>
    </div>
    <blockquote cite="mid:5310215E.4010304@windriver.com" type="cite">On
      02/27/2014 06:00 PM, Alex Xu wrote:
      <br>
      <br>
      <blockquote type="cite">Does mean our code looks like as below?
        <br>
        if client_version > 2:
        <br>
            ....
        <br>
        elif client_version > 3
        <br>
            ...
        <br>
        elif client_version > 4:
        <br>
           ...
        <br>
        elif client_version > 5:
        <br>
           ...
        <br>
        elif client_version > 6:
        <br>
           ..
        <br>
        <br>
        And we need test each version...  That looks bad...
        <br>
      </blockquote>
      <br>
      I don't think the code would look like that
      <br>
      <br>
      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.
      <br>
      <br>
      So a part of the API that only made one backwards-incompatible
      change at version 3 would only need one check.
      <br>
      <br>
      if client_version >= 3
      <br>
          do_newer_something()
      <br>
      else
      <br>
          do_something()
      <br>
      <br>
      <br>
      <br>
      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.
      <br>
      <br>
      <br>
      if client version >= 6
      <br>
          do_newer_something()
      <br>
      else
      <br>
          do_something()
      <br>
      <br>
    </blockquote>
    <br>
    Yes, I know it. But it still looks bad :(<br>
    <br>
    In api code, it will be looks like as below:<br>
    <br>
    def do_something(self, body):<br>
        if client_version == 2:<br>
           args = body['SomeArguments']<br>
        elif client_version == 3:<br>
           args = body['some_arguments']<br>
    <br>
       try:<br>
            ret = self.compute_api.do_something(args)<br>
       except exception.SomeException:<br>
            if client_version == 2:<br>
                raise exception.HTTPBadRequest()<br>
            elif client_version == 4:<br>
                raise exception.HTTPConflictRequest()<br>
    <br>
       if client_version == 2:<br>
           return {'some_arguments':
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    ret}<br>
       elif client_version == 3:<br>
           return {'SomeArguments': ret}<br>
    <br>
    <blockquote cite="mid:5310215E.4010304@windriver.com" type="cite">
      <br>
      Chris
      <br>
      <br>
      <br>
      _______________________________________________
      <br>
      OpenStack-dev mailing list
      <br>
      <a class="moz-txt-link-abbreviated" href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a>
      <br>
      <a class="moz-txt-link-freetext" href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a>
      <br>
      <br>
      <br>
      <br>
    </blockquote>
    <br>
  </body>
</html>