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
}