Nel post precedente abbiamo introdotto GraphQL e ne abbiamo definito la terminologia.
In questo secondo post ne analizzeremo le caratteristiche principali.
GraphQL nasce come alternativa a REST, e si pone come obiettivo quello di fornire al client solo i dati di cui ha bisogno. Una delle sue caratteristiche è la possibilità di ottenere dati da piu sorgenti restituendoli in una sola chiamata API.
Il suo utilizzo è particolarmente indicato all’interno di applicazioni mobile (Android e IOS) dove spesso la complessità delle chiamate REST aumenta esponenzialmente: con GraphQL è possibile ottenere tutti i dati con una singola query. E questo lo rende molto piu performante rispetto a N chiamate REST.
Per poter utilizzare GraphQL è necessario che il server API lo supporti: il server dovrebbe avere uno schema nel quale vengono definite quali sono le operazioni che potranno essere accettate (query, mutation, subscription).
La capillarità di questo schema consente di definire anche quali campi possono essere ammessi nella richiesta. Nella query inviata al server verranno inviat i campi che vogliamo effettivamente ottenere.
Nel caso in cui sia possibile ottenerli, il server ci risponderà con i dati con una risposta JSON.
Tutte le operazioni che sono descritte nello schema del server GraphQL potranno essere eseguite inviando una richiesta con contenente queste informazioni. In pratica, la tipologia della risposta viene definita in fase di richiesta.
Supponiamo ad esempio di avere un server GraphQL e di voler ottenere come risposta il nome ed il cognome di un utente. Un esempio di query potrebbe essere:
query getUser {
user {
firstName
lastName
}
}Nella query abbiamo dichiarato il tipo di risposta che ci vorremmo aspettare. Mandadola al server quello che otterremo sarà una risposta in formato JSON ad esempio del tipo:
"data": {
"user": {
"firstName": "John",
"lastName": "Doe"
}
}La risposta è molto simile a quella di chiamata REST, con la differenza che la risposta è stata modellata in base alla richiesta. Tutto questo può essere fatto agevolmente utilizzando per esempio Apollo Client.
Nel prossimo post vedremo come possiamo utilizzare Apollo Client per effettuara la fetch dei dati da un server