Skip to content

MarkusRodler/dark-repository-service

Repository files navigation

Repository (Service)

Service

API-Dokumentation

Health Check

GET /heartbeat

Prüft, ob der Service läuft.


IDs für Aggregate abrufen

GET /GetIdsFor/{aggregate:string}

Gibt alle IDs für das angegebene Aggregat zurück.

Antwort:

["id1", "id2", ...]

Existenz prüfen

GET /Has/{aggregatestring}/{id:string}

Prüft, ob ein Eintrag mit der ID existiert.

Http Code Bedeutung
200 OK Existiert
404 Not Found Existiert nicht

Daten lesen

GET /Read/{aggregate:string}/{id:string}
GET /Read/{aggregate:string}/{id:string}.jsonl
GET /Read/{aggregate:string}/{id:string}/{afterLine:int?}

Liest die Daten als JSONL für das Aggregat und die ID. Der zweite Aufruf liefert direkt statische Dateien aus dem Data-Verzeichnis. Liefert die Daten als Stream optional ab einer bestimmten Zeile. Es kann ein Query-String für Filterung übergeben werden. Details siehe: DCB

Antwort: Content-Type: application/jsonl; charset=utf-8

{"$type":"DummyCreatedEvent","id":"275c4942-85b2-40f0-a699-a6dc007b1afa","tags":["tag1key:tag1value", "tag2key:tag2value"], "title":"Dummy 1"}
{"$type":"DummyImprovedEvent","id":"275c4942-85b2-40f0-a699-a6dc007b1afa","tags":["tag1key:tag1value", "tag2key:tag2value"], "title":"Dummy One"}
{"$type":"DummyDeletedEvent","id":"275c4942-85b2-40f0-a699-a6dc007b1afa","tags":["tag1key:tag1value", "tag2key:tag2value"]}

Daten anhängen

PUT /Append/{aggregate:string}/{id:string}/{version:int}

Hängt neue Daten an das Aggregat/ID an. Body: JSONL (Text, Zeile pro Event) Optional: failIf als Query-Parameter Details siehe: DCB. Warnung: Verändert gleichzeitig das Event indem es ein weiteres Metadaten-Feld Version einfügt. Dieses gibt an welche Version es ist. Die Version deckt sich mit der jeweiligen Zeilennummer. Von daher ist es unerlässlich, dass die Anzahl der Zeilen niemals verändert werden. => Keine Events löschen. Falls dies doch mal benötigt wird lieber das Event modifizieren mit Fake-Infos oder die Zeile komplett leer lassen.


Daten überschreiben

POST /Overwrite/{aggregate:string}/{id:string}/{version:int}

Überschreibt komplette Daten für das angegebene Aggregat/ID. Body: JSONL (Text, Zeile pro Event) Optional: failIf als Query-Parameter Details siehe: DCB.


Hinweis: Alle Endpunkte erwarten und liefern UTF-8-kodierte Daten. Events werden als JSONL (eine JSON pro Zeile) verarbeitet.

DCB

Dieser Service unterstützt Dynamic Consistency Boundary. Siehe auch: https://dcb.events/ Zur Filterung steht bspw. query bei Read zur Verfügung und failIf bei Append und Overwrite.

Beispiel

Filterung nach Typ, Tags und Datum:

GET /Read/Dummy/0815?query=types=DummyCreatedEvent|DummyDeletedEvent,tags=a1|a2:b1,date=2023-05-06

Liefert alle Events vom Typ DummyCreatedEvent oder DummyDeletedEvent, mit Tag a1 oder a2:b1, die am 06.05.2023 erstellt wurden.

ODER-Suche für mehrere Tage:

GET /Read/Dummy/0815?query=date=2023-05-06|2023-05-07

Liefert alle Events die am 06.05.2023 oder 07.05.2023 erstellt wurden.

Zeitraum-Suche:

GET /Read/Dummy/0815?query=date=2023-05-06~2023-05-16

Liefert alle Events, die zwischen dem 06.05.2023 und 16.05.2023 (inklusive) erstellt wurden.

Kombinierte Suche:

GET /Read/Dummy/0815?query=types=DummyCreatedEvent,date=2023-05-06|2023-05-07~2023-05-16

Liefert alle Events vom Typ DummyCreatedEvent, die entweder am 06.05.2023 oder im Zeitraum 07.05.2023 bis 16.05.2023 erstellt wurden.

Die bisherigen Filtermöglichkeiten (Semikolon für Gruppen, | für ODER) funktionieren auch mit dem neuen Feld date. Aus logischen Gründen funktioniert aber nicht + für und. Es ist auch möglich die Zeit und Zeitzone mit anzugeben. Dabei wird aber immer nur der jeweilige tag berücksichtigt.

k6

Um Performance-Tests / Last-Tests auszuführen wird k6 benötigt. Alle Tests liegen im Ordner .performance. Beispielaufruf: k6 run .performance/Has.js

About

Basic docker repository package to centralize volumes

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors 2

  •  
  •