Introduction
Bienvenue sur mon premier blog où j'écris en français. Dans ce blog, je vais expliquer comment utiliser et créer une API REST avec .NET Core dans sa version 6.0. Dans mon équipe, nous utilisons la version 6.0.302. Dans ce tutoriel, nous allons créer une API qui nous permettra, à l'aide d'une classe "animal", de créer une base de données. Vous pourrez également consulter, créer, modifier et supprimer des enregistrements de cette table. Si vous avez des connaissances de base sur ce qu'est une API et comment elle fonctionne, vous pouvez passer à la partie suivante, "Créer le projet".
Qu'est-ce qu'une API
API signifie en anglais "Application Programming Interface" (Interface de Programmation d'Application). En bref, une API est une application qui reçoit une requête et renvoie une réponse. Cela permet de connecter l'interface utilisateur et le serveur, tout en offrant la possibilité de réutiliser le même service pour différents appareils. Autrement dit, nous pouvons créer une seule application qui sera utilisée par des ordinateurs, des téléphones portables, des téléviseurs, etc.
Créer le project
Je vais utiliser Visual Studio Code (VSCode) et Visual Studio (VS Studio) également, donc tu peux voir comment cela fonctionne dans les deux.
VS Code
dotnet new webapi -o AnimalsCodeApi
VS Studio
Voici le projet que vous auriez
Et nous pouvons commencer l'application dans VS Code avec la commande.
dotnet run
Et ici dans VS Studio.
Nous allons vers le lien.
https://localhost:7221/swagger/index.html
Swagger nous permet de tester les API que nous créons, il est similaire à Postman.
Configurer le projet
La première étape sera de supprimer les fichiers WeatherForecast.cs et /Controllers/WeatherForecastController.cs.
Nous devons donc maintenant créer notre structure avec les nouveaux fichiers dans Startup.cs.
Startup.cs
namespace AnimalsCodeApi;
public class Startup
{
public Startup(IConfiguration configuration){
Configuration = configuration;
}
public IConfiguration Configuration {get ;}
public void ConfigureServices(IServiceCollection services){
services.AddControllers();
services.AddEndpointsApiExplorer();
services.AddSwaggerGen();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){
if (env.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints( endpoints =>{
endpoints.MapControllers();
});
}
}
Program.cs
using AnimalsCodeApi;
var builder = WebApplication.CreateBuilder(args);
var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services);
var app = builder.Build();
startup.Configure(app, app.Environment);
app.Run();
De cette façon, nous aurons l'application d'une manière mieux organisée
Install Packages
VS Code
dotnet add package Microsoft.EntityFrameworkCore.Tools
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet tool install --global dotnet-ef
VS Studio
ORM
Pour créer chaque table, nous allons créer sa classe et son contrôleur
Entities
Nous allons creer un nouveau dossier, et à l'intérieur toutes les classes qui représentent des tables dans notre programme.
Entities/Animal.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
namespace AnimalsCodeApi.Entities
{
public class Animal
{
[Key]
public int Id { get; set; }
public string tipo { get; set; }
public string nombre { get; set; }
}
}
Controller
Cotrollers/AnimalsController.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.EntityFrameworkCore;
using AnimalsCodeApi.Entities;
namespace AnimalsCodeApi.Controllers
{
[ApiController]
[Route("[controller]")]
public class AnimalsController : ControllerBase
{
//http petitions
}
}
ApplicationDBContext
En ce fichier tu dois créer un DbSet pour chaque "Entity" qui existe.
/ApplicationDBContext.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
namespace AnimalsCodeApi
{
public class ApplicationDBContext : DbContext
{
public ApplicationDBContext(DbContextOptions options) : base(options)
{
}
public DbSet <Animal> animals { get; set; }
}
}
/appsettings.Development.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"ConnectionStrings": {
"defaultConnection" : "Data Source=(localdb)\\mssqllocaldb;Initial Catalog=ApiCodeAnimals; Integrated Security=True"
}
}
/Startup.cs
using Microsoft.EntityFrameworkCore;
.
.
.
.
public void ConfigureServices(IServiceCollection services){
services.AddControllers();
services.AddEndpointsApiExplorer();
services.AddSwaggerGen();
services.AddDbContext<ApplicationDbContext>(options
=> options.UseSqlServer(Configuration.GetConnectionString("defaultConnection")));
}
Migrations
VS Code
dotnet ef migrations add Animals
dotnet ef database update
VS Studio
Ouvre packet manager console
Add-Migration Animal
Update-Database
Build API
/Controllers/AnimalsController.cs
using System;
using System.Web;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.EntityFrameworkCore;
using AnimalsStudioApi.Entities;
namespace AnimalsStudioApi.Controllers
{
[ApiController]
[Route("[controller]")]
public class AnimalsController : ControllerBase
{
private readonly ApplicationDBContext context;
public AnimalsController(ApplicationDBContext context)
{
this.context = context;
}
[HttpGet]
public async Task<ActionResult<List<Animal>>> Get()
{
return await context.animals.ToListAsync();
}
[HttpPost]
public async Task<ActionResult> Post(Animal animal)
{
context.Add(animal);
await context.SaveChangesAsync();
return Ok();
}
[HttpPut]
public async Task<ActionResult> Put(Animal animal)
{
context.Update(animal);
await context.SaveChangesAsync();
return Ok();
}
[HttpDelete("{id:int}")]
public async Task<ActionResult> Delete(int id)
{
context.Remove(new Animal() { Id = id });
await context.SaveChangesAsync();
return Ok();
}
}
}
Nous pouvons maintenant tester les fonctionnalités "interroger, créer, modifier, supprimer" dans swagger.