GraphQL - Sistema de Tipo

GraphQL é uma linguagem fortemente tipada. Tipo System define vários tipos de dados que podem ser usados ​​em um aplicativo GraphQL. O sistema de tipos ajuda a definir o esquema, que é um contrato entre cliente e servidor. Os tipos de dados GraphQL comumente usados ​​são os seguintes -

Sr. Não. Tipos e descrição
1

Scalar

Armazena um único valor

2

Object

Mostra que tipo de objeto pode ser obtido

3

Query

Tipo de ponto de entrada para outros tipos específicos

4

Mutation

Ponto de entrada para manipulação de dados

5

Enum

Útil em uma situação em que você precisa que o usuário escolha em uma lista de opções prescrita

Tipo Escalar

Tipos escalares são tipos de dados primitivos que podem armazenar apenas um único valor. Os tipos escalares padrão que o GraphQL oferece são -

  • Int - Inteiro assinado de 32 bits

  • Float - Valor de ponto flutuante de precisão dupla sinalizado

  • String - UTF - sequência de 8 caracteres

  • Boolean - Verdadeiro ou falso

  • ID - Um identificador exclusivo, geralmente usado como um identificador exclusivo para buscar um objeto ou como a chave para um cache.

A sintaxe para definir um tipo escalar é a seguinte -

field: data_type

O trecho fornecido abaixo define um campo denominado saudação que retorna o valor String.

greeting: String

Tipo de objeto

O tipo de objeto é o tipo mais comum usado em um esquema e representa um grupo de campos. Cada campo dentro de um tipo de objeto é mapeado para outro tipo, permitindo, assim, tipos aninhados. Em outras palavras, um tipo de objeto é composto de vários tipos escalares ou tipos de objeto.

A sintaxe para definir um tipo de objeto é fornecida abaixo -

type object_type_name
{
   field1: data_type
   field2:data_type 
   ....
   fieldn:data_type
}

Você pode considerar o seguinte snippet de código -

--Define an object type--

type Student {
   stud_id:ID
   firstname: String
   age: Int
   score:Float
}

--Defining a GraphQL schema--  

type Query
{
   stud_details:[Student]
}

O exemplo fornecido acima define um tipo de dados de objeto Student. O campo stud_details no esquema raiz da Consulta retornará uma lista de objetos de Aluno.

Tipo de consulta

Uma consulta GraphQL é usada para buscar dados. É como solicitar um recurso em APIs baseadas em REST. Para simplificar, o tipo Consulta é a solicitação enviada de um aplicativo cliente ao servidor GraphQL. GraphQL usa oSchema Definition Language (SDL)para definir uma consulta. O tipo de consulta é um dos muitos tipos de nível raiz no GraphQL.

A sintaxe para definir uma consulta é a seguinte -

type Query {
   field1: data_type
   field2:data_type
   field2(param1:data_type,param2:data_type,...paramN:data_type):data_type
}

Um exemplo de definição de uma consulta -

type Query  {
   greeting: String
}

Tipo de Mutação

Mutações são operações enviadas ao servidor para create, update ou deletedados. Esses são análogos aos verbos PUT, POST, PATCH e DELETE para chamar APIs baseadas em REST.

Mutation é um dos tipos de dados de nível raiz no GraphQL. O tipo Query define os pontos de entrada para operações de busca de dados, enquanto o tipo Mutation especifica os pontos de entrada para operações de manipulação de dados.

A sintaxe para definir um tipo de mutação é fornecida abaixo -

type Mutation {
   field1: data_type
   field2(param1:data_type,param2:data_type,...paramN:data_type):data_type 
}

Por exemplo, podemos definir um tipo de mutação para adicionar um novo aluno conforme abaixo -

type Mutation {
   addStudent(firstName: String, lastName: String): Student
}

Tipo Enum

Um Enum é semelhante a um tipo escalar. Enums são úteis em uma situação em que o valor de um campo deve ser de uma lista de opções prescrita.

A sintaxe para definir um tipo Enum é -

type enum_name{
   value1
   value2
}

O snippet a seguir ilustra como um tipo de enum pode ser definido -

type Days_of_Week{
   SUNDAY
   MONDAY
   TUESDAY
   WEDNESDAY
   THURSDAY
   FRIDAY
   SATURDAY
}

Tipo de lista

As listas podem ser usadas para representar uma matriz de valores de tipo específico. As listas são definidas com um modificador de tipo [] que envolve tipos de objetos, escalares e enums.

A seguinte sintaxe pode ser usada para definir um tipo de lista -

field:[data_type]

O exemplo a seguir define um tipo de lista todos -

type Query {
   todos: [String]
}

Tipo Não Anulável

Por padrão, cada um dos tipos escalares principais pode ser definido como nulo. Em outras palavras, esses tipos podem retornar um valor do tipo especificado ou não podem ter nenhum valor. Para substituir esse padrão e especificar que um campo deve ser definido, um ponto de exclamação (!) Pode ser anexado a um tipo. Isso garante a presença de valor nos resultados retornados pela consulta.

A sintaxe a seguir pode ser usada para definir um campo não anulável -

field:data_type!

No exemplo abaixo, stud_id é declarado como um campo obrigatório.

type Student {
   stud_id:ID!
   firstName:String
   lastName:String
   fullName:String
   college:College
}