Hasura ist eine meiner bevorzugten Methoden, um eine verwaltete GraphQL-API für meine Anwendungen zu erstellen. Ich finde sie einfach und unkompliziert und sie eignet sich für eine Vielzahl von Anwendungsfällen. Seitdem ich mit Hasura arbeite, ist jedoch immer wieder dieselbe Frage aufgetaucht: Wie sollen wir ein Array erstellen? Angesichts der Tatsache, dass array und map im Dropdown-Menü type für Zeilen nicht vorhanden sind, wie lässt sich dies am besten bewerkstelligen?
Ehrlich gesagt, lässt sich das Konzept eines Arrays auf verschiedene Weise in Hasura abbilden, und im Folgenden werden die verschiedenen Ansätze erläutert. Meine persönliche Präferenz ist die letzte Option, die wir behandeln werden, JSONB, aber wir werden auch andere Optionen durchgehen, falls Sie einen anderen Weg einschlagen möchten, da jede Option leicht unterschiedliche Vorteile hat.
Methode 1: Literale Arrays, manuell
Hasura bietet „array“ nicht als type an, aber wir können ein Array von Strings erstellen, indem wir „Text“ auswählen und am Ende eckige Klammern hinzufügen, wie hier:
Was wir erhalten, ist text[], und wir werden aufgefordert, Arrays auf eine von zwei Arten zu erstellen.
["one", "two"]
// or
{"one", "two"}
![insertion of row with type {"foo", "bar"} or ["foo", "bar"]](https://i0.wp.com/css-tricks.com/wp-content/uploads/2020/12/CleanShot-2020-12-12-at-20.00.50@2x.png?resize=1034%2C118&ssl=1)
Methode 2: Beziehung erstellen
Wir können auch eine Beziehung zu einer anderen Tabelle erstellen, die eine Reihe von Textelementen enthält. Dazu erstellen Sie eine Zeile mit dem Typ Text.
Wir erstellen außerdem eine neue Tabelle über die Schaltfläche „Tabelle hinzufügen“ in der Seitenleiste und erstellen eine sehr einfache Zeile mit einem eindeutigen Schlüssel für den benötigten type – Text, Integer oder was auch immer für die Daten notwendig ist.
Klicken Sie nun auf den Tab „Beziehungen“. Wählen Sie in der Tabelle die Option „Array-Beziehung“, geben Sie ihr einen Namen und verweisen Sie auf die ursprüngliche Tabelle, die erstellt wurde.
Die id der ersten Tabelle sollte eine Beziehung zur id der zweiten gerade erstellten Tabelle haben.

Sobald sie gespeichert ist, sollten Sie die Array-Beziehung im selben Beziehungs-Tab in der Tabelle sehen, mit einem Pfeil, der die Richtung der Beziehung angibt.
users.gameId → favoriteGames.id
Jetzt können wir das Array im Tab „GraphiQL“ abfragen.

Methode 3: JSONB
Im Folgenden stelle ich eine meiner Lieblingsmethoden zur Erstellung eines Arrays in Hasura vor. Ich mag sie, weil sie sehr performant sein kann. Wir können den Typ „JSONB“ verwenden und durch Auswahl von JSONB aus dem Dropdown-Menü ein Array erstellen. Dann werden wir ähnlich wie bei der Option text[] aufgefordert.

Wenn es ausgefüllt ist, sieht es so aus:

Von dort aus können wir die Arrays nicht nur wie oben in Ihre Abfrage einfügen, sondern auch nach Tags über mehrere Indizes suchen, und der GraphiQL-Tab macht die Erkundung einfach. Sehen Sie, wie ich die Tags nach dem filtere, was „animation“ enthält.
query MyQuery {
codesamples(where: {tags: {_contains: "animation"}}) {
userId
name
id
}
}

Eine solche Abfrage ist jedoch nicht unbedingt sofort performant, insbesondere bei großen Datenmengen. Glücklicherweise können wir definieren, welche Felder wir indizieren möchten. Wählen Sie auf dem Tab „Daten“ oben die Gruppe „SQL“ im Seitenbereich aus, und in diesem Bereich können wir definieren, welche Felder wir indizieren möchten, um eine performante Abfrage zu gewährleisten. In diesem Beispiel erstellen wir einen Index für das Feld „tags“.
create index codesample_gin on codesamples using gin(tags)
Dies führt die Abfrage aus und indiziert diese Abfrage, was sie zukünftig performanter macht.
Zusammenfassung
Hasura bietet eine wunderbare Entwicklererfahrung, um schnell und einfach nutzbare GraphQL-APIs einzurichten. Für diejenigen, die daran interessiert sind, Arrays mit Hasura einzurichten, hoffe ich, dass dieser Artikel hilfreich ist.
Vielen Dank an Adron Hall von Hasura, der diesen Beitrag Korrektur gelesen hat.