GraphQL - system typów
GraphQL jest językiem silnie typizowanym. Type System definiuje różne typy danych, które mogą być używane w aplikacji GraphQL. System typów pomaga zdefiniować schemat, który jest kontraktem między klientem a serwerem. Powszechnie używane typy danych GraphQL są następujące -
Sr.No. | Rodzaje i opis |
---|---|
1 | Scalar Przechowuje pojedynczą wartość |
2 | Object Pokazuje, jaki rodzaj obiektu można pobrać |
3 | Query Typ punktu wejścia do innych określonych typów |
4 | Mutation Punkt wejścia do manipulacji danymi |
5 | Enum Przydatne w sytuacji, gdy potrzebujesz, aby użytkownik wybrał z określonej listy opcji |
Typ skalarny
Typy skalarne to prymitywne typy danych, które mogą przechowywać tylko jedną wartość. Domyślne typy skalarne oferowane przez GraphQL to -
Int - Podpisana 32-bitowa liczba całkowita
Float - Podpisana wartość zmiennoprzecinkowa podwójnej precyzji
String - UTF - sekwencja 8 znaków
Boolean - Prawda czy fałsz
ID - Unikalny identyfikator, często używany jako unikalny identyfikator do pobierania obiektu lub jako klucz do pamięci podręcznej.
Składnia definiowania typu skalarnego jest następująca -
field: data_type
Podany poniżej fragment definiuje pole o nazwie greeting, które zwraca wartość String.
greeting: String
Rodzaj obiektu
Typ obiektu jest typem najczęściej używanym w schemacie i reprezentuje grupę pól. Każde pole wewnątrz typu obiektu jest mapowane na inny typ, umożliwiając w ten sposób zagnieżdżone typy. Innymi słowy, typ obiektowy składa się z wielu typów skalarnych lub typów obiektów.
Składnia do definiowania typu obiektu jest podana poniżej -
type object_type_name
{
field1: data_type
field2:data_type
....
fieldn:data_type
}
Możesz rozważyć następujący fragment kodu -
--Define an object type--
type Student {
stud_id:ID
firstname: String
age: Int
score:Float
}
--Defining a GraphQL schema--
type Query
{
stud_details:[Student]
}
Podany powyżej przykład definiuje obiekt typu danych Student. Pole stud_details w głównym schemacie zapytań zwróci listę obiektów Studentów.
Typ zapytania
Zapytanie GraphQL służy do pobierania danych. To jest jak żądanie zasobu w interfejsach API opartych na REST. Aby to uprościć, typ zapytania to żądanie wysłane z aplikacji klienckiej do serwera GraphQL. GraphQL używaSchema Definition Language (SDL)aby zdefiniować zapytanie. Typ zapytania jest jednym z wielu typów poziomu głównego w GraphQL.
Składnia definiowania zapytania jest następująca:
type Query {
field1: data_type
field2:data_type
field2(param1:data_type,param2:data_type,...paramN:data_type):data_type
}
Przykład definiowania zapytania -
type Query {
greeting: String
}
Typ mutacji
Mutacje to operacje wysyłane do serwera create, update lub deletedane. Są one analogiczne do czasowników PUT, POST, PATCH i DELETE, które wywołują interfejsy API oparte na REST.
Mutacja jest jednym z głównych typów danych w GraphQL. Typ Query definiuje punkty wejścia dla operacji pobierania danych, podczas gdy typ Mutation określa punkty wejścia dla operacji manipulacji danymi.
Składnia definiowania typu mutacji jest podana poniżej -
type Mutation {
field1: data_type
field2(param1:data_type,param2:data_type,...paramN:data_type):data_type
}
Na przykład możemy zdefiniować typ mutacji, aby dodać nowego Studenta, jak poniżej -
type Mutation {
addStudent(firstName: String, lastName: String): Student
}
Typ wyliczenia
Enum jest podobne do typu skalarnego. Wyliczenia są przydatne w sytuacji, gdy wartość pola musi pochodzić z określonej listy opcji.
Składnia definiowania typu wyliczenia to -
type enum_name{
value1
value2
}
Poniższy fragment ilustruje, jak można zdefiniować typ wyliczenia -
type Days_of_Week{
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
}
Typ listy
Listy mogą służyć do reprezentowania tablicy wartości określonego typu. Listy są definiowane za pomocą modyfikatora typu [], który otacza typy obiektów, skalary i wyliczenia.
Do zdefiniowania typu listy można użyć następującej składni -
field:[data_type]
Poniższy przykład definiuje listę rzeczy do zrobienia -
type Query {
todos: [String]
}
Typ niezawierający wartości null
Domyślnie każdy z podstawowych typów skalarnych może mieć wartość null. Innymi słowy, te typy mogą zwracać wartość określonego typu lub mogą nie mieć żadnej wartości. Aby zastąpić to ustawienie domyślne i określić, że pole musi być zdefiniowane, do typu można dołączyć wykrzyknik (!). Zapewnia to obecność wartości w wynikach zwracanych przez zapytanie.
Poniższa składnia może służyć do definiowania pola niedopuszczającego wartości null -
field:data_type!
W poniższym przykładzie stud_id jest zadeklarowane jako pole obowiązkowe.
type Student {
stud_id:ID!
firstName:String
lastName:String
fullName:String
college:College
}