REST API Interface¶
Advanced users may want to query IceProd from automated scripts or other programs. This is possible through a REST API.
See IceProd REST API for available urls.
Authentication¶
To view datasets, call actions on datasets, or submit new datasets, authentication with a token is required.
An authentication token can be obtained using the python package wipac-rest-tools. For example:
python3 -m venv venv
. venv/bin/activate
pip install wipac-rest-tools
curl -o get_token.py https://raw.githubusercontent.com/WIPACrepo/rest-tools/master/examples/get_device_credentials_token.py
python get_device_credentials_token.py iceprod-public
The access token will be valid for 1 hour.
This can be added to requests as the Authorization header. As an example, here is a query to get the list of all datasets:
curl -XGET -H 'Authorization: bearer XXXXXXXX-your-token-here-XXXXX' https://iceprod2-api.icecube.wisc.edu/datasets
Danger
Anyone with the authentication token is basically you. Be careful with the token!
Scripting¶
When writing a python script, you can use our rest client to automatically manage tokens for you. Just install wipac-rest-tools as shown above. There are also sync and async code options:
Sync:
from rest_tools.client import SavedDeviceGrantAuth
api = SavedDeviceGrantAuth(
address='https://api.iceprod.wisc.edu',
token_url='https://keycloak.icecube.wisc.edu/auth/realms/IceCube',
filename='.iceprod-auth',
client_id'iceprod-public'
)
# get a list of datasets
result = api.request_seq('GET', '/datasets', {})
for dataset, metadata in result.items():
# do something with the dataset
Async:
from rest_tools.client import SavedDeviceGrantAuth
api = SavedDeviceGrantAuth(
address='https://api.iceprod.wisc.edu',
token_url='https://keycloak.icecube.wisc.edu/auth/realms/IceCube',
filename='.iceprod-auth',
client_id'iceprod-public'
)
# get a list of datasets
result = await api.request('GET', '/datasets', {})
for dataset, metadata in result.items():
# do something with the dataset