Push-Abonnements für den EODATA-Katalog auf CODE-DE-Lab
Mit Push- und Pull-Abonnements erhalten Sie Benachrichtigungen, wenn Produkte im EODATA-Katalog oder in einer Teilmenge davon hinzugefügt, geändert oder gelöscht werden.
Dieser Artikel behandelt Push-Abonnements, die Benachrichtigungen direkt an einen vom Benutzer verwalteten Endpunkt senden.
Es gibt außerdem Pull-Abonnements. Dabei werden Benachrichtigungen aus dem EODATA-Katalog regelmäßig aus einer eigenen Warteschlange in der Cloud abgerufen. Sie sind in Pull-Abonnements für den EODATA-Katalog auf CODE-DE-Lab beschrieben.
Inhalt dieser Anleitung
Voraussetzungen
Nr. 1 Konto
Sie benötigen ein aktives Konto auf CODE-DE-Lab: https://tenant-manager.code-de.org.
Nr. 2 HTTP-Anfragen senden können
Für diese Anleitung benötigen Sie eine Möglichkeit, GET-, POST-, PATCH- und DELETE-Anfragen einschließlich Headern und gegebenenfalls eines JSON-Anfragetexts zu senden. Außerdem müssen Sie die Antworten auf diese Anfragen lesen können.
Für die Beispiele in diesem Artikel können Sie unter anderem folgende Methoden verwenden:
HTTP-Anfragen über einen Browser senden
Die einfachste Möglichkeit, eine HTTP-Anfrage zu senden, ist das Aufrufen einer Internetadresse im Browser. Die meisten Browser können die Ausgabe einer Website verarbeiten und lesbar darstellen. Siehe Mit Firefox Anfragen an die EODATA-Katalog-API von CODE-DE-Lab senden
HTTP-Anfragen mit curl oder wget senden
Mit den eigenständigen Programmen curl und wget können Sie HTTP-Anfragen über die Befehlszeile senden. Weitere Informationen finden Sie unter Verwenden von curl und wget zum Herunterladen von EO-Daten-Produkten von CODE-DE-Lab
HTTP-Anfragen mit Python-Code senden
Mit einer Programmiersprache wie Python können Sie Code schreiben, der HTTP-Anfragen an den Server sendet. Siehe Mit Python Anfragen an den EODATA-Katalog auf CODE-DE-Lab senden. Auch andere Programmiersprachen sollten HTTP-Anfragen senden können.
Sie sollten bereits Erfahrung mit Python haben, bevor Sie den Python-Code in diesem Artikel ausführen. Python und das Modul requests müssen installiert sein.
Unter Ubuntu 24.04 führen Sie
sudo apt install python3-requests
aus, um das benötigte Modul requests zu installieren. Dabei sollte auch der Python-Interpreter installiert werden, falls er noch nicht vorhanden ist.
Andere Betriebssysteme können ebenfalls funktionieren, erfordern aber möglicherweise Anpassungen.
Nr. 3 Produkte filtern können
Wenn Sie nur über Änderungen an einer Teilmenge der Produkte benachrichtigt werden möchten, verwenden Sie einen passenden Filter.
Die Filter in diesem Artikel sind in Anleitung zur EODATA-Katalog-API auf CODE-DE-Lab beschrieben. Es sind dieselben Filter wie für den OData-Parameter $filter.
Für Filter zu created- und/oder modified-Produkten lesen Sie den Abschnitt zum OData-Endpunkt Products in der Anleitung zur EODATA-Katalog-API.
Für Filter zu deleted-Produkten lesen Sie den Abschnitt zum OData-Endpunkt DeletedProducts in der Anleitung zur EODATA-Katalog-API.
Die Endpunkte Products und DeletedProducts bieten unterschiedliche Optionen. Mit DeletedProducts können Sie beispielsweise nach dem Löschgrund von EODATA-Produkten suchen. Für Products gibt es keine entsprechende Option.
Nr. 4 Erstelltes Keycloak-Token
Zum Nachweis Ihrer Identität bei Push-Abonnements benötigen Sie ein Keycloak-Token. Die Erstellung ist hier beschrieben: Verwenden von curl und wget zum Herunterladen von EO-Daten-Produkten von CODE-DE-Lab
Ein Keycloak-Token ist nur begrenzt gültig. Wenn das aktuelle Token abläuft und Sie die Abonnement-API weiter verwenden möchten, erstellen Sie ein neues Token.
Wenn Sie Python oder Bash verwenden und die Zwei-Faktor-Authentifizierung für Ihr Konto aktiviert ist, können Sie das Keycloak-Token auch automatisch erstellen, ohne einen sechsstelligen TOTP-Code einzugeben. Weitere Informationen:
Nr. 5 Endpunkt zum Empfang von Benachrichtigungen
Sie benötigen eine physische oder virtuelle Maschine als Endpunkt. Sie muss eine öffentliche IP-Adresse und eine zugeordnete Domain haben. Außerdem benötigen Sie einen offenen Port, an den die Benachrichtigungen gesendet werden.
Zum Lesen eingehender Benachrichtigungen benötigen Sie HTTP-Serversoftware mit Unterstützung für Basic Authentication. Der Server muss über HTTPS mit einem Zertifikat einer vertrauenswürdigen Stelle abgesichert sein. Dafür kommen beispielsweise kommerzielle Anbieter oder Let’s Encrypt infrage, das kostenlose Zertifikate bereitstellt.
Sie können einen solchen Server beispielsweise auf einer virtuellen Linux-Maschine in der CODE-DE-Lab-Cloud mit zugeordneter Floating IP einrichten.
Warnung
Das Zertifikat muss öffentlich vertrauenswürdig sein und darf nicht selbstsigniert sein.
Der Port muss aus dem Internet erreichbar sein.
Die Basic-Auth-Anmeldedaten müssen genau übereinstimmen.
Prüfen Sie vor dem Erstellen eines Abonnements, ob Ihr Endpunkt auf eine Testanfrage 200 OK zurückgibt, zum Beispiel
GET https://example.com:8000/
mit derselben HTTPS-URL und denselben Basic-Auth-Anmeldedaten.
Einführung
Was muss eine HTTP-Anfrage enthalten?
Sie können Push-Abonnements durch HTTP-Anfragen erstellen und verwalten.
Verwenden Sie für die in diesem Artikel beschriebenen HTTP-Anfragen immer:
Anfragetyp (GET, POST, PATCH oder DELETE)
Header
URL
Alle drei Bestandteile müssen gemeinsam vorhanden sein. Bestimmte HTTP-Anfragen benötigen außerdem einen Anfragetext.
Header
Die Anfragen in diesem Artikel sollten folgende Header enthalten:
{
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_ACCESS_TOKEN_HERE"
}
Ersetzen Sie YOUR_ACCESS_TOKEN_HERE durch das Keycloak-Token aus Voraussetzung Nr. 4. Dieses Token dient zum Nachweis Ihrer Identität.
Diese Header werden im weiteren Verlauf des Artikels als „obligatorische Header“ bezeichnet.
Für GET-Anfragen ist Content-Type nicht zwingend erforderlich, kann aber ohne Nachteil angegeben werden.
JSON-Daten in Antworten
Einige der in diesem Artikel beschriebenen Anfragen liefern JSON-Daten. Zur besseren Lesbarkeit sind diese im Artikel mehrzeilig formatiert.
Beschreibung der Push-Abonnement-Entität
| Eigenschaftsname | Typ | Beschreibung |
|---|---|---|
| Id | Guid |
Dies ist ein universell eindeutiger Bezeichner (UUID). Die Id ist ein lokaler Bezeichner für eine Abonnementinstanz innerhalb des Katalogs und wird beim Erstellen des Abonnements vergeben.
Beispiel 9249dde5-4838-4a34-8925-bac8c1d53f09c |
| SubscriptionType | Aufzählung der Abonnementtypen |
Typ des erstellten Abonnements:
Der Wert muss in Kleinbuchstaben eingegeben werden. Beispielpush |
| Status | Aufzählung der Abonnementstatus |
Zulässige Statuswerte eines Abonnements sind:
Ein laufendes Abonnement wird nach 60 Tagen Inaktivität automatisch auf paused gesetzt. Nach 365 Tagen seit der letzten Benachrichtigung wird der Status auf cancelled gesetzt und das Abonnement dauerhaft gelöscht. Wenn der Benutzer keinen Wert für Status angibt, wird standardmäßig „running“ verwendet.Beispiel running |
| SubscriptionEvent | Aufzählung der Abonnementereignisse |
Das Abonnementereignis, das überwacht und für das eine Benachrichtigung bereitgestellt wird. Folgende Werte sind möglich:
Für „SubscriptionEvent“ = „created“ werden Benachrichtigungen über neu zum EODATA-Katalog hinzugefügte Produkte gesendet. Für „SubscriptionEvent“ = „modified“ werden Benachrichtigungen über geänderte Produkte im EODATA-Katalog gesendet. Für „SubscriptionEvent“ = „deleted“ werden Benachrichtigungen über aus dem EODATA-Katalog entfernte Produkte gesendet. Dies geschieht bei einem der folgenden Werte des Parameters „DeletionCause“:
Beispiel created |
| FilterParam | String |
Die Filterparameter des Abonnements.
Wenn „SubscriptionEvent“ = „created“ oder „modified“ ist, bezieht sich diese Abfrage auf den Parameter $filter= einer beliebigen Products?-Abfrage. Wenn „SubscriptionEvent“ = „deleted“ ist, bezieht sich diese Abfrage auf den Parameter $filter= einer beliebigen DeletedProducts-Abfrage. Es stehen dieselben Filterparameter wie für den EODATA-Katalog zur Verfügung. Weitere Informationen finden Sie unter Voraussetzung Nr. 3. Beispiel Collection/Name eq 'SENTINEL-1' and Attributes/OData.CSC.StringAttribute/any (att:att/Name eq 'productType' and att/OData.CSC.StringAttribute/Value eq 'IW_SLC__1S') |
| SubmissionDate | DateTimeOffset |
Datum und Uhrzeit des Eingangs des Abonnements im Katalog. Die Zeit wird im ISO-8601-Format (UTC+0) angegeben: YYYY-MM-DDThh:mm:ss.sssZ
Beispiel 2024-01-17T09:13:04.654Z |
| LastNotificationDate | DateTimeOffset |
Datum und Uhrzeit der letzten erfolgreichen Zustellung einer Benachrichtigung an den Endpunkt des Benutzers durch den Abonnementdienst. Die Zeit wird im ISO-8601-Format (UTC+0) angegeben: YYYY-MM-DDThh:mm:ss.sssZ
Beispiel 2024-01-17T09:50:10.654Z |
| StageOrder | Boolean |
Beauftragt automatisch die Bereitstellung von Produkten, die dem Abonnement entsprechen. Wird nur verwendet, wenn SubscriptionEvent den Wert created hat. Derzeit ist das Beauftragen der Produktbereitstellung nicht möglich, da alle Produkte im EODATA-Katalog den Status Online haben und ohne Auftrag sofort zugänglich sind. Beispiel true |
| Priority | Int64 |
Priorität der aus dem Abonnement entstehenden Aufträge. Derzeit automatisch auf 1 gesetzt; der Wert kann nicht geändert werden.
Beispiel 1 |
| NotificationEndpoint | String |
Endpunkt des Benutzers, an den die Benachrichtigungen gesendet werden.
Beispiel https://notification-endpoint.example.com:4000 |
| NotificationEpUsername | String |
Benutzername zur Authentifizierung am Benachrichtigungsendpunkt. Erforderlich, wenn NotificationEndpoint eine Authentifizierung verlangt. Beispiel mylocalusername |
| NotificationEpPassword | String |
Passwort zur Authentifizierung am Benachrichtigungsendpunkt. Erforderlich, wenn NotificationEndpoint eine Authentifizierung verlangt. Beispiel My%Password#789 |
Beschränkungen für Abonnements
Ihr Konto kann höchstens 2 (zwei) Abonnements mit dem Status running gleichzeitig haben. Möglich sind:
zwei Push-Abonnements, wie in diesem Artikel beschrieben, oder
zwei Pull-Abonnements, wie in Pull-Abonnements für den EODATA-Katalog auf CODE-DE-Lab beschrieben, oder
ein Push-Abonnement und ein Pull-Abonnement.
Ein Konto auf CODE-DE-Lab kann insgesamt höchstens 10 Abonnements haben. Dabei werden alle Arten berücksichtigt:
running und paused
Push und Pull
Push-Abonnement erstellen
Bemerkung
Push-Abonnements müssen SubscriptionType mit dem Wert push in Kleinbuchstaben enthalten.
Wenn Sie bereits zwei Abonnements mit dem Status running haben, erstellen Sie das neue zunächst mit dem Status paused. Pausieren Sie dann ein bestehendes Abonnement und setzen Sie das neue auf running.
Ein typischer Anfragetext zum Erstellen eines Push-Abonnements sieht so aus:
{
"SubscriptionType": "push",
"StageOrder": true,
"FilterParam": "Collection/Name eq 'SENTINEL-1' and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'productType' and att/OData.CSC.StringAttribute/Value eq 'IW_SLC__1S')",
"Priority": 1,
"Status": "running",
"SubscriptionEvent": [
"created"
],
"NotificationEndpoint": "https://example.com:8000/",
"NotificationEpUsername": "NotificationEndpointUser",
"NotificationEpPassword": "My@!Passw0rd"
}
Tragen Sie für folgende Schlüssel im JSON-Anfragetext Ihre eigenen Werte ein:
- SubscriptionType
Typ des erstellten Abonnements. Verwenden Sie für Push-Abonnements den Wert push in Kleinbuchstaben.
- SubscriptionEvent
Der Wert dieses Schlüssels ist ein Array mit einer oder mehreren Zeichenfolgen. Damit wählen Sie aus, über welche Ereignistypen Sie benachrichtigt werden möchten. Folgende Werte sind möglich:
created
modified
deleted
Um mehrere Ereignisse zu verfolgen, geben Sie mehrere Werte im Array an, zum Beispiel [„created“, „modified“].
- FilterParam
Ersetzen Sie den Wert von FilterParam durch eine Abfrage, die die gewünschte Teilmenge von Produkten festlegt. Weitere Informationen finden Sie unter Voraussetzung Nr. 3.
Um Informationen zu erhalten
über erstellte und/oder geänderte Produkte, verwenden Sie dieselbe Abfrage wie für den Endpunkt Products.
über gelöschte Produkte, verwenden Sie dieselbe Abfrage wie für den Endpunkt DeletedProducts.
Sie können auch Benachrichtigungen zu ausgewählten Ereignistypen für alle Produkte des Katalogs erhalten, statt nur für eine Teilmenge. Dazu können Sie entweder
den Wert des Schlüssels FilterParam leer lassen oder
diesen Schlüssel vollständig aus der Anfrage weglassen.
- Status
Wenn Sie diesen Schlüssel auf running setzen, empfängt das erstellte Abonnement sofort Benachrichtigungen. Wenn Sie ein pausiertes (inaktives) Abonnement erstellen und später aktivieren möchten, setzen Sie den Wert auf paused.
Wenn Sie diesen Schlüssel nicht in der Anfrage angeben, erhält das erstellte Abonnement den Status running.
Wenn Sie bereits zwei Abonnements mit dem Status running haben und ein weiteres mit diesem Status erstellen möchten, schlägt die Operation fehl. Weitere Informationen finden Sie im obigen Abschnitt Beschränkungen für Abonnements.
Sie können entweder
eines Ihrer bestehenden Abonnements pausieren und anschließend ein neues erstellen oder
ein neues Abonnement mit dem Status paused erstellen.
- NotificationEndpoint
Die URL Ihres Endpunkts einschließlich des Ports, unter dem er erreichbar ist.
- NotificationEpUsername
Der Benutzername zur Authentifizierung an Ihrem Benachrichtigungsendpunkt.
- NotificationEpPassword
Das Passwort zur Authentifizierung an Ihrem Benachrichtigungsendpunkt.
NotificationEpUsername und NotificationEpPassword sollten sicher sein und sich von den Anmeldedaten Ihres Kontos auf CODE-DE-Lab unterscheiden.
Die im obigen Beispiel als FilterParam angegebene Abfrage sollte gültig sein. Sie können damit Push-Benachrichtigungen testen.
ERINNERUNG: Geben Sie die obligatorischen Header an.
Senden Sie diese Anfrage an folgende URL:
https://catalogue.code-de.org/odata/v1/Subscriptions
Der Antwortcode sollte 201 Created sein. Außerdem sollten Sie JSON-Daten mit Informationen über das neue Abonnement erhalten, zum Beispiel:
{
"Id": "0b5aaa72-922f-4b69-ad7f-1ccebc3e824e",
"SubscriptionType": "push",
"FilterParam": "Collection/Name eq 'SENTINEL-1' and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'productType' and att/OData.CSC.StringAttribute/Value eq 'IW_SLC__1S')",
"StageOrder": false,
"Priority": 1,
"Status": "running",
"NotificationEndpoint": "https://example.com:8000/",
"SubscriptionEvent": [
"created"
],
"SubmissionDate": "2025-04-10T10:35:51.299345Z",
"@odata.context": "$metadata#OData.CSC.Subscription"
}
Das Abonnement sollte nun erstellt sein. Senden Sie zur Prüfung eine GET-Anfrage an https://catalogue.code-de.org/odata/v1/Subscriptions/Info und suchen Sie in der Antwort nach der Id Ihres Abonnements.
Beispiel: Push-Abonnement mit Python erstellen
Der folgende Python-Code sendet eine Anfrage mit den oben beschriebenen Parametern:
import requests
import json
access_token = "" # paste token here
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {access_token}",
}
body = {
"SubscriptionType": "push",
"StageOrder": True,
"FilterParam": "Collection/Name eq 'SENTINEL-1' and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'productType' and att/OData.CSC.StringAttribute/Value eq 'IW_SLC__1S')",
"Priority": 1,
"Status": "running",
"SubscriptionEvent": [
"created"
],
"NotificationEndpoint": "https://example.com:8000/catalogue-notifications",
"NotificationEpUsername": "NotificationEndpointUser",
"NotificationEpPassword": "My@!Passw0rd"
}
url = "https://catalogue.code-de.org/odata/v1/Subscriptions"
response = requests.post(url=url, headers=headers, json=body)
print(f"{response.status_code} {response.reason}\n")
try:
print(json.dumps(json.loads(response.text), indent=4))
except Exception:
print(response.text)
Dieses Skript:
sendet eine HTTP-Anfrage an die angegebene URL.
ruft die Ergebnisse ab und zeigt Folgendes an:
den Antwortstatuscode, zum Beispiel 200, und die Statusbeschreibung, zum Beispiel OK.
eine Leerzeile zur besseren Lesbarkeit.
den Antwortcode, falls vorhanden. Gültiges JSON wird zur besseren Lesbarkeit formatiert.
In diesem Skript wird der Anfragetext über den Parameter json an das Modul requests übergeben.
Weisen Sie das nach Voraussetzung Nr. 4 erstellte Keycloak-Token der Variablen access_token zu.
Tragen Sie im Dictionary body die Angaben zur Benachrichtigung als Werte der entsprechenden Schlüssel ein:
NotificationEndpoint — URL des Benachrichtigungsendpunkts einschließlich des Ports, falls dieser nicht 443 ist
NotificationEpUsername — Benutzername für Ihren Endpunkt
NotificationEpPassword — Passwort für Ihren Endpunkt
Speichern Sie die Datei als http_request_test_create.py.
Führen Sie das Skript mit folgendem Befehl aus. Wechseln Sie vorher in das Verzeichnis, in dem es liegt:
python3 http_request_test_create.py
python http_request_test_create.py
Beispiel: Abonnement zum Verfolgen erstellter und geänderter Produkte erstellen
In diesem Beispiel erstellen Sie ein Abonnement, das erstellte und geänderte Produkte verfolgt, die folgende Kriterien erfüllen (FilterParam):
Collection/Name eq 'SENTINEL-1' and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'productType' and att/OData.CSC.StringAttribute/Value eq 'IW_SLC__1S')
Senden Sie dazu eine HTTP-POST-Anfrage mit folgendem Anfragetext:
{
"SubscriptionType": "push",
"StageOrder": true,
"FilterParam": "Collection/Name eq 'SENTINEL-1' and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'productType' and att/OData.CSC.StringAttribute/Value eq 'IW_SLC__1S')",
"Priority": 1,
"Status": "running",
"SubscriptionEvent": [
"created",
"modified"
],
"NotificationEndpoint": "https://example.com:8000/catalogue-notifications",
"NotificationEpUsername": "NotificationEndpointUser",
"NotificationEpPassword": "My@!Passw0rd"
}
an diese URL:
https://catalogue.code-de.org/odata/v1/Subscriptions
ERINNERUNG: Geben Sie die obligatorischen Header an.
Sie sollten den Statuscode 201 Created und folgendes JSON-Objekt erhalten:
{
"Id": "6d73b84b-93c6-42aa-8c87-036585cfce04",
"SubscriptionType": "push",
"FilterParam": "Collection/Name eq 'SENTINEL-1' and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'productType' and att/OData.CSC.StringAttribute/Value eq 'IW_SLC__1S')",
"StageOrder": false,
"Priority": 1,
"Status": "running",
"NotificationEndpoint": "https://example.com:8000/catalogue-notifications",
"SubscriptionEvent": [
"created",
"modified"
],
"SubmissionDate": "2025-04-10T12:01:29.231216Z",
"@odata.context": "$metadata#OData.CSC.Subscription"
}
Beispiel: Versuch, ein Abonnement mit ungültigem FilterParam zu erstellen
Angenommen, Sie versuchen versehentlich, ein Abonnement mit einer ungültigen Abfrage zu erstellen, etwa mit Colection/Name statt Collection/Name:
Colection/Name eq 'SENTINEL-1' and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'productType' and att/OData.CSC.StringAttribute/Value eq 'IW_SLC__1S')
Der zu sendende Anfragetext enthält die ungültige Abfrage:
{
"SubscriptionType": "push",
"StageOrder": true,
"FilterParam": "Colection/Name eq 'SENTINEL-1' and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'productType' and att/OData.CSC.StringAttribute/Value eq 'IW_SLC__1S')",
"Priority": 1,
"Status": "running",
"SubscriptionEvent": [
"created"
],
"NotificationEndpoint": "https://example.com:8000/catalogue-notifications",
"NotificationEpUsername": "NotificationEndpointUser",
"NotificationEpPassword": "My@!Passw0rd"
}
Wie zuvor senden Sie die Anfrage an folgende URL:
https://catalogue.code-de.org/odata/v1/Subscriptions
Als Antwort erhalten Sie den Code 400 Bad Request und folgende JSON-Daten:
{
"detail": "Your filter is incorrect. We suggest to verify it with catalogue API. Detailed error message -> Invalid field: Colection"
}
Diese Antwort hängt von der Art des Fehlers in Ihrer Abfrage ab.
Was geschieht nach dem Erstellen eines Push-Abonnements?
Wenn die HTTP-Anfrage erfolgreich war, sollte ein Abonnement erstellt worden sein.
Ist das Abonnement aktiv, empfängt Ihr Benachrichtigungsendpunkt aus Voraussetzung Nr. 5 bei jedem relevanten Ereignis eine Benachrichtigung. Diese enthält Angaben zum betroffenen Produkt.
Eine Beispielbenachrichtigung ist zu lang, um sie vollständig in diesem Artikel wiederzugeben. Sie steht daher als JSON-Datei zum Download bereit:
example-notification-push.json
Das Array value -> Attributes sieht wie folgt aus:
Es beginnt in Zeile 67 und endet in Zeile 193; die gesamte Datei hat 221 Zeilen. Das rote Rechteck rechts im Bild zeigt die Position des Arrays Attributes im Verhältnis zur Länge des gesamten Texts.
Schlüssel einer Benachrichtigung erläutert
| Eigenschaftsname | Typ | Beschreibung |
|---|---|---|
| AckId | Guid |
Bestätigungsbezeichner der Benachrichtigung. Er kann zum eindeutigen Identifizieren und Bestätigen einer bestimmten zugestellten Benachrichtigung verwendet werden.
Beispiel 2f93b9d0-39f3-4c59-9a2a-5e3d7b2a5a61 |
| ProductId | Guid |
Dies ist der universell eindeutige Bezeichner (UUID) des Produkts, auf das sich die Benachrichtigung bezieht.
Beispiel 8d654e59-d7b6-4a53-b086-c9de764e506b |
| ProductName | String |
Dies ist der im Katalog vergebene Name des Produkts, auf das sich die Benachrichtigung bezieht. Der Wert von ProductName kann lang sein und passt meist nicht in eine einzelne Tabellenzelle. Ein konkretes Beispiel steht unterhalb der Tabelle. |
| SubscriptionId | Guid |
Dies ist ein universell eindeutiger Bezeichner (UUID). Die Id ist ein lokaler Bezeichner für die Abonnementinstanz innerhalb des Katalogs und wird beim Erstellen des Abonnements vergeben.
Beispiel 991c4730-cf6f-432a-9f6c-47be0230ff4 |
| SubscriptionEvent | Aufzählung der Abonnementereignisse |
Das Abonnementereignis, das überwacht und für das eine Benachrichtigung bereitgestellt wird:
Für „SubscriptionEvent“ = „created“ werden Benachrichtigungen über neu zum EODATA-Katalog hinzugefügte Produkte gesendet. Für „SubscriptionEvent“ = „modified“ werden Benachrichtigungen über geänderte Produkte im EODATA-Katalog gesendet. Für „SubscriptionEvent“ = „deleted“ werden Benachrichtigungen über aus dem EODATA-Katalog entfernte Produkte gesendet. Beispiel created |
| NotificationDate | DateTimeOffset |
Datum und Uhrzeit der Erstellung der Benachrichtigung. Die Zeit wird im ISO-8601-Format (UTC+0) angegeben: YYYYMM-DDThh:mm:ss.sssZ
Beispiel 2024-01-29T10:59:08.698Z |
| value | JSON-Objekt | Enthält eine Standardantwort der Katalog-API mit allen Metadaten und Inhaltsdetails eines Produkts. |
Beispiel für ProductName
S2A_MSIL2A_20240129T062121_N0510_R034_T44VMN_20240129T093752.SAFE
Status und Endpunkt eines Push-Abonnements ändern
In diesem Abschnitt erfahren Sie, wie Sie ein bestehendes Push-Abonnement bearbeiten. Dies kann beispielsweise nötig sein, um es zu pausieren oder wieder zu aktivieren oder weil Sie bald den Zugriff auf den bisherigen Benachrichtigungsendpunkt verlieren.
Bei Push-Abonnements können Sie folgende Eigenschaften ändern:
- Status
Status des Abonnements: running, paused oder cancelled. Der Status cancelled löscht das Abonnement.
- NotificationEndpoint
Die URL Ihres Endpunkts einschließlich des Ports, unter dem er erreichbar ist.
- NotificationEpUsername
Der am Endpunkt konfigurierte Benutzername, mit dem Benachrichtigungen an ihn gesendet werden.
- NotificationEpPassword
Das am Endpunkt konfigurierte Passwort, mit dem Benachrichtigungen an ihn gesendet werden.
Senden Sie dazu eine HTTP-PATCH-Anfrage mit einem JSON-Objekt als Anfragetext, das alle zu ändernden Parameter enthält.
Bemerkung
Sie müssen nur die Parameter angeben, die Sie ändern möchten.
Senden Sie die Anfrage an folgende URL. Ersetzen Sie darin <<subscription_id>> durch die ID Ihres Abonnements.
https://catalogue.code-de.org/odata/v1/Subscriptions(<<subscription_id>>)
ERINNERUNG: Geben Sie die obligatorischen Header an.
Die Antwort hängt von den gewählten Optionen ab.
Wenn Sie
Eigenschaften wie den Benachrichtigungsendpunkt oder den Status ändern und
den Status nicht auf cancelled setzen,
sollten Sie den Antwortstatus 200 OK und ein JSON-Objekt mit aktualisierten Informationen zum Abonnement erhalten.
Wenn Sie den Status auf cancelled setzen, sollte das Abonnement entfernt und der Antwortcode 204 No Content zurückgegeben werden.
Beispiel: Bearbeiten, ohne das Abonnement zu löschen
Angenommen, Sie haben ein Push-Abonnement mit der ID 6d73b84b-93c6-42aa-8c87-036585cfce04 und möchten den Endpunkt für Benachrichtigungen ändern. Im Einzelnen möchten Sie:
den Benachrichtigungsendpunkt auf https://example.org setzen,
den Benutzernamen zur Authentifizierung an diesem Endpunkt auf John setzen und
das Passwort zur Authentifizierung an diesem Endpunkt auf MyTestPassword321 setzen.
Verwenden Sie dafür folgendes JSON-Objekt als Anfragetext Ihrer HTTP-PATCH-Anfrage:
{
"NotificationEndpoint": "https://example.org",
"NotificationEpUsername": "John",
"NotificationEpPassword": "MyTestPassword321"
}
ERINNERUNG: Geben Sie die obligatorischen Header an.
Senden Sie diese Anfrage an folgende URL:
https://catalogue.code-de.org/odata/v1/Subscriptions(6d73b84b-93c6-42aa-8c87-036585cfce04)
Sie erhalten den Antwortcode 200 OK und folgendes JSON-Objekt:
{
"Id": "6d73b84b-93c6-42aa-8c87-036585cfce04",
"SubscriptionType": "push",
"FilterParam": "Collection/Name eq 'SENTINEL-1' and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'productType' and att/OData.CSC.StringAttribute/Value eq 'IW_SLC__1S')",
"StageOrder": false,
"Priority": 1,
"Status": "paused",
"NotificationEndpoint": "https://example.org",
"SubscriptionEvent": [
"created",
"modified"
],
"SubmissionDate": "2025-04-10T12:01:29.231216Z",
"@odata.context": "$metadata#OData.CSC.Subscription"
}
Die neuen Anmeldedaten sind darin nicht enthalten, der neue Endpunkt ist jedoch sichtbar.
Beispiel: Abonnementstatus auf cancelled setzen
Angenommen, Sie möchten das Abonnement aus dem vorherigen Beispiel löschen, indem Sie seinen Status auf cancelled setzen.
Verwenden Sie dazu folgendes JSON-Objekt als Anfragetext Ihrer HTTP-PATCH-Anfrage:
{
"Status": "cancelled"
}
Die URL bleibt unverändert:
https://catalogue.code-de.org/odata/v1/Subscriptions(6d73b84b-93c6-42aa-8c87-036585cfce04)
Sie erhalten den Antwortcode 204 No Content. Das Abonnement sollte nun gelöscht sein.
Aktuelle Abonnements auflisten
Senden Sie eine GET-Anfrage an folgende URL, um alle derzeit mit Ihrem Konto verknüpften Abonnements aufzulisten:
https://catalogue.code-de.org/odata/v1/Subscriptions/Info
ERINNERUNG: Geben Sie die obligatorischen Header an.
Der Antwortstatus sollte 200 OK sein. Sie sollten eine Liste Ihrer aktuellen Abonnements erhalten. Dazu gehören:
Push-Abonnements und
Pull-Abonnements.
Hier ist ein Beispiel:
[
{
"Id": "0a449cc9-d6d4-4db7-af6a-d10105bedd2b",
"SubscriptionType": "push",
"FilterParam": "Collection/Name eq 'SENTINEL-2' and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'productType' and att/OData.CSC.StringAttribute/Value eq 'S2MSI2A')",
"StageOrder": false,
"Priority": 1,
"Status": "paused",
"NotificationEndpoint": "https://example.com/notification",
"SubscriptionEvent": [
"created"
],
"SubmissionDate": "2025-04-10T13:11:11.203179Z",
"@odata.context": "$metadata#OData.CSC.Subscription"
},
{
"Id": "e9d0b04b-cb58-4963-814c-e6d81be4219e",
"SubscriptionType": "pull",
"FilterParam": "Collection/Name eq 'SENTINEL-1' and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'productType' and att/OData.CSC.StringAttribute/Value eq 'IW_SLC__1S')",
"StageOrder": false,
"Priority": 1,
"Status": "running",
"SubscriptionEvent": [
"created",
"modified"
],
"SubmissionDate": "2025-04-10T13:13:51.988546Z",
"@odata.context": "$metadata#OData.CSC.Subscription"
}
]
In diesem Beispiel hat der Benutzer zwei Abonnements:
ein Push-Abonnement, das created-Produkte verfolgt,
ein Pull-Abonnement, das created- und modified-Produkte verfolgt.
Ein Push-Abonnement enthält im Gegensatz zu einem Pull-Abonnement den Schlüssel NotificationEndpoint. Dieser gibt die URL des Endpunkts an, an den Benachrichtigungen gesendet werden.
Weitere Informationen zu Pull-Abonnements finden Sie hier: Pull-Abonnements für den EODATA-Katalog auf CODE-DE-Lab
Wenn Sie derzeit keine Abonnements haben, sollte die Abfrage eine leere Liste zurückgeben:
[]
Beispiel: Abonnements mit Python auflisten
Der folgende vollständige Python-Code listet Abonnements auf:
import requests
import json
access_token = "" # paste token here
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {access_token}",
}
url = "https://catalogue.code-de.org/odata/v1/Subscriptions/Info"
response = requests.get(url=url, headers=headers)
print(f"{response.status_code} {response.reason}\n")
try:
print(json.dumps(json.loads(response.text), indent=4))
except Exception as e:
print(e)
print(response.text)
Dieses Skript:
sendet eine HTTP-Anfrage an die angegebene URL.
ruft die Ergebnisse ab und zeigt Folgendes an:
den Antwortstatuscode, zum Beispiel 200, und die Statusbeschreibung, zum Beispiel OK.
eine Leerzeile zur besseren Lesbarkeit.
den Antwortcode, falls vorhanden. Gültiges JSON wird zur besseren Lesbarkeit formatiert.
Weisen Sie das nach Voraussetzung Nr. 4 erstellte Keycloak-Token der Variablen access_token zu.
Speichern Sie die Datei als http_request_test_list.py.
Führen Sie das Skript mit folgendem Befehl aus. Wechseln Sie vorher in das Verzeichnis, in dem es liegt:
python3 http_request_test_list.py
python http_request_test_list.py
Abonnement löschen
Methode 1: Eine HTTP-DELETE-Anfrage senden
Senden Sie eine DELETE-Anfrage an die folgende URL. Ersetzen Sie <<subscription_id>> durch die ID des zu löschenden Abonnements.
https://catalogue.code-de.org/odata/v1/Subscriptions(<<subscription_id>>)
ERINNERUNG: Geben Sie die obligatorischen Header an.
Sie sollten den Antwortstatus 204 No Content erhalten.
Die im Abschnitt Aktuelle Abonnements auflisten beschriebene Auflistung sollte zeigen, dass dieses Abonnement nicht mehr existiert.
Methode 2: Den Abonnementstatus auf cancelled setzen
Dieser Ablauf ist im Abschnitt Status und Endpunkt eines Push-Abonnements ändern beschrieben.
Nächste Schritte
Nach dem Empfang einer Benachrichtigung können Sie das betreffende Produkt herunterladen. Dafür stehen unter anderem folgende Möglichkeiten zur Verfügung:
Kopieren Sie das Produkt aus dem Verzeichnis /eodata auf einer virtuellen Maschine in der CODE-DE-Lab-Cloud: EODATA unter Linux mit S3FS auf CODE-DE-Lab einbinden. Der Wert von S3Path in der Benachrichtigung enthält den Speicherort des Produkts im EODATA-Repository.
Laden Sie das Produkt wie in Verwenden von curl und wget zum Herunterladen von EO-Daten-Produkten von CODE-DE-Lab beschrieben herunter. Der Wert von ProductId enthält die Produkt-ID, die Sie für den dort beschriebenen Download verwenden können.
Die folgenden Artikel behandeln einige Möglichkeiten zur Verarbeitung von EODATA: