GraphQL für Fortgeschrittene

Nutzung der GraphQL Schnittstelle für Entwickler mit Vorkenntnissen.

Informationen filtern

Durch Filterkriterien auf oberster Ebene, hinter productsearch bspw, definieren Sie, welche Objekte (hier Produkte) überhaupt von der Query zurückgegeben werden.

Sie können auch innerhalb eines Objekts (Produkts) die Informationen einschränken.

Im Beispiel definieren wir, das uns nur Produkteigenschaften (UniversalTypes) mit den Codes MT01-MPID und MT01-GTIN interessieren.

query q1 {
  productsearch(query: "gkfi") {
    content {
      productDetails {
        descriptions {
          descriptionShort
        }
      }
      features {
        universalTypes(filter: ["MT01-MPID", "MT01-GTIN"]) {
          name
          code
          value
        }
      }
    }
  }
}

Werte in bestimmter Sprache abfragen

Im UniversalTypeCenter wird die Sprache verwendet, die im Header Accept-Language mitgegeben wird.

Sie können Werte in einer bestimmten Sprache abfragen, indem Sie in runden Klammern die Sprache angeben.

Unterstützt wird aktuell: "de" und "en".

query q1 {
productsearch(query: "gkfi") {
    content {
      productDetails {
        descriptions {
          descriptionShort
        }
      }
      features {
        universalTypes {
         name(language: "en")
          code
          value
          unit {
            symbol
          }
        }
      }
    }
  }
}

Alias verwenden

Sie können beeinflussen, mit welchem Namen Felder im Ergebnis zurück gegeben werden, indem Sie Aliase verwenden. In einer Abfrage muss innerhalb einer "Gruppierung" eindeutig sein. Im Beispiel fragen wir den Namen des UniversalTypes in zwei Sprachen ab und verwenden Aliase, um die Felder unterschiedlich zu benennen.

query q1 {
productsearch(query: "gkfi") {
    content {
      productDetails {
        descriptions {
          descriptionShort
        }
      }
      features {
        universalTypes {
          name_en:name(language: "en")
          name_de:name(language: "de")
          code
          value
          unit {
            symbol
          }
        }
      }
    }
  }
}

Hier verwenden wir Aliase, um UniversalTypes in der Antwort zu benennen:

query q1 {
productsearch(query: "gkfi") {
    content {
      productDetails {
        descriptions {
          descriptionShort
        }
      }
      features {
        mpid: universalTypes(filter: "MT01-MPID") {
          value
        }
        gtin: universalTypes(filter: "MT01-GTIN") {
          value
        }
      }
    }
  }
}

Pagination

In the top part of the query we specify the page and the number of elements per page (size). You can request the total number of elements returned from the query and the boolean hasNextPage in the pageInfo section of a query.

query q1 {
  productsearch(query: "gkfi" page: {page: 0 size: 1}) {
    content {
      productDetails {
        descriptions {
          descriptionShort
        }
      }
    }
    pageInfo {
      hasNextPage
      totalCount
    }
  }
}

Facets

Can be used to auto generate filters in the frontend.

Query-Variablen

Es können Werte außerhalb der eigentlichen Query definiert werden und als Variablen in die Query reingegeben werden. Im Beispiel sieht man auch, wie zwei Mutations zusammengefasst werden und sich einen Satz Variablen teilen.

In GraphiQL werden die Variablen unten links definiert.

Query:

mutation updateAddressAndClientInfo($orderIds: [ID!]!, $address: OrderAddressInput!, $shoppingCartId: ID!, $clientInfo: ClientInfo!) {
upsertAddress(orderIds: $orderIds, address: $address) {
...orderContent
}
updateClientInfo(shoppingCartId: $shoppingCartId, clientInfo: $clientInfo) {
shoppingCartId
email
clientNumber
}
}

Fragments

Fragments werden genutzt, um gleiche Inhalte in verschiedenen Queries zu verwenden ohne sie mehrfach zu schreiben.

https://www.apollographql.com/docs/react/data/fragments/