De API kan gebruikt worden in combinatie met een script omgeving. Hier Op deze pagina zijn een aantal voorbeelden opgenomen die zijn gemaakt met een Python (Jupyter lab) omgevingnotebook. In het voorbeeld de voorbeelden worden alle stappen van de API toegelicht. Basiskennis Enige basiskennis van het gebruik van Python is verondersteld bij het beschouwen van onderstaande voorbeelden.
Table of Contents |
---|
Informatie van de API opvragen
U kunt informatie van over de API opvragen zonder in te loggen. In onderstaand voorbeeld definieren we wordt eerst het gebruik van de module ‘requests' (zie ook deze documentatie) gedefiieerd, zodat we de HyDAMO validatie-API in Python kunnen gebruikengebruikt kan worden. Ook definieren we wordt het gebruik van de module 'os' zodat we later gedefinieerd, zodat verderop in deze voorbeelden, eenvoudig bestanden en paden kunnen samenvoegen worden samenvoegd (met het commando os.path.join). Vervolgens geven we wordt de URL van de server met de HyDAMO validatie-API opopgegeven. Omdat de validatie webservice gebruikt maakt van een secure (HTTPS) beveiligingscertificaat moeten we deze ook meegeven in elke requesthttps) 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
).
Download hier het pem bestand voor de validatie webservice:
View file | ||
---|---|---|
|
Daarna voeren we wordt het GET request uit uitgevoerd voor het verkrijgen van de informatie en slaan we over de validatie-API en wordt het resultaat op opgeslagen in de variabele 'response’. Als de HTML statuscode van de response gelijk is aan 200 (de validatie-API geeft succesvol een resultaat van onze de request), dan schrijven we wordt het resultaat van de response weggeschreven naar het scherm met een print commandp. In Python code ziet dat er als volgt uit:
...
Het resultaat is:
{"version":"1.0.9.10","validation_module":"1.0.9.30","title":"HyDAMO Validationtool","description": "HyDAMO Validationtool","contact":"helpdesk-hydamo-validatietool@hkv.nl"}
Inloggen en authentiseren
Om gebruik te kunnen maken van de HyDAMO Validatiemodule en de validatie-API moet u een gebruiker geauthentiseerd worden. Hiertoe kunt u Authenticatie in de validatie-API vindt plaats aan de hand van een gebruikersnaam en wachtwoord opvragen (zie Gebruikersregistratie). Heeft u de beschikking over en gebruikersnaam en wachtwoord, dan kunt u zich authentiseren met de API. De . Voor een beschrijving van het opvragen van een gebruikersnaam en wachtwoord wordt verwezen naar Gebruikersregistratie. De validatie-API maakt gebruik van OAuth Firebase Authentication. Dit betekent dat u zich authentiseert authenticatie plaatsvindt bij een server van Google. Daartoe maakt u gebruik van , middels een standaard API van Google. Om bij Google kenbaar te maken dat u zich wilt authentiseren authenticatie voor de HyDAMO Validatietool , gebruikt u wordt gevraagd, moet gebruik gemaakt worden van een specifieke (Firebase) key (AIzaSyAU17otJko594SYoCulCPfXwkHOXQEieXE) . Vervolgens stelt u die aan de validatie-API is gekoppeld. In onderstaand voorbeeld wordt vervolgens een Python dictionary samen gedefinieerd met uw een gebruikersnaam (label dit als ‘email’) en uw een wachtwoord (label dit als 'password'). Daarna maakt u wordt een POST request naar de Google API gedefinieerd, waarbij u de key en de dictionary met uw de login cedentials meestuurtmeegestuurd wordt. Als de HTML statuscode van de response gelijk is aan 200 (de Google API geeft succesvol een resultaat), dan bevat de response een zogenaamde id_token. Deze wordt tot slot omgezet in een Bearer token (een gecodeerde token) die daarna als header meegeven kan worden aan toekomstige requests aan de HyDAMO validatie-API en waarmee u wordt geauthentiseerd. In Python . De header wordt naar het scherm geprint. Let op dat de houdbaarheid van van de token maximaal een uur is. Daarna moet er opnieuw een token aangevraagd worden via de procdure zoals hier weergegeven. In Python ziet de code er als volgt uit (gebruikersnaam en wachtwoord zijn fictief in het voorbeeld):
...
Een nieuwe validatie-taak aanmaken
U kunt via Met de de HyDAMO validatie-API en kan een nieuwe validatie-taak aanmakenaangemaakt worden. Hiertoe moet u beschikken over een uniek unieke Bearer token , zodat u geauthentiseerd kunt beschikbaar zijn (zie vorige paragraaf), waarmee geauthentiseerd kan worden. Voor elke een nieuwe validatie-taak moet u eerst een willekeurige naam definierengedefinieerd worden. Met een POST request naar de API op het endpoint van tasks kunt u kan vervolgens een nieuwe validatie-taak aanmaken. U geeft hierbij aangemaakt worden. In dat request wordt de naam van de taak mee, de Bearer token (opgeslagen in my_headers) en het (HTTPShttps) beveiligingscertificaat beveiligings-certificaat (verify=hydamo_cert) meegegeven. Als de HTML statuscode van de response gelijk is aan 201 (het post request geeft aan dat de aanpassing succesvol is doorgevoerd), kunnen verschillende gegevens (data) van de validatie-taak uit de response uitgelezen worden , waaronderen afgedrukt worden naar het scherm:
de unieke id die de online (reken)omgeving heeft toegewezen aan uw automatisch toegewezen) van een validatie-taak
de naam die uw zelf heeft meegegeven aan de een nieuwe validatie-taak is meegegeven
de status van de een nieuwe validatie-taak (altijd gelijk aan 'new')
het aantal dataset bestanden dat is toegevoegd aan de een validatie-taak
en of de validatie-taak validatieregels bevat.
Code Block | ||
---|---|---|
| ||
task_name = "Voorbeeld_Wiki" #https://validatie-api.hydamo.nl/tasks/Voorbeeld_Wiki response_new_task= requests.post(f"{server}/tasks/{task_name}", headers=my_headers, verify=hydamo_cert) if response_new_task.status_code == 201: data = response_new_task.json() print("id: " + str(data["id"])) print("naam: " + str(data["name"])) print("status: " + str(data["status"])) print("aantal dataset bestanden: " + str(data["numberOfDatasets"])) print("validatieregels aanwezig: " + str(data["validationRules"])) |
Het resultaat is:
id: 1495 999 (dit id is een voorbeeld)
naam: Voorbeeld_Wiki
status: new
aantal dataset bestanden: 0
validatieregels aanwezig: False
...
Als er een validatie-taak beschikbaar is, kunt u kunnen 1 of meerdere dataset bestanden toevoegen toegevoegd worden aan deze validatie-taak. Hiertoe moet eerst een verwijzing naar 1 of meerdere deze databestanden gemaakt worden. Een databestand kan 1 of meerdere objectlagen bevatten of een databestand bevat 1 enkele objectlaag. In het laatste geval kunt u ook meerdere databestanden (tegelijk) toevoegen (stuwen, gemalen, hydro-objecten, etc.) bevatten. Het is mogelijk om meerdere databestanden met elk 1 objectlaag toe te voegen aan een validatie-taak. De dataset bestanden:
moeten voldoen aan het DAMO 2.2. datamodel. Zie voor meer informatie DAMO 2.2 Objectenboek.
de data is van het (open data) formaat Geopackage (extensie *.gpkg). Zie voor meer informatie Geopackage.
In het dit voorbeeld zijn worden meerdere databestanden (met duikersifonhevels, hydro-objecten en regelmiddelen) in toegevoegd aan een bestaande validatie-taak. Hiertoe is eerst een array (tabel) datasets opgenomen. De dataset bestanden zelf gedefinieerd met de namen van de dataset bestanden (geopackages). Deze dataset bestanden staan in een lokale folder op het een computersysteem waar naar verwezen kan worden (file_path). Om de datasets te kunnen toevoegen aan de een validatie-taak, is de taak-id nodig van de, in de vorige stap nieuw aangemaakte taak. Deze van een bestaande validatie-taak nodig. Deze id kan uit de response van de het API callrequest, waamee de een nieuwe taak is aangemaakt (zie voorgaande paragraaf), gehaald worden (attribuut: id). In Vervolgens worden in een lus kunt u de verschillende databestanden 1 voor 1 toe voegentoegevoegd aan de validatie-taak. Voor elke dataset maakt u wordt eerst een dictionary params aan aangemaakt. Hierin wordt de naam van het databestand opgeslagen (aan het label ‘file’). Daarna maakt u ook wordt een dictionary files aanaangemaakt. Hierin wordt het databestand zelf opgeslagen (via een commando ‘open' en het attribuut 'rb’; de dataset wordt als een binair bestand opgeslagen). Met een POST request naar de validatie-API op het endpoint van task/datasets kunt u een databestand toevoegen aan de wordt vervolgens het databestand toegevoegd aan een bestaande validatie-taak. U geeft hierbij In het request wordt de id van de validatie-taak mee meegegeven (in de URL) en samen met de dictionaries files en params, de Bearer token (opgeslagen in my_headers) en het (HTTPShttps) beveiligingscertificaat (verify=hydamo_cert). Als de HTML statuscode van de response gelijk is aan 201 (het post request geeft aan dat de aanpassing succesvol is doorgevoerd), kunnen verschillende gegevens (data) van de validatie-taak uit de response uitgelezen worden, waaronder:
de unieke id van uw een validatie-taak
en het aantal dataset bestanden dat is toegevoegd aan de een validatie-taak.
De lus eindigt na het wegschrijven van de resultaten (id en het aantal dataset bestanden toegevoegd aan uw taak) naar het scherm.
Code Block | ||
---|---|---|
| ||
file_path = r"...\ValidatietoolHyDAMO\Wiki\Datasetbestanden" datasets = ["DuikerSifonHevel.gpkg", "HydroObject.gpkg", "Regelmiddel.gpkg"] task_id = response_new_task.json()["id"] for dataset in datasets: params = {"file": dataset} files = {"file": open(os.path.join(file_path,dataset), "rb")} #https://validatie-api.hydamo.nl/task/[task_id]/datasets response_upload_datasets = requests.post(f"{server}/task/{task_id}/datasets", files=files, params=params, headers=my_headers, verify=hydamo_cert) if response_upload_datasets.status_code == 201: data = response_upload_datasets.json() print("id: " + str(data["id"])) print("naam dataset: " + dataset) print("aantal dataset bestanden: " + str(data["numberOfDatasets"])) |
Het resultaat is:
id: 1495 999 (dit id is een voorbeeld)
naam dataset: DuikerSifonHevel.gpkg
aantal dataset bestanden: 1
id: 1495 999 (dit id is een voorbeeld)
naam dataset: HydroObject.gpkg
aantal dataset bestanden: 2
id: 1495 999 (dit id is een voorbeeld)
naam dataset: Regelmiddel.gpkg
aantal dataset bestanden: 3
...
Als er een validatie-taak beschikbaar is, kunt u kan er een bestand met validatieregels toevoegen toegevoegd worden aan deze validatie-taak. Meer informatie over de inhoud van het bestand met validatieregels vindt u hier (@@link@@) Basis validatieregels. Een basisset validatieregels kunt u op Github downloaden.
Het bestand met validatieregels staat in een lokale folder op het een computersysteem waar naar verwezen kan worden (file_path). We maken gebruik van een versie van het bestand met alle validatieregels (zie hier voor de laatste versie). Om validatieregels te kunnen toevoegen aan de een bestaande validatie-taak, is de taak-id nodig van de validatie-taak (zie voorgaande stappen). U maakt vervolgens eerst Vervolgens wordt een dictionary params aan. Hierin wordt aangemaakt waarin de naam van het bestand met validatieregels opgeslagen wordt (aan het label ‘file’). Daarna maakt u ook wordt een dictionary files aanaangemaakt. Hierin wordt het bestand met validatieregels zelf opgeslagen (via een commando ‘open' en het attribuut 'rb’; het bestand met validatieregels wordt als een binair bestand opgeslagen). Met een POST request naar de API op het endpoint van task/validationrules kunt u een wordt het bestand met validatieregels toevoegen toegevoegd aan de validatie-taak. U geeft hierbij Naast de id van de validatie-taak mee (in de URL) en worden ook de dictionaries files en params, de Bearer token (opgeslagen in my_headers) en het (HTTPShttps) beveiligingscertificaat (verify=hydamo_cert) meegegeven in het request. Als de HTML statuscode van de response gelijk is aan 201 (het post request geeft aan dat de aanpassing succesvol is doorgevoerd), kunnen verschillende gegevens (data) van de validatie-taak uit de response uitgelezen worden, waaronder:
...
Code Block | ||
---|---|---|
| ||
file_path = r"...ValidatietoolHyDAMO\Wiki\Validatieregels"
validationrules = "validationrules_complete.json"
params = {"file": validationrules}
files = {"file": open(os.path.join(file_path,validationrules), "rb")}
#http://validatie-api.hydamo.nl/task/[task_id]/validationrules
response_upload_validationrules = requests.post(f"{server}/task/{task_id}/validationrules", files=files, params=params, headers=my_headers, verify=hydamo_cert)
if response_upload_validationrules.status_code == 201:
data = response_upload_validationrules.json()
print("id: " + str(data["id"]))
print("validatieregels aanwezig: " + str(data["validationRules"])) |
Het resultaat is:
id: 1495 999 (dit id is een voorbeeld)
validatieregels aanwezig: True
...
Voordat een validatie-taak gestart kan worden moet aan een validatie-taak minimaal 1 dataset bestand en een bestand met validatieregels zijn toegevoegdbevatten. U kunt aan de hand van de status van een validatie-taak controleren of een validatie-taak gereed is voor validatie. De status is dan gelijk aan ready_to_validate.
U kunt de De status van een validatie-taak kan op elk moment opvragen opgevraagd worden met een GET request naar de validatie-API op het endpoint van task, waarbij u de validatie-taak id (in de URL), de Bearer token (opgeslagen in my_headers) en het (HTTPShttps) beveiligingscertificaat (verify=hydamo_cert) meegeeftmeegegeven wordt. ls de HTML statuscode van de response gelijk is aan 200 (het post request geeft aan dat de informayie informatie succesvol is opgehaald), kunnen verschillende gegevens (data) van de validatie-taak uit de response uitgelezen worden, waaronder de status van de validatie-taak.
...
status: ready_to_validate
Start een validatie-taak
Tekst TODO
Geef formaat van bestanden die je als resultaat wilt (CSV, geopackage of geojson, of een combinatie van voorgaande)
Na het starten de status controleren!
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 is gestart!') |
Het resultaat is:
TODOAls de status van een validatie-taak gelijk is aan ‘ready_to_validate' kan deze taak gestart worden. De validatie-API geeft dan 'opdracht’ aan de Validatiemodule om de validatie van de (aan de validatie-taak) toegevoegde databestanden met de (aan de validatie-taak) toegevoegde validatieregels uit te voeren.
Alleerst moet het resultaat van een validatie opdracht gedefinieerd. Met het resultaat wordt hier bedoeld in welke bestandstypen het resultaat door de Validatiemodule wordt weggeschreven. Er zijn drie mogelijkheden: een CSV bestand, een Geopackage bestand of een Geojson bestand. Elke willekeurige combinatie van deze bestandstype is toegestaan, dus alleen het CSV bestand of zowel een Geopackage als een Geojson bestand, etc. Hiertoe wordt een (string) variabele format gedefineerd met de gewenste uitvoerformaten (komma gescheiden bij meerdere bestandstypen). Vervolgens wordt een POST request gedaan naar de validatie-API op het endpoint execute, waarbij de validatie-taak id en de variabele ‘format' (beide in de URL), de Bearer token (opgeslagen in my_headers) en het (https) beveiligingscertificaat (verify=hydamo_cert) meegegeven wordt. ls de HTML statuscode van de response gelijk is aan 202 (het post request geeft aan dat de actie is geaccepteerd), dan wordt de validatie-taak gestart. Om dit te controleren kan de status van de validatie-taak gecontroleerd worden (zie voorgaande paragraaf). Allereerst zal deze gelijk zijn aan ‘pending’. De validatie-taak is toegevoegd aan de wachtrij. Zodra er rekencapaciteit beschikbaar is, wordt de taak gestart en wijzigt de status in ‘validating’. Door de status periodiek te controleren (bijvoorbeeld eens per minuut), kan bepaald worden of de validatie-taak klaar is. Een validatie-taak is klaar als de status is aangepast in ‘finished’ (de validatie-taak is succesvol tot een einde gekomen) pf 'error’ (de validatie-taak is met een fout gestopt).
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(status)
time.sleep(5) |
Het resultaat is:
Taak wordt gestart!
Let op: validatie-taken van grote datasets kunnen enige tijd in beslag nemen. Wanneer deze meer dan 30 minuten wordt, wordt geadviseerd om opnieuw te authentiseren, om te voorkomen dat de token verloopt.
Download metadata van de validatie-taak
...