API Version 2 Development¶
The sahara project is currently in the process of creating a new RESTful application programming interface (API). This interface is experimental and will not be enabled until it has achieved feature parity with the current (version 1.1) API.
This document defines the steps necessary to enable and communicate with the new API. This API has a few fundamental changes from the previous APIs and they should be noted before proceeding with development work.
Warning
This API is currently marked as experimental. It is not supported by the sahara python client. These instructions are included purely for developers who wish to help participate in the development effort.
Enabling the experimental API¶
There are a few changes to the WSGI pipeline that must be made to enable the new v2 API. These changes will leave the 1.0 and 1.1 API versions in place and will not adjust their communication parameters.
To begin, uncomment, or add, the following sections in your api-paste.ini file:
[app:sahara_apiv2]
paste.app_factory = sahara.api.middleware.sahara_middleware:RouterV2.factory
[filter:auth_validator_v2]
paste.filter_factory = sahara.api.middleware.auth_valid:AuthValidatorV2.factory
These lines define a new authentication filter for the v2 API, and define the application that will handle the new calls.
With these new entries in the paste configuration, we can now enable them with the following changes to the api-paste.ini file:
[pipeline:sahara]
pipeline = cors request_id acl auth_validator_v2 sahara_api
[composite:sahara_api]
use = egg:Paste#urlmap
/: sahara_apiv2
There are 2 significant changes occurring here; changing the authentication validator in the pipline, and changing the root “/” application to the new v2 handler.
At this point the sahara API server should be configured to accept requests on the new v2 endpoints.
Communicating with the v2 API¶
The v2 API makes at least one major change from the previous versions,
removing the OpenStack project identifier from the URL. Instead of
adding this UUID to the URL, it is now required to be included as a
header named OpenStack-Project-ID
.
For example, in previous versions of the API, a call to get the list of clusters for project “12345678-1234-1234-1234-123456789ABC” would have been made as follows:
GET /v1.1/12345678-1234-1234-1234-123456789ABC/clusters
X-Auth-Token: {valid auth token}
This call would now be made to the following URL, while including the
project identifier in a header named OpenStack-Project-ID
:
GET /v2/clusters
X-Auth-Token: {valid auth token}
OpenStack-Project-ID: 12345678-1234-1234-1234-123456789ABC
Using a tool like HTTPie, the same request could be made like this:
$ httpie http://{sahara service ip:port}/v2/clusters \
X-Auth-Token:{valid auth token} \
OpenStack-Project-ID:12345678-1234-1234-1234-123456789ABC
Following the implementation progress¶
As the creation of this API will be under regular change until it moves out of the experimental phase, a wiki page has been established to help track the progress.
https://wiki.openstack.org/wiki/Sahara/api-v2
This page will help to coordinate the various reviews, specs, and work items that are a continuing facet of this work.
The API service layer¶
When contributing to the version 2 API, it will be necessary to add code
that modifies the data and behavior of HTTP calls as they are sent to
and from the processing engine and data abstraction layers. Most
frequently in the sahara codebase, these interactions are handled in the
modules of the sahara.service.api
package. This package contains
code for all versions of the API and follows a namespace mapping that is
similar to the routing functions of sahara.api
Although these modules are not the definitive end of all answers to API related code questions, they are a solid starting point when examining the extent of new work. Furthermore, they serve as a central point to begin API debugging efforts when the need arises.