© blackboard196/Shutterstock.com, © S&S Media
Teil 2: Mit TypeScript Union Types die Grammatik für eine hierarchische QL definieren

Grammatik ist sexy


Generische, JSON-basierte Datenabfragen haben sich in vielen Anwendungsfällen als Alternative zu klassischen REST-Endpoints etabliert – vor allem, wenn Apps laufend weiterentwickelt und verändert werden. Dank TypeScript können wir eine statisch typisierte „Grammatik“ für eine JSON-Abfragesprache erstellen, ohne auf komplexere Zusatztools zurückgreifen zu müssen.

Artikelserie

Teil 1: Mit TypeScript Metadata und Reflection ein Domänenmodell aufbauen

Teil 2: Mit TypeScript Union Types die Grammatik für eine hierarchische QL definieren

Teil 3: Abfragen am Server generisch gegen eine relationale DB mappen und am Client typsicher verarbeiten

Im ersten Artikel haben wir besprochen, wie man die Idee „überall TypeScript“ nicht nur als client- und serverseitige Programmiersprache entwickeln, sondern noch viel weiter denken kann: In unserem Beispiel wurde TypeScript dank seines Metadatenkonzepts zu einer domänenspezifischen Sprache, in der wir das Domänennetzwerk von Kunden, Kaufvorgängen und Tickets beschrieben haben. Aus dem Domänenmodell konnten wir automatisiert ein Schema erzeugen, das uns in diesem und im kommenden Artikel dabei helfen wird, hierarchische Datenabfragen zu formulieren und die Abfragen auf einem Server generisch auf eine relationale Datenbank zu mappen. In diesem Artikel werden wir die Abfragesprache selbst gestalten und dazu auf TypeScript Union Types zurückgreifen.

Die Grundidee: hierarchische Abfragen in JSON definieren

Die Basis für die Beispielabfragen bildet unser einfaches Domänenmodell (Abb. 1):

  • Ein Kunde kann N Einkäufe tätigen. Jeder Einkauf ist genau einem Kunden zugeordnet.

  • Einem Einkauf ist genau ein Artikel (Stock Keeping Unit (SKU)) zugeordnet, jeder Artikel kann an beliebig vielen Einkäufen beteiligt sein.

  • Ein Kunde kann N Tickets/Reklamationen aufgeben. Jedes Ticket hat genau einen Owner.

  • Einem Einkauf können mehrere Tickets zugeordnet werden. Jedes Ticket hat genau einen Grund (Reason).

mahringer_typescript_teil2_1.tif_fmt1.jpgAbb. 1: Der Ausschnitt des Domänenmodells für unsere Beispielabfragen

In Listing 1 wird die Grundidee der hierarchischen Abfrage anhand des Beispiels „Kundensuche“ deutlich: Wir suchen alle Kunden, die „Satya Nadella“ heißen. Unsere Suchanfrage beschreiben wir durch ein Plain-JavaScript-Objekt: Liefere die Properties id, firstName und lastName von Kunden, die dem Kriterium Vorname == Satya und Nachname == Nadella entsprechen. Das JavaScript-Objekt lässt sich einfach in JSON umwandeln und z. B. mittels XHR2 an ein Backend senden. Was stört uns...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang