GraphQL - Typ System
GraphQL ist eine stark typisierte Sprache. Das Typsystem definiert verschiedene Datentypen, die in einer GraphQL-Anwendung verwendet werden können. Das Typsystem hilft bei der Definition des Schemas, bei dem es sich um einen Vertrag zwischen Client und Server handelt. Die häufig verwendeten GraphQL-Datentypen sind wie folgt:
Sr.Nr. | Typen & Beschreibung |
---|---|
1 | Scalar Speichert einen einzelnen Wert |
2 | Object Zeigt an, welche Art von Objekt abgerufen werden kann |
3 | Query Einstiegspunkttyp zu anderen spezifischen Typen |
4 | Mutation Einstiegspunkt für die Datenmanipulation |
5 | Enum Nützlich in Situationen, in denen der Benutzer aus einer vorgeschriebenen Liste von Optionen auswählen muss |
Skalartyp
Skalartypen sind primitive Datentypen, die nur einen einzigen Wert speichern können. Die von GraphQL angebotenen Standard-Skalartypen sind:
Int - Signierte 32-Bit-Ganzzahl
Float - Vorzeichenbehafteter Gleitkommawert mit doppelter Genauigkeit
String - UTF - 8-stellige Sequenz
Boolean - Richtig oder falsch
ID - Eine eindeutige Kennung, die häufig als eindeutige Kennung zum Abrufen eines Objekts oder als Schlüssel für einen Cache verwendet wird.
Die Syntax zum Definieren eines Skalartyps lautet wie folgt:
field: data_type
Das unten angegebene Snippet definiert ein Feld mit dem Namen greeting, das den String-Wert zurückgibt.
greeting: String
Objekttyp
Der Objekttyp ist der am häufigsten in einem Schema verwendete Typ und repräsentiert eine Gruppe von Feldern. Jedes Feld innerhalb eines Objekttyps wird einem anderen Typ zugeordnet, wodurch verschachtelte Typen zugelassen werden. Mit anderen Worten, ein Objekttyp besteht aus mehreren Skalartypen oder Objekttypen.
Die Syntax zum Definieren eines Objekttyps ist unten angegeben -
type object_type_name
{
field1: data_type
field2:data_type
....
fieldn:data_type
}
Sie können das folgende Code-Snippet betrachten -
--Define an object type--
type Student {
stud_id:ID
firstname: String
age: Int
score:Float
}
--Defining a GraphQL schema--
type Query
{
stud_details:[Student]
}
Das oben angegebene Beispiel definiert einen Objektdatentyp Student. Das Feld stud_details im Stammabfrageschema gibt eine Liste der Student-Objekte zurück.
Abfragetyp
Eine GraphQL-Abfrage wird zum Abrufen von Daten verwendet. Es ist wie das Anfordern einer Ressource in REST-basierten APIs. Zur Vereinfachung ist der Abfragetyp die Anforderung, die von einer Clientanwendung an den GraphQL-Server gesendet wird. GraphQL verwendet dieSchema Definition Language (SDL)eine Abfrage definieren. Der Abfragetyp ist einer der vielen Stammtypen in GraphQL.
Die Syntax zum Definieren einer Abfrage lautet wie folgt:
type Query {
field1: data_type
field2:data_type
field2(param1:data_type,param2:data_type,...paramN:data_type):data_type
}
Ein Beispiel für die Definition einer Abfrage -
type Query {
greeting: String
}
Mutationstyp
Mutationen sind Operationen, die an den Server gesendet werden create, update oder deleteDaten. Diese sind analog zu den Verben PUT, POST, PATCH und DELETE, um REST-basierte APIs aufzurufen.
Mutation ist einer der Datentypen auf Stammebene in GraphQL. Der Abfragetyp definiert die Einstiegspunkte für Datenabrufoperationen, während der Mutationstyp die Einstiegspunkte für Datenmanipulationsoperationen angibt.
Die Syntax zum Definieren eines Mutationstyps ist unten angegeben -
type Mutation {
field1: data_type
field2(param1:data_type,param2:data_type,...paramN:data_type):data_type
}
Zum Beispiel können wir einen Mutationstyp definieren, um einen neuen Schüler wie folgt hinzuzufügen:
type Mutation {
addStudent(firstName: String, lastName: String): Student
}
Aufzählungstyp
Eine Aufzählung ähnelt einem Skalartyp. Aufzählungen sind in Situationen nützlich, in denen der Wert für ein Feld aus einer vorgeschriebenen Liste von Optionen stammen muss.
Die Syntax zum Definieren eines Aufzählungstyps lautet -
type enum_name{
value1
value2
}
Das folgende Snippet zeigt, wie ein Aufzählungstyp definiert werden kann:
type Days_of_Week{
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
}
Listentyp
Listen können verwendet werden, um ein Array von Werten eines bestimmten Typs darzustellen. Listen werden mit einem Typmodifikator [] definiert, der Objekttypen, Skalare und Aufzählungen umschließt.
Die folgende Syntax kann verwendet werden, um einen Listentyp zu definieren:
field:[data_type]
Das folgende Beispiel definiert einen Listentyp todos -
type Query {
todos: [String]
}
Nicht nullbarer Typ
Standardmäßig kann jeder der Kernskalartypen auf Null gesetzt werden. Mit anderen Worten, diese Typen können entweder einen Wert des angegebenen Typs zurückgeben oder sie können keinen Wert haben. Um diese Standardeinstellung zu überschreiben und anzugeben, dass ein Feld definiert werden muss, kann ein Ausrufezeichen (!) An einen Typ angehängt werden. Dadurch wird sichergestellt, dass in den von der Abfrage zurückgegebenen Ergebnissen ein Wert vorhanden ist.
Die folgende Syntax kann verwendet werden, um ein nicht nullbares Feld zu definieren:
field:data_type!
Im folgenden Beispiel wird stud_id als Pflichtfeld deklariert.
type Student {
stud_id:ID!
firstName:String
lastName:String
fullName:String
college:College
}