Improve the api versioning
- Don't use the project version for the API, but the actual API version (just v1 defined now). - Change the return type to a list of versions (we can't be that optimistic). blueprint api Change-Id: Icb8c0c91798cf4eb1e10b39040e123119e859d10
This commit is contained in:
parent
8cd2ffb226
commit
3fec56d204
@ -14,20 +14,56 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import pecan
|
||||
from wsme import types as wtypes
|
||||
import wsmeext.pecan as wsme_pecan
|
||||
|
||||
from solum import version
|
||||
|
||||
STATUS_KIND = wtypes.Enum(str, 'SUPPORTED', 'CURRENT', 'DEPRECATED')
|
||||
|
||||
|
||||
class Link(wtypes.Base):
|
||||
"""A link representation."""
|
||||
|
||||
href = wtypes.text
|
||||
"The link url"
|
||||
|
||||
targetName = wtypes.text
|
||||
"Textual name of the target link"
|
||||
|
||||
@classmethod
|
||||
def sample(cls):
|
||||
return cls(href=('http://localhost:9777/v1'),
|
||||
targetName='v1')
|
||||
|
||||
|
||||
class Version(wtypes.Base):
|
||||
"""Version representation."""
|
||||
|
||||
version = wtypes.text
|
||||
id = wtypes.text
|
||||
"The version identifier"
|
||||
|
||||
status = STATUS_KIND
|
||||
"The status of the API (SUPPORTED, CURRENT or DEPRECATED)"
|
||||
|
||||
link = Link
|
||||
"The link to the versioned API"
|
||||
|
||||
@classmethod
|
||||
def sample(cls):
|
||||
return cls(id='v1.0',
|
||||
status='CURRENT',
|
||||
link=Link(targetName='v1',
|
||||
href='http://localhost:9777/v1'))
|
||||
|
||||
|
||||
class RootController(object):
|
||||
|
||||
@wsme_pecan.wsexpose(Version)
|
||||
@wsme_pecan.wsexpose([Version])
|
||||
def index(self):
|
||||
return Version(version=version.version_string())
|
||||
host_url = '%s/%s' % (pecan.request.host_url, 'v1')
|
||||
v1 = Version(id='v1.0',
|
||||
status='CURRENT',
|
||||
link=Link(targetName='v1',
|
||||
href=host_url))
|
||||
return [v1]
|
||||
|
@ -16,7 +16,6 @@
|
||||
|
||||
from solum.openstack.common import jsonutils
|
||||
from solum.tests.api import base
|
||||
from solum import version
|
||||
|
||||
|
||||
class TestRootController(base.FunctionalTest):
|
||||
@ -25,4 +24,7 @@ class TestRootController(base.FunctionalTest):
|
||||
response = self.app.get('/', headers={'Accept': 'application/json'})
|
||||
self.assertEqual(response.status_int, 200)
|
||||
data = jsonutils.loads(response.body)
|
||||
self.assertEqual(data['version'], version.version_string())
|
||||
self.assertEqual(data[0]['id'], 'v1.0')
|
||||
self.assertEqual(data[0]['status'], 'CURRENT')
|
||||
self.assertEqual(data[0]['link'], {'href': 'http://localhost/v1',
|
||||
'targetName': 'v1'})
|
||||
|
Loading…
Reference in New Issue
Block a user