Creare API GraphQL con ASP.NET Core e HotChocolate

di Moreno Gentili, in ASP.NET Core,

Nel corso degli anni, su ASPItalia.com abbiamo spesso mostrato come usare ASP.NET Core Web API per realizzare servizi REST e consentire a sviluppatori di terze parti di integrarsi con la nostra applicazione. Una tecnologia tutt'ora molto valida, facile da programmare e ancor più da consumare grazie alla documentazione offerta automaticamente dal pacchetto Swagger/OpenAPI (https://www.aspitalia.com/script/1301/Documentare-Web-API-Swagger-ASP.NET-Core-2.1.aspx).

Il mondo dello sviluppo client è estremamente ricco e vario, e gode dei contributi di vari membri della community, ciascuno con un proprio background e con proprie idee originali. Così, grazie a questi contributi, dopo quasi due decenni dalla sua concezione iniziale, REST viene affiancato da altre soluzioni tecnologiche.

Con ASP.NET Core 3.0 abbiamo iniziato a parlare di gRPC, realizzato da Google e basato su un protocollo binario ad alte prestazioni e bassa latenza (https://www.aspitalia.com/articoli/asp.net-core3/anteprima-aspnet-core-3-p-3.aspx#title_1).

Inoltre abbiamo GraphQL, concepito inizialmente da Facebook. Presentato pubblicamente nel 2015, è stato ideato per incontrare il favore degli sviluppatori frontend più esigenti.

GraphQL sta iniziando a riscuotere un discreto seguito, come indicato dai trend di ricerca. A partire dal 2018, il progetto è stato adottato dalla Linux Foundation che accelera lo sviluppo della sua specifica. Dato che è language-agnostic, la specifica di GraphQL viene implementata su un numero sempre crescente di piattaforme, compreso ASP.NET Core.

Figura 1

In questo articolo vedremo come realizzare un'API GraphQL e come può essere sfruttato in un'applicazione ASP.NET Core per realizzare una API per il web. Useremo il pacchetto HotChocolate per consentire ai client di inviare query e mutare i dati. Vedremo come sia semplice integrare questa tecnologia con Entity Framework Core, che si occuperà di recuperare materialmente i dati.

Uno sguardo oltre REST

Coloro che hanno già usato ASP.NET Core Web API troveranno GraphQL semplice da imparare. L'applicazione client interagirà sempre e comunque usando richieste HTTP, a cui il server risponderà con dati in formato JSON. L'applicazione client può essere realizzata con una tecnologia qualsiasi, in quanto GraphQL non limita in alcun modo la scelta dei framework frontend: possiamo usare jQuery, Angular, Vue.js, o qualsiasi altra soluzione tecnica reputiamo idonea. GraphQL può anche essere usato per ottenere dati da un'applicazione mobile nativa o ibrida.

A differenza di una web API REST, GraphQL non sfrutta né i percorsi né i verbi HTTP per indicare il tipo di operazione. Invece, ogni richiesta GraphQL viene inviata con il verbo POST allo stesso endpoint, come illustrato nell'immagine seguente.

Figura 2

Con GraphQL, ciò che differenzia un'operazione dall'altra è quindi il contenuto della richiesta POST, che esamineremo di seguito.

La prima query GraphQL

Uno dei migliori pregi di GraphQL è che permette al client di decidere la forma delle strutture dati che vuole ottenere dal server. Componendo opportunamente la query, il client può indicare precisamente quali campi e quali tipi correlati dovranno essergli restituiti.

Vediamo un esempio: con la seguente query GraphQL, il client interroga i products e indica di voler ottenere solo i campi id, name e price di ciascun oggetto trovato. Inoltre, ottiene il campo name dall'oggetto category relazionato a esso.

query {
  products {
    id
    name,
    price
    category {
      name
    }
  }
}

Ogni campo deve essere esplicitamente menzionato nella query perché GraphQL non prevede alcuna wildcard come il tradizionale simbolo asterisco che invece può essere usato in una query SQL come SELECT * FROM Tabella.

In questo modo, la risposta fornita dal server conterrà solo i campi effettivamente richiesti dal client e ciò migliorerà i tempi di trasferimento, soprattutto se consideriamo che con una REST API, invece, il client potrebbe aver bisogno di inviare svariate richieste HTTP per ottenere i vari oggetti relazionati.

Figura 3

6 pagine in totale: 1 2 3 4 5 6
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Top Ten Articoli

Articoli via e-mail

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

In primo piano

I più letti di oggi

In evidenza

Misc