lunedì 4 novembre 2024

C# Introduzione alla creazione delle web api con .Net 8



In questo articolo vedremo come realizzare delle web api, ossia un progetto di tipo servizio, che espone dei metodi per la gestione delle operazioni CRUD sui dati.
Quado si realizzano applicazioni può capitare di realizzare dei servizi che trovandosi tra una fonte dati e l’applicativo vero e proprio (sito web, o applicazione per sistema operativo) permette la gestone delle informazioni tra le due parti.
Per chi sviluppa con la tecnologia .Net, sia con il linguaggio VB.Net e sia con il linguaggio C#, conoscerà i servizi web services, quelli soap di tipo ASMX, e successiva l’evoluzione con i servizi di tipo “Windows Comunication Foundation” WCF.
Negli ultimi anni ha preso sempre più interesse e grande utilizzo anche servizi di tipo Web api, servizi che restituiscono un json con il quale  una volta trasformati in oggetti possiamo gestire le informazioni.
In questo articolo vedremo come realizzarne uno con il linguaggio di programmazione C# e l’ambiente di sviluppo Visual Studio 2022 Community.
Creazione del progetto
Dopo aver aperto l’ambiente di sviluppo Visual Studio 2022 Community, selezionare tra i modelli di progetti quello con la dicitura “Api web Asp.Net Core” il tutto come mostrato in figura 1.


Figura 1 – Il modello dei progetti per la creazione dei servizi web api

Dopo aver selezionato il progetto facciamo click sul pulsante “Avanti” e successivamente impostiamo il nome del progetto, fatto ciò facciamo click sul pulsante “Avanti”, e nella finestra successiva selezioniamo l’ultima versione del Framework, nel momento in cui stiamo scrivendo è la 8, lasciando come spunta solo le caselle con la dicitura “Abilita supporto OpenAPI” e “Usa in controller”, il tutto come mostrato in figura 2.

Figura 2 – Le varie opzioni selezionate

Dopo aver impostato le varie opzioni facciamo click sul pulsante “Crea”.
A questo punto il progetto è stato creato.


Creazione della fonte dati

I servizi in tantissimi casi fanno uso di una base dati, nel nostro caso utilizzeremo il database Microsoft Sql Server, con un database denominato “Dati” ed una tabella denominata “Anagrafica”.
La tabella avrà un campo di tipo intero contatore chiave primaria denominata “IdAnagrafica” un campo di tipo “Varchar” di lunghezza 100 e denominata “Nome” ed un campo di tipo “VarChar” di lunghezza 100 denominata “Cognome”, il tutto come mostrato in figura 3.


Figura 3 – La tabella con la fonte dati.

Stesura del codice

In questa parte vedremo la stesura del codice, prima di utilizzare le varie classi, e la gestione di una fonte dati, dobbiamo aggiungere al progetto alcune librerie, pacchetti Nuget, che ci permettono di gestire una fonte dati e non solo.
Oltre al pacchetto che troveremo per default per la gestione di “Swagger” denominato “Swashbuckle.AspNetCore” dobbiamo aggiungere i vari componenti di Entity Framework.
Aggiungiamo i seguenti pacchetti:
“Microsoft.EntityFrameworkCore”
“Microsoft.EntityFrameworkCore.SqlServer”
“Microsoft.EntityFrameworkCore.Tools”
“Microsoft.EntityFrameworkCore.InMemory”
“Microsoft.VisualStudio.Web.CodeGeneration.Design”
Come riportato in figura 4, il progetto avrà le librerie appena aggiunte.



Figura 4 – Le librerie appena aggiunte

Terminata l’aggiunta dei pacchetti non resta che scrivere il codice.
Si crea una cartella denominata “Modelli” il quale ci sarà una classe che rappresenterà la tabella per la nostra fonte data.
Dopo aver creato la tabella “Modelli” facciamo click con il tasto destro sulla cartella e dal menu che viene visualizzato, selezioniamo “Aggiungi” e nel sottomenu selezioniamo “Classe”.
Diamo il nome di “Anagrafica” alla classe.
La classe avrà una proprietà di tipo int32, e due proprietà di tipo string, che avranno i nomi delle rispettive colonne della tabella.
Di seguito si riporta il frammento di codice completo della classe “Anagrafica”.


C#

   public class Anagrafica

   {

       [Key]

       public Int32 IdAnagrafica { get; set; }

       public string Nome { get; set; }

       public string Cognome { get; set; }

   }


Sempre nella cartella “Modelli” occorre creare una classe per la gestione del contesto, ossia quella classe che avrà il compito di effettuare il collegamento alla base dati.
Facciamo sempre tasto destro sulla cartella modelli e si crea una nuova classe denominata “DatiContesto”. 
Questa classe erediterà dal “DBcontext” e nell’evento della creazione del modello, andiamo ad impostare come chiave primaria il campo ”IdAnagrafica”.
Di seguito si riporta le suddette dichiarazioni nel linguaggio “C#”.

C#

 

public class DatiContesto : DbContext

{

    public DatiContesto(DbContextOptions<DatiContesto> opzioni) : base(opzioni) { }

    public DbSet<Anagrafica> Anagrafica { get; set; } = null!;

    protected override void OnModelCreating(ModelBuilder modelBuilder)

    {

          

        modelBuilder.Entity<Anagrafica>()

    .HasKey(ana => ana.IdAnagrafica);

 

 

 

 

 

    }

 

 

}

Il collegamento al database verrà inserito nella proprietà “ConnectionString” del file “appsettings.json”.
Facciamo click su tale file ed aggiungiamo il parametro per la connessione al database.
Di seguito si riporta il codice completo di tale file con l’aggiunta della stringa di connessione.

{

  "Logging": {

    "LogLevel": {

      "Default": "Information",

      "Microsoft.AspNetCore": "Warning"

    }

  },

  "ConnectionStrings": {

    "DefaultConnection": "Server=NomeServer;Initial Catalog=Dati;TrustServerCertificate=True;Trusted_Connection=True;"

  },

  "AllowedHosts": "*"

}

Naturalmente occorre modificare i dati di connessione, in particolare il nome del server, su quello che avete configurato.
Terminata di impostare la connessione al database, dobbiamo aggiungere nel file “Program” le istruzioni di codice per impostare la stringa di connessione alla classe di contesto. 
Sotto all’istruzione al metodo “AddControllers” aggiungiamo il riferimento alla stringa di connessione come riportato qui di seguito.

C#

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");

builder.Services.AddDbContext<DatiContesto>(opt => opt.UseSqlServer(connectionString));

 Di seguito si riporta il codice completo del file Program, con le righe di codice aggiunte per la gestione della connessione al database.


using Microsoft.EntityFrameworkCore;

using WebArtWebApi.Modelli;

 

var builder = WebApplication.CreateBuilder(args);

 

// Add services to the container.

 

builder.Services.AddControllers();

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");

builder.Services.AddDbContext<DatiContesto>(opt => opt.UseSqlServer(connectionString));

// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle

builder.Services.AddEndpointsApiExplorer();

builder.Services.AddSwaggerGen();

 

var app = builder.Build();

 

// Configure the HTTP request pipeline.

if (app.Environment.IsDevelopment())

{

    app.UseSwagger();

    app.UseSwaggerUI();

}

 

app.UseAuthorization();

 

app.MapControllers();

 

app.Run();


Siamo giunti quasi alla fine del nostro articolo, tramite l’aggiunta di un controllo scaffold avremo per ogni operazione di tipo CRUD un determinato metodo.
Facciamo click con il tasto destro del mouse sulla cartella “Controllers” selezioniamo la voce “Aggiungi” e  nel sottomenu che viene aperto selezioniamo la voce “Nuovo elemento di Scaffolding”, nella finestra che viene aperta selezionare la voce “Controller API con azioni, che usa Entity Framework”, il tutto come mostrato in figura 5.


Figura 5. – La scelta dell’elemento

Nella finestra che viene visualizzata (figura 6) impostare per il campo “Classe del modello”  la classe di riferimento alla tabella creata in precedenza, nel nostro caso “Anagrafica”, nella casella “DbContext Class” selezioniamo la classe del contesto creata in precedenza, nel nostro caso era “DatiContesto”.




Figura 6 – La finestra per impostare la classe ed il contesto.

Dopo aver valorizzato i vari campi, non resta che fare click sul pulsante “Aggiungi” ed attendere qualche secondo per la creazione della classe con i vari metodi.

Ora non resta che testare il nostro progetto, eseguiamo l’applicativo, e per il metodo get con id finale, inseriamo un valore di cui siamo certi è presente un dato nel database.
Il risultato sarà come nell’immagine 7, nel quale sarà riportato il dato per quel determinato record.

Figura 7 – Il test su Swagger per il metodo di ottenere il singolo record.

Conclusioni

In ambiente Visual Studio 2022 e con la tecnologia .Net 8 diviene ancora più semplice e rapida la creazione dei servizi di tipo web api. Servizi nuovi che sono sempre più adottati in nuovi progetti. Un nuovo modo per gestire le informazioni anche a livello multipiattaforma, dando così la possibilità a più linguaggi di programmazione ed a più sistemi operativi di interagire con questo nuovo modo di rappresentare e gestire i dati.
L’articolo ha voluto fornire al lettore un’introduzione a questo nuovo scenario, anche se è possibile affrontare scenari molto più complessi.

Nessun commento: