Getting started with Weka REST API
The Weka system supports a RESTful API. This is useful when automating the interaction with the Weka system and when integrating it into your workflows or monitoring systems.
The API is accessible at port 14000, via the /api/v2
URL, you can explore it via /api/v2/docs
when accessing from the cluster (e.g. https://weka01:14000/api/v2/docs
).
Our static API documentation can be accessed from api.docs.weka.io (the version can be selected from the drop-down list). The .json
file can also be used to create your client code, using an OpenAPI client generator.
Obtaining an access token
You must provide an access token to use the Weka REST API.
To obtain access/refresh tokens via the CLI, refer to Obtaining an authentication token (there you can also generate an access token with a longer expiry time). To obtain access/refresh tokens via the API, you can call the login API, providing it a username and password.
If you already obtained a refresh token, you can use the login/refresh API to refresh the access token.
import requests url = "https://weka01:14000/api/v2/login" payload="{\n \"username\": \"admin\",\n \"password\": \"admin\"\n}" headers = { 'Content-Type': 'application/json' } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
In response, you will get an access token (valid for 5 minutes), that can be used in the other APIs that require token authentication, along with the refresh token (valid for 1 year), for getting additional access tokens without using the username/password.
{ "access_token": "ACCESS-TOKEN", "token_type": "Bearer", "expires_in": 300, "refresh_token": "REFRESH-TOKEN" } ] }
Calling the REST API
Now, that you have obtained an access token, you can call Weka REST API commands with it. For example, you can query the cluster status:
import requests url = "https://weka01:14000/api/v2/cluster" payload={} headers = { 'Authorization': 'Bearer REPLACE-WITH-ACCESS-TOKEN' } response = requests.request("GET", url, headers=headers, data=payload) print(response.text)