Démarrage rapide
Ce guide vous montre comment effectuer votre premier appel API avec MCM.ApiProxy.
Exemple complet
Voici un exemple de service qui utilise le client employés :
Services/EmployeService.cs
using MCM.ApiProxy.Contracts;
using MCM.B2B.Contracts;
public class EmployeService
{
private readonly IEmployesClient _employesClient;
private readonly ILogger<EmployeService> _logger;
public EmployeService(
IEmployesClient employesClient,
ILogger<EmployeService> logger)
{
_employesClient = employesClient;
_logger = logger;
}
public async Task<List<B2BEmployeItem>> GetAllEmployesAsync()
{
var result = await _employesClient.GetAllEmployes();
if (result.IsError)
{
_logger.LogError("Erreur lors de la récupération des employés: {Error}",
result.FirstError.Description);
return [];
}
return result.Value.ToList();
}
public async Task<B2BEmployeItem?> GetEmployeAsync(string idExterne)
{
var result = await _employesClient.GetEmployeById(idExterne);
if (result.IsError)
{
_logger.LogWarning("Employé non trouvé: {IdExterne}", idExterne);
return null;
}
return result.Value;
}
}
Enregistrer le service
Program.cs
using MCM.ApiProxy;
var builder = WebApplication.CreateBuilder(args);
// MCM API
builder.Services.AddMcmApiClient(builder.Configuration);
// Votre service
builder.Services.AddScoped<EmployeService>();
var app = builder.Build();
Utiliser dans un contrôleur
Controllers/EmployesController.cs
[ApiController]
[Route("api/[controller]")]
public class EmployesController : ControllerBase
{
private readonly EmployeService _employeService;
public EmployesController(EmployeService employeService)
{
_employeService = employeService;
}
[HttpGet]
public async Task<IActionResult> GetAll()
{
var employes = await _employeService.GetAllEmployesAsync();
return Ok(employes);
}
[HttpGet("{idExterne}")]
public async Task<IActionResult> GetById(string idExterne)
{
var employe = await _employeService.GetEmployeAsync(idExterne);
if (employe is null)
return NotFound();
return Ok(employe);
}
}
Comprendre le pattern ErrorOr
MCM.ApiProxy utilise le pattern ErrorOr<T> pour gérer les erreurs de manière explicite :
var result = await _employesClient.GetEmployeById("EMP-123");
// Vérifier s'il y a une erreur
if (result.IsError)
{
// Accéder à la première erreur
var error = result.FirstError;
Console.WriteLine($"Code: {error.Code}");
Console.WriteLine($"Description: {error.Description}");
return;
}
// Accéder à la valeur
var employe = result.Value;
Console.WriteLine($"Employé: {employe.Prenom} {employe.Nom}");
Avantages de ErrorOr
| Aspect | ErrorOr | Exceptions |
|---|---|---|
| Performance | ✅ Pas d'overhead | ❌ Coûteux à lancer |
| Lisibilité | ✅ Flux explicite | ❌ Flux caché |
| Compilation | ✅ Vérifié à la compilation | ❌ Erreurs runtime |
Créer un employé
public async Task<bool> CreateEmployeAsync(B2BUpdateEmployeDto employe)
{
var result = await _employesClient.AddEmploye(employe);
if (result.IsError)
{
_logger.LogError("Erreur création employé: {Error}",
result.FirstError.Description);
return false;
}
_logger.LogInformation("Employé créé: {IdExterne}", employe.IdExterne);
return true;
}
Prochaines étapes
- 📖 Gestion des erreurs - Approfondir la gestion des erreurs
- 📚 API Reference - Documentation complète des clients
- 🔐 Authentification - Détails sur l'authentification API