Das Schema konfigurieren
Das Schema konfigurierenVerschachtelte Mutations verwenden

Verschachtelte Mutations verwenden

Verschachtelte Mutations ermöglichen es, Mutations auf einem anderen Typ als dem Root-Typ in GraphQL auszuführen.

Die folgende Query führt eine Standard-Mutation aus und verwendet dabei das Mutation-Feld updatePost vom Root-Typ:

mutation {
  updatePost(input: {
    id: 5,
    title: "New title"
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    post {
      title
    }
  }
}

Die obige Query kann auch über eine verschachtelte Mutation ausgeführt werden, bei der das Post-Objekt zuerst über das Feld post abgefragt wird und dann das Mutation-Feld update, das zum Typ Post gehört, auf das Post-Objekt angewendet wird:

mutation {
  post(by: {id: 5}) {
    update(input: {
      title: "New title"
    }) {
      status
      post {
        title
      }
    }
  }
}

Mutations können auch verschachtelt werden und dabei Daten am Ergebnis einer anderen Mutation ändern:

mutation {
  createPost(input: {
    title: "First title"
  }) {
    status
    postID
    post {
      update(input: {
        title: "Second title",
        contentAs: { html: "Some content" }
      }) {
        status
        post {
          title
          content
          addComment(input: {
            commentAs: { html: "My first comment" }
          }) {
            status
            commentID
            comment {
              content
              date
            }
          }
        }
      }
    }
  }
}

Vereinfachter Root-Typ

Verschachtelte Mutations ändern den Root-Typ von QueryRoot und MutationRoot zu einem einzigen Typ Root, der sowohl queries als auch Mutations verarbeitet:

Verschachtelte Mutations in der Schema-Dokumentation

Mutation-Felder visualisieren

Verwende den Voyager-Client, um zu sehen, welche die Mutation-Felder sind.

Mit verschachtelten Mutations kann jeder Typ im Schema sowohl Query- als auch Mutation-Felder enthalten. Um sie zu unterscheiden, wird der Beschreibung des Mutation-Felds das Label "[Mutation] " vorangestellt.

Diese sind zum Beispiel die Felder für den Typ Root:

Beschreibung für den Typ Root in der GraphiQL-Dokumentation

Verschachtelte Mutations in den Endpoints verwenden

Es gibt 2 Ebenen, auf denen du festlegen kannst, ob das Schema verschachtelte Mutations verwendet oder nicht. In Prioritätsreihenfolge:

1. In der Schema-Konfiguration

Ob ein Custom Endpoint oder eine Persisted Query verschachtelte Mutations verwendet, kann über die entsprechende Schema-Konfiguration festgelegt werden:

Mutations-Schema in der Schema-Konfiguration

2. Standardmodus, definiert in den Einstellungen

Wenn die Schema-Konfiguration den Wert "Default" hat, wird der in den Einstellungen definierte Modus verwendet:

Einstellungen für verschachtelte Mutations
Einstellungen für verschachtelte Mutations

Verschachtelte Mutations konfigurieren

Es gibt drei Verhaltensweisen, die du für das Schema wählen kannst:

1. Verschachtelte Mutations nicht aktivieren

Diese Option deaktiviert verschachtelte Mutations (verwendet stattdessen das Standardverhalten) für das Schema.

2. Verschachtelte Mutations aktivieren und alle Mutation-Felder im Root behalten

Wenn verschachtelte Mutations aktiviert sind, können Mutation-Felder dem Schema zweimal hinzugefügt werden:

  • einmal unter dem Typ Root
  • einmal unter dem spezifischen Typ

Zum Beispiel:

  • Root.updatePost
  • Post.update

Mit dieser Option werden die „duplizierten" Mutation-Felder des Root-Typs beibehalten.

3. Verschachtelte Mutations aktivieren und die redundanten Mutation-Felder aus dem Root entfernen

Gleiche Option wie oben, aber mit Entfernung der „duplizierten" Mutation-Felder aus dem Root-Typ.

Zum Beispiel:

  • Root.updatePost wird entfernt
  • Post.update ist verfügbar

GraphQL-Spezifikation

Diese Funktionalität ist derzeit nicht Teil der GraphQL-Spezifikation, wurde aber angefragt: