Tipi di Base in GraphQL: Guida Completa
In GraphQL, i tipi di base (o scalari) sono fondamentali per la definizione dello schema, poichĂŠ descrivono la forma dei dati che possono essere richiesti o modificati attraverso le query, le mutazioni e le subscriptions. Utilizzare i tipi corretti garantisce la coerenza dei dati e migliora la chiarezza e la manutenibilitĂ dello schema. In questo articolo esploreremo i tipi di base in GraphQL, come utilizzarli e le loro applicazioni pratiche.
Tipi di Base in GraphQL
I tipi di base o scalari in GraphQL rappresentano singoli valori. Questi tipi sono analoghi ai tipi primitivi in altri linguaggi di programmazione e sono utilizzati per definire i campi che non sono relazioni tra tipi complessi.
1. Int
Int
rappresenta un numero intero a 32 bit con segno. Può essere utilizzato per rappresentare valori numerici senza decimali come contatori, indici o ID numerici.
Esempio di utilizzo di Int
type User {
id: Int!
age: Int
}
In questo esempio:
- Il campo
id
è un intero obbligatorio (Int!
), mentreage
è opzionale.
2. Float
Float
rappresenta un numero in virgola mobile a precisione doppia, utile per valori numerici con decimali come prezzi o misure.
Esempio di utilizzo di Float
type Product {
id: ID!
price: Float!
}
In questo esempio, price
è un campo obbligatorio di tipo Float
che rappresenta il prezzo di un prodotto.
3. String
String
rappresenta una sequenza di caratteri testuali. Ă utilizzato per campi come nomi, descrizioni, email e altri dati testuali.
Esempio di utilizzo di String
type User {
id: ID!
name: String!
email: String!
}
In questo esempio, name
e email
sono campi di tipo String
che rappresentano rispettivamente il nome e lâemail di un utente.
4. Boolean
Boolean
rappresenta un valore di tipo vero/falso (true
o false
). à utile per rappresentare campi che indicano lo stato, come se un elemento è attivo o meno.
Esempio di utilizzo di Boolean
type Task {
id: ID!
description: String!
completed: Boolean!
}
In questo esempio, il campo completed
indica se unâattività è stata completata o meno.
5. ID
ID
rappresenta un identificatore univoco e viene generalmente utilizzato per campi che devono identificare in modo univoco un oggetto, come ID di utenti, prodotti o post. Ă rappresentato come una String
, ma semanticamente è utilizzato per rappresentare identificatori.
Esempio di utilizzo di ID
type User {
id: ID!
username: String!
}
In questo esempio, id
è un identificatore univoco di tipo ID
per lâutente.
6. Enum (Enum Types)
Gli enum sono tipi che definiscono un insieme ristretto e predefinito di valori possibili. Sono utili quando un campo può assumere solo un insieme di valori limitato.
Esempio di utilizzo di un Enum
enum UserRole {
ADMIN
USER
GUEST
}
type User {
id: ID!
role: UserRole!
}
In questo esempio:
- Il tipo
UserRole
definisce un insieme di ruoli (ADMIN
,USER
,GUEST
). - Il campo
role
di un utente può avere solo uno di questi valori.
Creare Tipi Personalizzati con i Tipi Base
Oltre ai tipi di base, GraphQL consente di creare tipi personalizzati, combinando i tipi scalari per definire oggetti complessi.
Esempio di Tipo Complesso
type Post {
id: ID!
title: String!
content: String!
author: User!
views: Int
}
In questo esempio, il tipo Post
combina diversi tipi scalari (ID
, String
, Int
) e un tipo complesso (User
) per descrivere un post su un blog.
NullabilitĂ nei Tipi di Base
In GraphQL, i campi possono essere nullabili o non nullabili. Un campo non nullabile è indicato con il simbolo !
e significa che quel campo deve sempre avere un valore. Se non è presente il !
, il campo può restituire null
.
Esempio di Campo Non Nullabile
type User {
id: ID!
name: String!
email: String
}
In questo esempio:
id
ename
sono campi non nullabili, quindi devono sempre essere presenti.email
può essere opzionale e restituirenull
.
Tipi di Collezioni: Liste e Array
Oltre ai tipi scalari, GraphQL supporta liste di elementi. Una lista è una collezione di valori di un determinato tipo e viene rappresentata con le parentesi quadre []
.
Esempio di Lista
type Query {
users: [User!]!
}
In questo esempio:
- Il campo
users
restituisce una lista di oggetti di tipoUser
. [User!]!
significa che la lista stessa non può esserenull
, e nessun elemento della lista può esserenull
.
Esempio di Lista di Tipi Base
type Query {
numbers: [Int!]!
}
In questo esempio:
numbers
restituisce una lista di numeri interi, e ogni numero nella lista non può esserenull
.
Usare le Variabili nei Tipi Base
Le variabili nelle query e mutazioni GraphQL permettono di fornire input dinamici ai campi che utilizzano tipi scalari. Le variabili sono particolarmente utili nelle mutazioni e nelle query che richiedono filtri o parametri.
Esempio di Query con Variabili
query getUser($userId: ID!) {
user(id: $userId) {
id
name
email
}
}
Esempio di Mutazione con Variabili
mutation createUser($name: String!, $email: String!) {
createUser(name: $name, email: $email) {
id
name
email
}
}
Best Practices per lâUtilizzo dei Tipi Base
- Usare i Tipi PiĂš Restrittivi Possibili: Definire i campi come non nullabili quando possibile, in modo da garantire che il client riceva sempre dati completi e coerenti.
- Usare Enum per Valori Fissi: Quando un campo può assumere solo un insieme ristretto di valori, utilizza un enum per garantire che vengano forniti solo valori validi.
- Liste di Oggetti Non Nullabili: Quando utilizzi liste, specifica se gli elementi della lista possono essere
null
o meno, per evitare ambiguitĂ nel comportamento. - Validazione degli Input: Verifica sempre i valori passati ai campi durante le mutazioni, soprattutto quando accettano input di tipo
String
oInt
.
Conclusione
I tipi di base in GraphQL sono la fondazione su cui costruire uno schema solido e ben strutturato. Usare correttamente tipi scalari come Int
, Float
, String
, Boolean
, e ID
, insieme agli enum, garantisce che i dati siano chiari, coerenti e facili da gestire. Inoltre, combinando questi tipi di base con tipi complessi personalizzati, puoi modellare dati flessibili e potenti per la tua API.