...
U kunt informatie over de API opvragen zonder in te loggen. In onderstaand voorbeeld wordt eerst het gebruik van de module ‘requests' (zie ook deze documentatie) gedefiieerd, zodat de HyDAMO validatie-API in Python gebruikt kan worden. Ook wordt worden het gebruik van de module ‘os' osen 'time’ gedefinieerd, zodat verderop in deze voorbeelden, eenvoudig bestanden en paden kunnen worden samenvoegd (met het commando os.path.join) en een tijdindicator kan worden gebruikt. Vervolgens wordt de URL van de server met de HyDAMO validatie-API opgegeven. Omdat de validatie webservice gebruikt maakt van een secure (https) verbinding moet bij elk request ook een certificaat meegegeven worden. Download onderstaand pem bestand en voeg dit toe aan (ieder) request (met de extra parameter verify=hydamo_cert
).
...
Code Block | ||
---|---|---|
| ||
import requests import os import time server = "https://validatie-api.hydamo.nl" hydamo_cert = r"...\HyDAMOValidatietool.pem" #https://validatie-api.hydamo.nl/ response = requests.get(f"{server}/", verify=hydamo_cert) if response.status_code == 200: print(response.text) |
...
Code Block | ||
---|---|---|
| ||
#http://validatie-api.hydamo.nl/task/[task_id]/execute/csv,geopackage,geojson format = "csv,geopackage,geojson" response_execute_task = requests.post(f"{server}/task/{task_id}/execute/{format}", headers=my_headers, verify=hydamo_cert) if response_execute_task.status_code == 202: print("Taak wordt gestart!") #controleer de status van de validatie-taak (periodiek) response_get_task = requests.get(f"{server}/task/{task_id}", headers=my_headers, verify=hydamo_cert) if response_get_task.status_code == 200: status = str(response_get_task.json()["status"]) while not status == "finished" or status == "error": response_get_task = requests.get(f"{server}/task/{task_id}", headers=my_headers, verify=hydamo_cert) if response_get_task.status_code == 200: status = str(response_get_task.json()["status"]) print(f"status taak: {status}") time.sleep(560) |
Het resultaat is:
Taak wordt gestart!
status taak: pending
status taak: validating
…
status taak: validating
status taak: finished
Let op: validatie-taken van grote datasets kunnen enige aanzienlijke tijd in beslag nemen. Wanneer deze de validatie tijd meer dan 30 minuten wordt, wordt geadviseerd om opnieuw te authentiseren op de validatie-API, om te voorkomen dat de token verloopt.
Download metadata van de validatie-taak
...
Als een validatie-taak gereed is , download metadata beeindigd (al dan niet succesvol), kan de metadata van de validatie-taak gedownload worden ter controle van het validatie resultaat.
Definieer een map waar de resultaat bestanden opgeslagen moeten worden.
...
language | py |
---|
...
Allereerst wordt een lokale folder op een computersysteem gedefinieerd waar naartoe een bestand met metadata kan worden gedownload. Met een POST request naar de API op het endpoint task/result/metadata wordt een bestand met metadata van de validatie-taak opgevraagd. Naast de id van de validatie-taak (in de URL) worden ook de Bearer token (opgeslagen in my_headers) en het (https) beveiligingscertificaat (verify=hydamo_cert) meegegeven in het request. Als de HTML statuscode van de response gelijk is aan 200 (het post request geeft een succesvol resultaat), kan het bestand met de metadata worden opgeslagen in de lokale folder. Hiertoe wordt het resultaat van het request eerst opgeslaten in de variabele ‘result_data'. Vervolgens wordt gecontroleerd of de map waar het bestand opgeslagen moet worden bestaat en zo niet, dan wordt deze aangemaakt. Tot slot wordt het resultaat van het request opgeslagen in het bestand 'taak-id_metadata.json’.
Code Block | ||
---|---|---|
| ||
result_folder = r"...\Resultaten"
#http://validatie-api.hydamo.nl/task/[task_id]/result/metadata
response_get_metadata = requests.get(server + '/task/' + str(task_id) + '/result/metadata', headers=my_headers, verify=hydamo_cert)
if response_get_metadata.status_code == 200:
result_data = bytes(response_get_metadata.content) |
Het resultaat is:
TODO
Download resulaten van de validatie-taak in CSV
Tekst TODO
Als een taak gereed is, download het resultaat als CSV per objectlaag (bijv stuw).
Code Block | ||
---|---|---|
| ||
#http://validatie-api.hydamo.nl/task/[task_id]/result/[objectlaag].csv
response_get_results_csv = requests.get(server + '/task/' + str(task_id) + '/result/stuw.csv', headers=my_headers, verify=hydamo_cert)
if response_get_results_csv.status_code == 200:
result_data = bytes(response_get_results_csv.content)
if not os.path.exists(result_folder):
os.makedirs(result_folder)
open(os.path.join(result_folder,"stuw.csv"), 'wb').write(response_get_results_csv.content) |
Het resultaat is:
TODO
Een validatie-taak annuleren
Tekst TODO
if not os.path.exists(result_folder):
os.makedirs(result_folder)
open(os.path.join(result_folder,f"{task_id}_metadata.json"), 'wb').write(response_get_metadata.content) |
Het resultaat is een json bestand met de volgende inhoud (zie ook Resultaten):
{
"api_version": "1.0.0",
"user_name": "thonus",
"task_started": "2022-02-11 13:18:07",
"task_finished": "2022-02-11 13:26:14",
"success": true,
"module_version": "1.0.0",
"date_check": "2022-02-11T13:18:07.817032",
"duration": 487.0597188472748,
"status": "finished",
"dataset_layers": [
"duikersifonhevel",
"hydroobject",
"regelmiddel"
],
"result_layers": ["duikersifonhevel", "hydroobject", "regelmiddel"],
"missing_layers": ["admingrenswaterschap","afsluitmiddel","afvoergebiedaanvoergebied","aquaduct","beheergrenswaterschap","bodemval","brug",…,"sturing","stuw","vispassage","vispassagevlak","vuilvang","zandvang"
],
"error_layers": [],
"syntax_result": ["duikersifonhevel","hydroobject","regelmiddel"],
"validation_result": ["duikersifonhevel","regelmiddel","hydroobject"]
}
Download resultaten van de validatie-taak in CSV formaat
Als er geen fouten voorkomen in de metadata van een afgeronde validatie-taak kunnen de resultaten gedownload worden. In deze stap wordt het validatie-resultaat in een CSV bestand gedownload. N.B. dit is alleen mogelijk als bij het uitvoeren van de validatie-taak ook het format CSV is meegegeven! Een CSV bestand met validatie-resultaten kan gedownload worden door een GET request naar de API op het endpoint task/result te maken. Naast de id van de validatie-taak (in de URL) moet ook de naam van de objectlaag gevolgd door ‘.csv' meegegeven worden in de URL. Daarnaast zijn ook de Bearer token (opgeslagen in my_headers) en het (https) beveiligingscertificaat (verify=hydamo_cert) meegegeven in het request. Als de HTML statuscode van de response gelijk is aan 200 (het post request geeft een succesvol resultaat), kan het CSV bestand met validatie-resultaten worden opgeslagen in de lokale folder. In dit voorbeeld hebben de resultaten van object 'duikersifonhevel’ beschouwd. N.B. voor elke objectlaag moeten een apart CSV bestand gedownload worden!
Code Block | ||
---|---|---|
| ||
#http://validatie-api.hydamo.nl/task/[task_id]/result/[objectlaag].csv
response_get_results_csv = requests.get(server + '/task/' + str(task_id) + '/result/duikersifonhevel.csv', headers=my_headers, verify=hydamo_cert)
if response_get_results_csv.status_code == 200:
result_data = bytes(response_get_results_csv.content)
if not os.path.exists(result_folder):
os.makedirs(result_folder)
open(os.path.join(result_folder,"duikersifonhevel.csv"), 'wb').write(response_get_results_csv.content) |
Het resultaat is een CSV bestand met resultaten van de validatie van de duikersifonhevels in de dataset (zie ook Resultaten).
Download resultaten van de validatie-taak in geopackage formaat
Op vergelijkbare manier als in de beschrijving voor het downloaden van een resultaat in CSV formaat, kunnen de resultaten ook in een geopackage gedownload worden, zodat deze te gebruiken zijn in een GIS programma. N.B. dit is alleen mogelijk als bij het uitvoeren van de validatie-taak ook het format geopackage is meegegeven! Een geopackage bestand met validatie-resultaten kan gedownload worden door een GET request naar de API op het endpoint task/result te maken. Naast de id van de validatie-taak (in de URL) moet ook het fomat ‘geopackage' meegegeven worden in de URL. Daarnaast zijn ook de Bearer token (opgeslagen in my_headers) en het (https) beveiligingscertificaat (verify=hydamo_cert) meegegeven in het request. Als de HTML statuscode van de response gelijk is aan 200 (het post request geeft een succesvol resultaat), kan het geopackage bestand met validatie-resultaten worden opgeslagen in de lokale folder. In tegenstelling tot het downloaden CSV bestand met validatie-resultaten per objectlaag, kunnen in een geopackage meerdere objectenlagen opgeslagen worden. Er hoeft in dus maar 1 geopackage bestand gedownload te worden.
Code Block | ||
---|---|---|
| ||
#http://validatie-api.hydamo.nl/task/[task_id]/result/geopackage
response_get_results_geopackage = requests.get(server + '/task/' + str(task_id) + '/result/geopackage', headers=my_headers, verify=hydamo_cert)
if response_get_results_geopackage.status_code == 200:
result_data = bytes(response_get_results_geopackage.content)
if not os.path.exists(result_folder):
os.makedirs(result_folder)
open(os.path.join(result_folder,"validationresults.gpkg"), 'wb').write(response_get_results_geopackage.content) |
Het resultaat is een geopacke bestand met resultaten van de validatie voor alle objectlagen in de dataset (zie ook Resultaten).
Een validatie-taak annuleren
Het kan voorkomen dat een validatie-taak wordt gestart die veel doorlooptijd vraagt, maar waarvan op een gegeven moment wordt geconcludeerd dat er iets niet klopt. Een validatie-taak die gestart is kan door een gebruiker geannuleerd worden door een POST request naar de API op het endpoint task/kill te sturen. Naast de id van de validatie-taak (in de URL) worden ook de Bearer token (opgeslagen in my_headers) en het (https) beveiligingscertificaat (verify=hydamo_cert) meegegeven in het request. Als de HTML statuscode van de response gelijk is aan 202 (het post request geeft aan dat de actie is geaccepteerd), wordt de taak geannuleerd.
Code Block | ||
---|---|---|
| ||
#http://validatie-api.hydamo.nl/task/[task_id]/kill
response_kill_task = requests.post(server + '/task/' + str(task_id) + '/kill', headers=my_headers, verify=hydamo_cert)
if response_kill_task.status_code == 202:
print('De taak is geannuleerd!') |
Het resultaat is dat de taak is geannuleerd. Dit kan eventueel met gecontroleerd worden door de status van de taak op te vragen.
Een validatie-taak verwijderen
Elke validatie-taak kan weer verwijderd worden uit de lijst met validatie-taken. Alleen validatie-taken die gestart zijn, m.a.w. waarvan de validatie wordt uitgevoerd kunnen niet verwijderd worden. Deze validatie-taken zullen eerst geannuleerd moeten worden (zie voorgaande paragraaf). Een taak kan verwijderd worden door een DELETE request naar de API op het endpoint task te sturen. Naast de id van de validatie-taak (in de URL) worden ook de Bearer token (opgeslagen in my_headers) en het (https) beveiligingscertificaat (verify=hydamo_cert) meegegeven in het request. Als de HTML statuscode van de response gelijk is aan 200 (het delete request geeft een succesvol resultaat), is de taak verwijderd. Bij het verwijderen van de taak worden ook alle toegevoegde dataset bestanden en bestanden met validatieregels verwijderd. N.B. na 10 dagen worden validatie-taken die gevalideerd zijn door het systeem verwijderd.
Code Block | ||
---|---|---|
| ||
#http://validatie-api.hydamo.nl/task/[task_id]/kill] response_getdelete_results_csvtask = requests.getdelete(server + '/task/' + str(task_id) + '/kill', headers=my_headers, verify=hydamo_cert) if response_getdelete_results_csvtask.status_code == 201200: print('Taak is geannuleerdverwijderd!') |
Het resultaat is :TODOdat de validatie-taak uit de takenlijst is verwijderd.
Bovenstaande voorbeelden zijn opgenomen in een Jupyter notebook. Dit notebook kunt u hier downloaden. Let op: u moet wel de paden en login gegevens zelf aanpassen, anders werkt het notebook niet.