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
}