---
title: "Academy Article"
canonical_url: "https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver"
locale: de
meta:
  "og:title": "Academy Article"
---

[Zur Startseite](https://academy.laioutr.com/)

- [Für Entwickler](https://academy.laioutr.com/bereiche/fuer-entwickler)

- [Einstieg für Entwickler](https://academy.laioutr.com/leitfaeden/einstieg-fuer-entwickler)

- [Orchestr: Entities, Queries, Actions und Resolver](https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver)

# Orchestr: Entities, Queries, Actions und Resolver

Orchestr ist die Datenschicht von Laioutr und läuft serverseitig im Nuxt-Server. Queries liefern Entity-IDs, Component Resolver laden die Daten dazu, Actions führen Änderungen aus, und Tokens bilden den Vertrag zwischen Frontend, Orchestr und Apps.

## Bevor du startest

<dl>

<dt>Dauer</dt>
<dd>8 Min.</dd></dl>

Zuletzt geprüft am 15. Oktober 2026

Orchestr organisiert Daten als **Entities** mit einer ID und einem Typ, etwa `Product` oder `BlogPost`. Die Daten hängen als **Entity Components** daran, zum Beispiel `base`, `media` oder `prices`. Eine Seite fragt nur die Components an, die sie wirklich rendert.

Fünf Handler-Typen greifen ineinander: **Queries** liefern Entity-IDs (mit Query Templates für die Vorschau in Studio), **Component Resolver** laden die Components dazu, **Links** verbinden Entities wie Produkt und Varianten, **Actions** führen Änderungen wie "In den Warenkorb" aus, und **Page Indexes** listen die konkreten Seiten hinter einem dynamischen Seitentyp.

Weil jede Datenquelle ihre eigenen Resolver beisteuert, kann ein Produkt Stammdaten aus dem Shopsystem und Preise aus dem ERP erhalten. Die Sections merken davon nichts; ein Backend-Wechsel tauscht nur die Resolver. **Tokens** sind dabei die Verträge, über die Orchestr erkennt, welche App was beantwortet. Orchestr cacht Queries, Links und Resolver, und Zugangsdaten zu Backends bleiben auf dem Server.

## Schritt für Schritt

1. 1 ### Schritt 1: Token wählen oder definieren

   Für Standardfälle die kanonischen Tokens aus `@laioutr-core/canonical-types` nutzen. Neue Daten entstehen über einen eigenen Component-Token mit `defineEntityComponentToken` und einem Zod-Schema.
2. 2 ### Schritt 2: Handler anlegen

   Handler als Dateien unter `src/runtime/server/orchestr/` anlegen, etwa `product/by-slug.query.ts`, `cart/add-item.action.ts` oder `menu/base.resolver.ts`. Orchestr findet sie über `orchestrDirs`.
3. 3 ### Schritt 3: Im Request Editor prüfen

   Im Playground den **Orchestr Request Editor** der DevTools öffnen und Queries und Actions mit Testeingaben ausführen.

## Häufige Fragen

Was unterscheidet Orchestr von GraphQL?

Beide fragen nur benötigte Felder ab. Orchestr läuft aber ausschließlich auf dem Server, in TypeScript ohne eigene Abfragesprache. Dadurch entstehen keine Abfrage-Kaskaden im Browser, und Backend-Zugangsdaten bleiben verborgen.

Was passiert bei einem Wechsel des Shopsystems?

Die neue App liefert Resolver für dieselben Tokens. Sections und Seiten bleiben unverändert, weil sie nur kanonische Entities und Components kennen.

Welche Informationen bekommt jeder Handler?

Jeder Handler erhält `clientEnv` mit Markt, Sprache, Währung und der Angabe, ob die Anfrage eine Content-Vorschau ist.

## Passend dazu

- [Die erste eigene App bauen und veröffentlichen](https://academy.laioutr.com/artikel/erste-eigene-app-bauen-und-veroeffentlichen)20 Min.

  Eine eigene App entsteht aus dem App Starter: Paketnamen setzen, Sections, Blocks oder Orchestr-Handler mit registerLaioutrApp registrieren und im Playground testen. Danach bringen npm publish und laioutr app release die Version ins Cockpit, und das nächste Deployment einer Umgebung rollt sie aus.
- [Performance: Caching und Orchestr](https://academy.laioutr.com/artikel/performance-caching-und-orchestr)6 Min.

  Laioutr beschleunigt Storefronts über drei Cache-Ebenen: den Entity-Cache von Orchestr auf dem Server, den HTTP-Cache an der Edge und einen Speicher im Browser. Zusammen sorgen sie dafür, dass wiederholte Aufrufe Backends kaum belasten.
- [Sections mit Shopdaten füllen](https://academy.laioutr.com/artikel/sections-mit-shopdaten-fuellen)7 Min.

  Sections mit einem Datenfeld zeigen Produkte, Kategorien oder Beiträge aus den angebundenen Systemen. Das Team wählt in Studio eine Datenabfrage, stellt Eingabe, Anzahl und Sortierung ein, und Orchestr liefert die Daten beim Rendern.
- [Content Collections im Code deklarieren](https://academy.laioutr.com/artikel/content-collections-im-code-deklarieren)15 Min.

  Welche Inhaltstypen das Laioutr CMS verwaltet, legt das Projekt in der Option collections von @laioutr-app/cms fest. Nach dem nächsten Deployment erscheinen die Typen im Cockpit unter Content, und ihre Einträge beantworten Orchestr-Queries wie jedes andere Backend.

## In einer Lektion lernen

- [Orchestr: Entities, Queries, Actions](https://academy.laioutr.com/lektionen/entwickler-orchestr-und-datenabfragen)14 Min.

## [Einstieg für Entwickler](https://academy.laioutr.com/leitfaeden/einstieg-fuer-entwickler)

In diesem Leitfaden suchen

1. [Lokale Entwicklungsumgebung einrichten](https://academy.laioutr.com/artikel/lokale-entwicklungsumgebung-einrichten)15 Min.
2. [Die Laioutr CLI: Befehle und Authentifizierung](https://academy.laioutr.com/artikel/laioutr-cli-befehle-und-authentifizierung)6 Min.
3. [Die erste eigene App bauen und veröffentlichen](https://academy.laioutr.com/artikel/erste-eigene-app-bauen-und-veroeffentlichen)20 Min.
4. [Eigene Sections und Blocks für Studio definieren](https://academy.laioutr.com/artikel/eigene-sections-und-blocks-fuer-studio-definieren)15 Min.
5. [Orchestr: Entities, Queries, Actions und Resolver](https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver)8 Min.
6. [Content Collections im Code deklarieren](https://academy.laioutr.com/artikel/content-collections-im-code-deklarieren)15 Min.
7. [Performance und technisches SEO im Code](https://academy.laioutr.com/artikel/performance-und-technisches-seo-im-code)10 Min.

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://academy.laioutr.com/#website",
      "@type": "WebSite",
      "inLanguage": "de",
      "name": "Default",
      "url": "https://academy.laioutr.com/",
      "workTranslation": {
        "@id": "https://academy.laioutr.com/#website"
      }
    },
    {
      "@id": "https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver#webpage",
      "name": "Academy Article",
      "url": "https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver",
      "@type": [
        "WebPage",
        "FAQPage"
      ],
      "breadcrumb": {
        "@id": "https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver#breadcrumb"
      },
      "isPartOf": {
        "@id": "https://academy.laioutr.com/#website"
      },
      "mainEntity": [
        {
          "@id": "https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver#/schema/question/1"
        },
        {
          "@id": "https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver#/schema/question/2"
        },
        {
          "@id": "https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver#/schema/question/3"
        }
      ],
      "potentialAction": [
        {
          "@type": "ReadAction",
          "target": [
            "https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver"
          ]
        }
      ]
    },
    {
      "@id": "https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver#breadcrumb",
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "name": "Home",
          "item": "https://academy.laioutr.com/",
          "position": 1
        },
        {
          "@type": "ListItem",
          "name": "Für Entwickler",
          "item": "https://academy.laioutr.com/bereiche/fuer-entwickler",
          "position": 2
        },
        {
          "@type": "ListItem",
          "name": "Einstieg für Entwickler",
          "item": "https://academy.laioutr.com/leitfaeden/einstieg-fuer-entwickler",
          "position": 3
        },
        {
          "@type": "ListItem",
          "name": "Orchestr: Entities, Queries, Actions und Resolver",
          "item": "https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver",
          "position": 4
        }
      ]
    },
    {
      "@id": "https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver#/schema/question/1",
      "@type": "Question",
      "inLanguage": "de",
      "name": "Was unterscheidet Orchestr von GraphQL?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "<p>Beide fragen nur benötigte Felder ab. Orchestr läuft aber ausschließlich auf dem Server, in TypeScript ohne eigene Abfragesprache. Dadurch entstehen keine Abfrage-Kaskaden im Browser, und Backend-Zugangsdaten bleiben verborgen.</p>"
      }
    },
    {
      "@id": "https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver#/schema/question/2",
      "@type": "Question",
      "inLanguage": "de",
      "name": "Was passiert bei einem Wechsel des Shopsystems?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "<p>Die neue App liefert Resolver für dieselben Tokens. Sections und Seiten bleiben unverändert, weil sie nur kanonische Entities und Components kennen.</p>"
      }
    },
    {
      "@id": "https://academy.laioutr.com/artikel/orchestr-entities-queries-actions-und-resolver#/schema/question/3",
      "@type": "Question",
      "inLanguage": "de",
      "name": "Welche Informationen bekommt jeder Handler?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "<p>Jeder Handler erhält <code>clientEnv</code> mit Markt, Sprache, Währung und der Angabe, ob die Anfrage eine Content-Vorschau ist.</p>"
      }
    }
  ]
}
```
