.NET provider: semplifica l’accesso ai dati DB2 con NTi

In un momento in cui la connettività dei dati e la modularità delle applicazioni stanno diventando una priorità, l'innovazione negli strumenti di sviluppo si sta rivelando una risorsa importante per qualsiasi sviluppatore che voglia migliorare la produttività. In quest'ottica, Aumerial ha sviluppato NTi, progettato per consentire la connessione diretta a DB2 for i, senza sovrapposizioni o driver aggiuntivi, semplificando la creazione di applicazioni aziendali. Tradotto con www.DeepL.com/Translator (versione gratuita)

immagine illustrativa dell'articolo “.NET provider: semplifica l’accesso ai dati DB2 con NTi”

Schema di presentazione del progetto API .NET e Angular con NTi

Come sviluppatore, ho voluto dimostrare e condividere la facilità d'uso del provider di accesso ai dati NTi su un database DB2 for i, attraverso un breve articolo e un interessante progetto specifico: sviluppare un'API .NET in grado di comunicare con diversi database, DB2 for i su una partizione IBM i, e PostgreSQL containerizzato su un Raspberry pi collegato all'IBM i stesso.

L'idea è di sviluppare un'applicazione parallela lato client che possa recuperare dati in formato JSON direttamente da questa API e visualizzarli in modo dinamico, modulare e moderno.

Ho già realizzato alcune applicazioni front-end utilizzando Nuxt JS, ma non ho mai provato il framework Angular JS, quindi questo sarà un ottimo modo per scoprire TypeScript.

Creare l'API

Passo 1: Configurazione dell'ambiente di lavoro

Selezione del modello di progetto API ASP.NET Core in Visual Studio

Quindi inizio con l'ambiente ASP .NET API direttamente da Visual Studio, che offre una configurazione pronta all'uso, con strumenti chiave come Swagger, naturalmente integrato nell'ecosistema .NET e che consente di testare le proprie API in modo efficiente in modo nativo, senza dover ricorrere a POSTMAN.

Per consentire l'esecuzione di query SQL su qualsiasi database, è necessario disporre del provider di dati (driver) appropriato, ciascuno dei quali è conforme agli standard ADO.NET, che rappresentano un insieme di classi progettate per facilitare l'accesso ai dati per le applicazioni .NET.

Ciò consente di manipolare i dati (lettura, scrittura, aggiornamento, cancellazione) utilizzando oggetti e metodi già noti (supporto per i comandi SQL, gestione delle connessioni, esecuzione delle transazioni, manipolazione dei risultati delle query e così via).

Quindi ho scelto :

  • NTi per DB2 for i
  • NPGSQL** per PostgreSQL

Questi due provider sono referenziati in NuGet, la chiave di licenza NTi è già integrata in IBM i, quindi tutto ciò che devo fare è scaricarli come dipendenza del mio progetto e il gioco è fatto.

Elenco dei pacchetti installati nel progetto .NET (NTi, Dapper, Npgsql, Swagger, SQL Client)

Ho quindi installato Dapper, un ORM leggero e opensource progettato dal team di StackOverflow per interrogare questi due database; la mappatura automatica delle entità fa chiaramente risparmiare tempo.

Ora sono in grado di impostare le operazioni CRUD e di evidenziare la semplicità di esecuzione delle query. In particolare con NTi, che si connette a DB2 for i senza driver, senza overlay e senza vincoli, è sufficiente configurare la catena di connessione nel programma.

Schema di un’applicazione .NET che utilizza NTi per accedere a IBM i

Passo 2: modellazione dei dati e configurazione dei servizi

Una volta integrati i fornitori di dati necessari al mio progetto, inizio a lavorare sulla struttura interna dell'API.

Inizio con la definizione dei vari modelli di dati, per garantire che la loro gestione e gli scambi tra l'API e i due database siano strutturati.

Per ogni database, creo servizi di connessione separati, utilizzando i due provider di dati menzionati in precedenza, al fine di stabilire una connessione sicura ed efficiente, che consenta all'API di eseguire query SQL.

DB2Service:

Codice C# del servizio di connessione DB2 for i con NTi

PGSQLService:

Codice C# del servizio di connessione PostgreSQL con Npgsql

Con i modelli e i servizi al loro posto, posso creare i controllori. Questi elaborano le richieste in arrivo, eseguono la logica necessaria (CRUD) e restituiscono le risposte appropriate ai clienti.

Richiesta GET per recuperare le categorie:

Controller C# NorthwindCategories con metodo GET per recuperare le categorie

Richiesta POST di aggiungere una nuova categoria:

Controller C# NorthwindCategories con metodo POST per aggiungere una categoria

Per garantire che le richieste HTTP siano indirizzate correttamente alle azioni dei controllori, ho creato un preciso sistema di rotte. Le rotte associano URL specifici alle azioni del controllore, assicurando che ogni richiesta raggiunga la destinazione specificata nell'API.

Risultato della richiesta GET in Swagger:

Esempio di esecuzione della richiesta GET delle categorie in Swagger

Schema di richiesta API per l'aggiunta di una nuova categoria (POST)

Documentazione Swagger degli endpoint NorthwindCategories (GET e POST)

Infine, per consentire all'applicazione esterna di recuperare i dati dall'API .NET, aggiungo una configurazione CORS (Cross Origin Resource Sharing) per autorizzare le richieste cross-domain in modo sicuro, garantendo così che l'applicazione Angular possa accedere alle risorse dell'API senza violare la stessa politica di origine.

Con l'API configurata e funzionante, ora è pronta all'uso e apre la strada alla fase successiva, la creazione dell'applicazione front-end.

Creazione dell'applicazione Angular

Passo 1: Configurazione dell'ambiente Angular

Inizio configurando l'ambiente di sviluppo necessario per Angular utilizzando Node.JS e NPM e installando i pacchetti Angular Cli. Con il modello di progettazione MVVM, l'idea è di separare la logica di visualizzazione dalla logica di business. Questa volta utilizzo Visual Studio Code, che dispone di una serie di estensioni pratiche che mi consentono di sviluppare più rapidamente.

Passo 2: creazione di servizi e modelli di dati.

Allo stesso modo dell'API .NET, creo anche modelli di dati TypeScript per gestire, memorizzare e utilizzare in modo più efficiente questi dati nell'applicazione.

Codice TypeScript del modello dati Angular Category

La comunicazione con l'API .NET avviene tramite i servizi offerti da Angular, utilizzando il protocollo HTTP per lo scambio di dati in formato JSON.

Importazioni Angular e configurazione dei moduli necessari

Quindi creo diversi servizi che fungono da ponte tra l'applicazione Angular e l'API .NET. Ogni metodo utilizza un URL specifico e ora posso chiamare i metodi corrispondenti a ogni servizio direttamente da ogni componente Angular.

Angular CategoriesService con metodi per consumare l’API .NET

Passo 3: Sviluppo di componenti

Il principio e l'interesse di Angular risiedono nell'uso dei componenti, costituiti da un file TypeScript che gestisce la manipolazione dei dati e la logica aziendale, un file HTML per i modelli e un file css o scss per lo stile. Questi componenti possono essere annidati l'uno nell'altro, favorendo la modularità.

Codice HTML Angular che mostra la struttura della pagina Northwind

Creando componenti separati per le diverse parti dell'interfaccia utente, ho potuto chiamare i metodi definiti nei servizi Angular per recuperare i dati dall'API.

Codice TypeScript Angular per caricare e aggiungere categorie

In questo modo è possibile creare facilmente grafici o calcoli di varia complessità per soddisfare esigenze specifiche, beneficiando dell'aggiornamento dinamico dell'interfaccia utente e di tempi di risposta estremamente ridotti.

Creazione di un grafico a barre per recuperare il numero di prodotti per categoria:

Metodo Angular per creare un grafico a barre delle categorie

visuale del diagramma a bastoni, dalla mia applicazione frontale Angular:

Interfaccia Angular con grafico a barre dei prodotti per categoria

visuale di un grafico a torta che mostra le scorte di prodotti:

Interfaccia Angular con grafico a torta delle scorte di prodotti

Conclusione

Questo progetto non solo illustra i guadagni in termini di produttività e modularità offerti dall'ecosistema .NET, ma soprattutto è una dimostrazione eloquente della semplicità e dell'efficacia di NTi nell'accesso ai dati su IBM i e nella creazione di applicazioni thick client.

Con una buona comprensione dei principi della programmazione orientata agli oggetti, degli standard ADO .Net e, naturalmente, del linguaggio SQL, qualunque sia il DBMS sottostante, lo sviluppo moderno e la comunicazione con vari database diventano davvero accessibili, facili e privi di vincoli.

Quello che ho rapidamente progettato è una perfetta illustrazione di una delle innumerevoli possibilità offerte dal nostro provider di dati Nti, che sottolinea l'importanza di avere un accesso semplificato e rapido alle risorse di sistemi robusti come l'IBM i. Queste risorse diventano non solo accessibili ma anche pienamente sfruttabili per lo sviluppo di applicazioni aziendali specifiche per ogni esigenza, senza alcuna complessità aggiuntiva.

La creazione di un'API .NET in grado di comunicare simultaneamente con DB2 for i su una partizione IBM i e con un'istanza PostGreSQL containerizzata su un Raspberry Pi collegato all'IBM i illustra chiaramente la versatilità e l'efficienza del nostro data provider NTi nell'orchestrare una comunicazione perfetta, fondendo abilmente risorse tradizionali e moderne".


Quentin Destrade