InGrid Editor Schnittstelle
InGrid: Indexieren, Recherchieren, Visualisieren, Teilen
InGrid: Indexieren, Recherchieren, Visualisieren, Teilen
Dieser Abschnitt beschreibt optionale API Endpunkte von dem InGrid Editor und die Authentifizierung der Schnittstelle.
Unterstützte Schnittstellen:
Um die Schnittstelle einzurichten, muss bei der Installation die Umgebungsvariable SWAGGER_SERVERS
gesetzt werden.
SWAGGER_SERVERS=<url1>::<description1>,<url2>::<description2>
SWAGGER_SERVERS=https://swagger-server.de::Beschreibung
Mit dem Profil csw-t
kann der IGE-NG um eine schreibende CSW-t Schnittstelle (POST Methode) für INSERT, UPDATE & DELETE erweitert werden.
Mit dem Profil ogc-api
kann der IGE-NG um eine schreibende OGC konforme Schnittstelle erweitert werden.
Eine ausführliche Dokumentation der Endpunkte ist über das Swagger-UI zu erreichen. Es dient als Hilfestellung für Testanfragen und gibt detailierte Auskunft über Anfrage-Parameter und Pfad-Struktur.
https://ige-ng.informationgrid.eu/swagger-ui/index.html
Um einen API-Endpunkt über die Swagger-Benutzeroberfläche zu testen, müssen Sie den zuständigen Server auswählen (Dropdown-Menü “Server”) und ein gültiges Bearer-Token eingeben (Schaltfläche “Authorise”).
Method | Type | Description |
---|---|---|
POST | CSW-t | INSERT, UPDATE & DELETE transaction Endpoint: /api/cswt Example: ../api/cswt?SERVICE=CSW&REQUEST=Transaction&catalog=CATALOG_ID |
Method | Type | Description |
---|---|---|
GET | Landing Page | Get general information about OGC API Records Endpoint: /api/ogc |
GET | Conformance | Get conformance class of OGC API Records Endpoint: /api/ogc/conformance |
GET | Collections | Get multiple collections Endpoint: /api/ogc/collections |
GET | Collection | Get collection by collection-ID Endpoint: /api/ogc/collections/{collectionId} |
GET | Records | Get multiple records of a collection Endpoint: /api/ogc/collections/{collectionId}/items |
GET | Record | Get record by record-ID Endpoint: /api/ogc/collections/{collectionId}/items/{recordId} |
POST | Records | Insert multiple records into a collection Endpoint: /api/ogc/collections/{collectionId}/items |
PUT | Record | Replace/update an existing resource in a collection with a replacement resource with the same resource identifier. Endpoint: /api/ogc/collections/{collectionId}/items/{recordId} |
DELETE | Record | Delete a record by record-ID Endpoint: /api/ogc/collections/{collectionId}/items/{recordId} |
NOTE: Collection verweist auf einen Katalog. Record verweist auf ein Dokument (dataset, address).
Dieser Abschnitt beschreibt die Endpunkte, um Dateien von einem Datensatz zu verwalten. Dabei sind die Endpunkte ausschließlich für die Verwaltung von Dateien zuständig. Der Datensatz muss vor dem Hochladen einer Datei um die Metainformation der Datei ergänzt werden. Dies geschieht separat über die OGC Records API. Ist eine Datei nicht in einem Datensatz vermerkt (oder mehr als einmal vermerkt), wird die Upload-Transaktion abgebrochen.
Ob eine Datei in einem Datensatz vermerkt ist, wird profilspezifisch geprüft.
Folgenden Katalog-Profile werden unterstützt: uvp
, bmi
& ingrid
Mit dem Spring Profile ogc-distributions-api
kann die OGC Erweiterung freigeschaltet werden.
NOTE: Nur veröffentliche Datensätze ohne Bearbeitungsversion können um Dateien ergänzt werden.
Method | Type | Description |
---|---|---|
POST | Distributions | Upload von Dateien (only file upload; no document updates) Endpoint: /api/ogc/collections/{collectionId}/items/{recordId}/distributions |
DELETE | Distributions | Löschen einer Datei (only file deletion; no document updates) Endpoint: /api/ogc/collections/{collectionId}/items/{recordId}/distributions?uri={fileUri} |
Hinweis zu DELETE Distributions: Wenn die Metadaten bzgl. einer Distribution (Daten/Datei) aus einem Datensatz entfernt werden, werden im Anschluss alle Dateien gelöscht, die nicht mehr Teil des Datensatzes sind. Ein explizites Löschen über die OGC Resource API ist dann nicht mehr nötig. Das Löschen von Daten/Dateien ist aber dennoch über die API möglich, zum Beispiel wenn eine Datei gelöscht werden soll, um sie durch eine neue Version zu ersetzen. Dabei wird der Metadatensatz nicht verändert.
Hinweis zum Download von Dateien:
Über das URL-Pattern /documents/{collectionId}/{recordId}/{fileUri}
stehen Dateien zum Download zur Verfügung.
Alle APIs sind mit OAuth 2.0 über Keycloak gesichert. Um mit Endpunkten zu interagieren, muss zunächst ein Bearer-Token erstellt werden und in der Anfrage mit übergeben werden.
Überblick über die erforderlichen Variablen und Berechtigungsnachweise:
Variable | Description |
---|---|
$KEYCLOAK_HOST | Keycloak Host e.g. https://keycloak.informationgrid.eu |
$REALM | Legen Sie den Keycloak-Realm fest, der eine Reihe von Benutzern, Anmeldeinformationen, Rollen und Gruppen verwaltet (e.g. “InGrid”). |
$CLIENTID | Keycloak client ID (e.g. “ige-ng-frontend”) |
$USERNAME | Benutzername (InGird Editor Login) |
$PASSWORD | Passwort (InGrid Editor Login) |
Grant type | Type: Password Credential |
Access Token URL | KEYCLOAK_HOST /realms/$REALM /protocol/openid-connect/token |
Refresh Token URL | KEYCLOAK_HOST /realms/$REALM /protocol/openid-connect/token |
NOTE: Zugangstokens sind 1 Minute lang gültig. Nach Ablauf der Gültigkeitsdauer muss das Token mit einem Refresh-Token aufgefrischt werden.
In diesem Abschnitt wird beschrieben, wie Sie Zugangstoken und Refresh-Token via cURL erhalten können.
Ersetzen Sie folgende Variable und führen Sie cURL aus: $KEYCLOAK_HOST
, $REALM
, $USERNAME
, $PASSWORD
, $CLIENTID
curl -X POST
$KEYCLOAK_HOST/realms/$REALM/protocol/openid-connect/token
-H 'Content-Type: application/x-www-form-urlencoded'
-d username=$USERNAME
-d password=$PASSWORD
-d grant_type=password
-d client_id=$CLIENTID
Die Antwort ist ein JSON-Objekt, das unter anderem Access-Token und Refresh-Token enthält. Beispiel einer Antwort:
{
"access_token": "eyJhbGciOiJSUzI1NiIsInZGMZvcm1hdGlvbmdyaWQuZXUvcmVhbG1zL3JpZCIs...",
"expires_in": 60,
"refresh_expires_in": 1800,
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6I...",
"token_type": "Bearer",
"not-before-policy": 1632732926,
"session_state": "1afef5ee-272c-4c4a-a181-3da38b432bac",
"scope": "email profile"
}
Das access_token
ist für 60 Sekunden gültig und kann mit dem refresh_token
aktualisiert werden. Beispiel:
curl -X POST
$KEYCLOAK_HOST/realms/$REALM/protocol/openid-connect/token
-H 'Content-Type: application/x-www-form-urlencoded'
-d grant_type=refresh_token
-d client_id=$CLIENTID
-d refresh_token=$REFRESH_TOKEN_FROM_PREVIOUS_CURL
Die Antword ist ein JSON-Object mit einem neuen access_token
:
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia...",
"expires_in": 60,
"refresh_expires_in": 1800,
"refresh_token": "eyJhbGciOiJIUzUxMiIsInR5cCIgOiAiSldUIiwi...",
"token_type": "Bearer",
"not-before-policy": 1632732926,
"session_state": "c9c4c5e3-7f94-41f4-8a2c-c8e4c6d66a73",
"scope": "email profile"
}
Sobald Sie einen gültigen access_token
erhalten haben (siehe “Authentifizierung”), können Sie die Schnittstellen aufrufen. Dazu müssen Sie den access_token
als Bearer-Token in den Header beifügen.
Beispiel für eine cURL-Anfrage für die OGC-Landing Page:
curl --location 'https://ige-ng.informationgrid.eu/api/ogc'
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInZGMZvcm1hdGlvbmdyaWQuZXUvcmVhbG1zL3JpZCIs...'
Beispiel für eine OGC API Antwort:
{
"title": "OGC API Records",
"description": "Access to InGrid via OGC API for Records."
}
Mit der CSW-t Schnittstelle können mehrere Dokument-Anfragen transaktional verarbeitet werden. Darunter zählen Insert, Update und Delete Anfragen. Im Folgenden sehen Sie ein Beispiel für eine cURL POST Request:
curl --location 'https://ige-ng.informationgrid.eu/api/cswt?SERVICE=CSW&REQUEST=Transaction&catalog=my-ingrid'
--header 'Content-Type: application/xml'
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInZGMZvcm1hdGlvbmdyaWQuZXUvcmVhbG1zL3JpZCIs...'
--data-raw '<?xml version="1.0" encoding="UTF-8"?>
<csw:Transaction service="CSW" version="2.0.2"
xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-publication.xsd">
<csw:Insert>
<!-- ein vollständiges Dokument im Format ISO 19139 (2007)-->
</csw:Insert>
<csw:Update>
<!-- ein vollständiges Dokument im Format ISO 19139 (2007) -->
<csw:Constraint version="2.0.0">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>apiso:identifier</ogc:PropertyName>
<ogc:Literal>18c19e21-6931-4c8c-931e-79beefbfa7b2</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</csw:Constraint>
</csw:Update>
<csw:Delete>
<csw:Constraint version="2.0.0">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>apsio:identifier</ogc:PropertyName>
<ogc:Literal>E6D08246-2B08-4551-8B99-8F75CCBBAD45</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</csw:Constraint>
</csw:Delete>
</csw:Transaction>'
In dem Tag <csw:Transaction>
können mehrere Dokument-Anfragen gesammelt werden.
<csw:Insert>
, um es als neues Dokument hinzuzufügen.<csw:Update>
, um ein bestehendes Dokument zu aktualisieren.<csw:Delete>
, um ein bestehendes Dokument zu löschen.Mehr Informationen bzgl. ISO 19139 (2007) konformen Transaktionen und deren Struktur finden Sie unter dem Kapitel “CSW Schnittstelle”.