Skip to content

Datenspeicher API

ENTWURF — Nur für interne Entwicklerteams

Diese API-Referenz ist für interne Entwicklerteams bestimmt.

Übersicht

Was es ist: Die Datenspeicher-API bietet direkten Zugriff auf die Entitäts- und Edge-Speicherschicht von Hydden. Sie unterstützt das Abrufen von Sammlungsmetadaten, die Abfrage von Entitäten mit Filterung und Verlauf, das Erstellen/Aktualisieren/Löschen von Entitäten und Edges sowie die Verwaltung der Datenspeicher-Modulkonfiguration. Für Backup-/Wiederherstellungsoperationen siehe die Backup & Wiederherstellung API.

Quelle: src/datastore/rest/rest.go

Basispfad

/internal/v1/datastore

Authentifizierung

Alle Endpunkte erfordern JWT-Cookie- oder API-Token-Authentifizierung.

Endpunkte

MethodePfadBeschreibung
GET/internal/v1/datastore/infoSammlungsspeicher-Informationen abrufen
GET/internal/v1/datastore/shard/infoShard-Replikationsinformationen abrufen
POST/internal/v1/datastore/fetchEntitäten mit Filterung und Transformation abrufen
GET/internal/v1/datastore/entity/:target/:idEine einzelne Entität abrufen
PUT/internal/v1/datastore/entity/:target/:idEine Entität erstellen oder aktualisieren
DELETE/internal/v1/datastore/entity/:target/:idEine Entität löschen
PUT/internal/v1/datastore/edge/:target/:from/:toEinen Edge (Beziehung) erstellen oder aktualisieren
GET/internal/v1/datastore/module/configDatenspeicher-Modulkonfiguration abrufen
POST/internal/v1/datastore/module/configDatenspeicher-Modulkonfiguration aktualisieren

GET /internal/v1/datastore/info

Informationen über Sammlungsdatenspeicher abrufen, einschließlich Ansichtszeiten, Entitätsanzahlen und Replikationsknoten-Details.

Anfrage:

http
GET /internal/v1/datastore/info
Authorization: Bearer <token>

Antwort (200):

json
{
  "viewTime": 1707700800000,
  "maxTime": 1707700800000,
  "stores": [
    {
      "id": "ds-uuid",
      "viewTime": 1707700800000,
      "count": 4521,
      "nodes": [
        { "id": "node-1", "name": "Primary", "cloud": false, "online": true, "count": 4521 }
      ],
      "tombstoned": false,
      "name": "Corporate AD",
      "platform": "Active Directory",
      "version": 42
    }
  ],
  "historical": false,
  "node": "node-1",
  "cached": false,
  "version": 42
}

Antwortfelder (CollectionInfo):

FeldTypBeschreibung
viewTimeint64Aktueller Ansichtszeitstempel (ms)
maxTimeint64Maximal verfügbarer Zeitstempel
storesarraySammlungsspeicher-Einträge
stores[].idstringDatenquellen-ID
stores[].countint64Anzahl der Entitäten in diesem Speicher
stores[].namestringAnzeigename der Datenquelle
stores[].platformstringPlattformtyp (Active Directory, Azure AD usw.)
stores[].nodesarrayReplikationsknoten, die diesen Speicher halten
stores[].tombstonedboolOb der Speicher soft-gelöscht ist
historicalboolOb historische Daten angezeigt werden
nodestringAntwortende Knoten-ID
cachedboolOb die Antwort aus dem Cache stammt

GET /internal/v1/datastore/shard/info

Shard-Verteilungs- und Replikationsinformationen über alle Knoten abrufen.

Anfrage:

http
GET /internal/v1/datastore/shard/info
Authorization: Bearer <token>

Antwort (200):

json
{
  "replicas": 2,
  "stores": 12,
  "total": 45230,
  "nodes": [
    {
      "id": "node-1",
      "name": "Primary",
      "cloud": false,
      "online": true,
      "count": 45230,
      "stores": [],
      "version": 42
    }
  ],
  "node": "node-1",
  "cached": false
}

Antwortfelder (ReplicationInfo):

FeldTypBeschreibung
replicasint64Konfigurierter Replikationsfaktor
storesint64Gesamtanzahl der Sammlungsspeicher
totalint64Gesamtanzahl der Entitäten über alle Speicher
nodesarrayReplikationsknoten mit Status und Entitätsanzahlen
nodes[].onlineboolOb der Knoten derzeit erreichbar ist
nodes[].cloudboolOb es sich um einen Cloud-Knoten handelt

POST /internal/v1/datastore/fetch

Entitäten aus einem Sammlungsspeicher mit optionaler Filterung und Transformation abrufen. Ergebnisse werden als JSON-Array gestreamt.

Anfrage:

http
POST /internal/v1/datastore/fetch
Content-Type: application/json
Authorization: Bearer <token>
json
{
  "dataSourceId": "ds-uuid",
  "entity": {
    "entityType": "identity.user",
    "time": 1707700800000
  }
}

Abfrageparameter:

ParameterTypBeschreibung
limitintMaximale Anzahl zurückzugebender Entitäten
filterstringFilterausdruck, der auf Entitäten angewendet wird
transformstringTransformationsfunktion, die auf Ergebnisse angewendet wird

Antwort (200): Streaming-JSON-Array von Entitäten (Chunked-Transfer-Encoding).

json
[
  {
    "uniqueId": "acct-uuid-1",
    "entityType": "identity.user",
    "displayName": "John Doe",
    "email": "john.doe@company.com"
  }
]

GET /internal/v1/datastore/entity/:target/:id

Eine einzelne Entität anhand der Datenquellen-ID und Entitäts-ID abrufen, mit optionalem Verlauf.

Anfrage:

http
GET /internal/v1/datastore/entity/:target/:id
Authorization: Bearer <token>

Pfadparameter:

ParameterBeschreibung
targetDatenquellen-ID
idEntitäts-ID (Base64-kodiert)

Abfrageparameter:

ParameterTypBeschreibung
historyboolEntitäts-Änderungsverlauf einschließen (Standard: false)
layerint[]Bestimmte Datenschichten zum Abrufen (wiederholbar)

Antwort (200):

json
{
  "id": "acct-uuid",
  "dataSourceId": "ds-uuid",
  "type": "identity.user",
  "entity": {
    "displayName": "John Doe",
    "email": "john.doe@company.com",
    "upn": "jdoe@corp.local"
  },
  "time": 1707700800000,
  "tombstoned": false,
  "version": 5,
  "storeVersion": 42,
  "layers": [1, 2],
  "history": [
    {
      "time": 1707614400000,
      "tombstoned": false,
      "entity": {},
      "layers": [1]
    }
  ]
}

Antwortfelder (TargetEntity):

FeldTypBeschreibung
idstringEindeutige Entitäts-ID
dataSourceIdstringDatenquellen-ID
typestringEntitätstyp-Identifikator
entityobjectDeserialisierte Entitätsdaten
timeint64Zeitstempel der letzten Änderung (ms)
tombstonedboolOb die Entität soft-gelöscht ist
versionuint64Versionsnummer der Entität
storeVersionuint64Version des Sammlungsspeichers
layersint64[]Vorhandene Datenschichten für diese Entität
historyarrayHistorische Versionen (bei ?history=true)

PUT /internal/v1/datastore/entity/:target/:id

Eine Entität im Datenspeicher erstellen oder aktualisieren.

Anfrage:

http
PUT /internal/v1/datastore/entity/:target/:id?type=identity.user
Content-Type: application/json
Authorization: Bearer <token>

Pfadparameter:

ParameterBeschreibung
targetDatenquellen-ID
idEntitäts-ID

Abfrageparameter:

ParameterTypErforderlichBeschreibung
typestringJaEntitätstyp (z. B. identity.user, identity.group)

Anfragekörper: JSON-Entität, die dem Protobuf-Schema für den angegebenen Typ entspricht.

json
{
  "displayName": "John Doe",
  "email": "john.doe@company.com"
}

Antwort (200): JSON-Echo der gespeicherten Entität.


DELETE /internal/v1/datastore/entity/:target/:id

Eine Entität aus dem Datenspeicher löschen (erstellt einen Tombstone-Marker).

Anfrage:

http
DELETE /internal/v1/datastore/entity/:target/:id
Authorization: Bearer <token>

Antwort (200): Leere Antwort bei Erfolg.


PUT /internal/v1/datastore/edge/:target/:from/:to

Einen Beziehungs-Edge zwischen zwei Entitäten erstellen oder aktualisieren.

Anfrage:

http
PUT /internal/v1/datastore/edge/:target/:from/:to?type=edge.identity.manager
Content-Type: application/json
Authorization: Bearer <token>

Pfadparameter:

ParameterBeschreibung
targetDatenquellen-ID
fromQuell-Entitäts-ID
toZiel-Entitäts-ID

Abfrageparameter:

ParameterTypErforderlichBeschreibung
typestringJaEdge-Typ (muss mit edge. beginnen, z. B. edge.identity.manager, edge.identity.account)

Anfragekörper: JSON-Edge-Eigenschaften.

Antwort (200): JSON-Edge mit berechneter eindeutiger ID.


GET /internal/v1/datastore/module/config

Die Datenspeicher-Modulkonfiguration abrufen, einschließlich Replikationseinstellungen und Knotenzuweisungen.

Anfrage:

http
GET /internal/v1/datastore/module/config
Authorization: Bearer <token>

Antwort (200):

json
{
  "id": "datastore-module",
  "name": "Datastore",
  "replicas": 2,
  "weights": {
    "node-1": 100,
    "node-2": 100
  },
  "nodes": [
    { "id": "node-1", "name": "Primary", "tenant": "tenant-uuid" },
    { "id": "node-2", "name": "Secondary", "tenant": "tenant-uuid" }
  ],
  "version": 5,
  "site": "us-east-1",
  "refresh": false
}

Antwortfelder (ModuleConfig):

FeldTypBeschreibung
idstringModulkonfigurations-ID
namestringModul-Anzeigename
replicasint64Replikationsfaktor
weightsmapKnoten-zu-Gewicht-Zuordnung für die Datenverteilung
nodesarrayZugewiesene Knoten
versionuint64Konfigurationsversion
sitestringBereitstellungsstandort-Identifikator
refreshboolOb eine Aktualisierung aussteht

POST /internal/v1/datastore/module/config

Die Datenspeicher-Modulkonfiguration aktualisieren.

Anfrage:

http
POST /internal/v1/datastore/module/config
Content-Type: application/json
Authorization: Bearer <token>

Der Anfragekörper verwendet die gleiche ModuleConfig-Struktur. Das Feld id ist erforderlich.

Antwort (200): Aktualisierte ModuleConfig.


Fehlerantworten

StatusBeschreibung
400Ungültiger Anfragekörper, fehlender Typparameter oder ungültige Entitäts-ID-Kodierung
403Authentifizierung fehlgeschlagen oder unzureichende Berechtigungen
404Entität oder Datenquelle nicht gefunden
500Interner Serverfehler

Verwandte Themen

Hydden Documentation and Training Hub