برنامه نویسی

استفاده از استاندارد نتیجه در API با .NET 9.0

استفاده از استاندارد نتیجه در API ها ، نگهداری کد را بهبود می بخشد و بازده عملیات را استاندارد می کند. با .NET 9.0 ، ما می توانیم API های خود را برای مقابله با موفقیت ، خطاهای تجاری و خرابی های غیر منتظره ساختار دهیم.

استاندارد نتیجه چیست؟

استاندارد نتیجه نتیجه یک عملیات را محاصره می کند و اجازه می دهد یک شیء برگردانده شود:

موفقیت با یک ارزش

خطای تجارت (مثال: داده های نامعتبر)

شکست غیر منتظره (مثال: استثنائات)

این امر از استفاده بیش از حد از استثنائات جلوگیری می کند و پیش بینی کد را بهبود می بخشد.

اجرای استاندارد نتیجه

بیایید با تعریف یک نتیجه کلاس عمومی شروع کنیم:

public class Result<T>
{
    public bool IsSuccess { get; }
    public T? Value { get; }
    public string? ErrorMessage { get; }

    private Result(T value)
    {
        IsSuccess = true;
        Value = value;
    }

    private Result(string errorMessage)
    {
        IsSuccess = false;
        ErrorMessage = errorMessage;
    }

    public static Result<T> Success(T value) => new(value);
    public static Result<T> Failure(string errorMessage) => new(errorMessage);
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون می توانیم از این ساختار در خدمات API خود استفاده کنیم.

استفاده از استاندارد در یک سرویس

خدماتی ایجاد کنید که از نتایج استفاده کند:

public class UserService
{
    private readonly Dictionary<int, string> _users = new()
    {
        { 1, "Henrique" },
        { 2, "Marta" }
    };

    public Result<string> GetUserById(int id)
    {
        if (!_users.TryGetValue(id, out var user))
        {
            return Result<string>.Failure("Usuário não encontrado.");
        }
        return Result<string>.Success(user);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ادغام استاندارد نتیجه در یک کنترلر

اکنون ما از این سرویس در یک کنترلر ** ** در Asp.net Core 9.0 استفاده می کنیم:

[ApiController]
[Route("api/users")]
public class UsersController : ControllerBase
{
    private readonly UserService _userService = new();

    [HttpGet("{id}")]
    public IActionResult GetUser(int id)
    {
        var result = _userService.GetUserById(id);

        if (!result.IsSuccess)
        {
            return NotFound(new { error = result.ErrorMessage });
        }

        return Ok(new { user = result.Value });
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مثال درخواست و پاسخ

درخواست:

دریافت/API/کاربران/1

پاسخ (200 خوب):

{
    "user": "Henrique"
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اگر نمی توانید پیدا کنید:

دریافت/API/کاربران/99

RESPOSTA (404 یافت نشد):

{
    "error": "Usuário não encontrado."
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بهبود با انواع خطا

ما می توانیم یک کلاس از خطاهای دقیق تر اضافه کنیم:

public class Error
{
    public string Code { get; }
    public string Message { get; }

    public Error(string code, string message)
    {
        Code = code;
        Message = message;
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون ما نتایج را تغییر می دهیم تا یک شیء خطا را در بر بگیرد:

public class Result<T>
{
    public bool IsSuccess { get; }
    public T? Value { get; }
    public Error? Error { get; }

    private Result(T value)
    {
        IsSuccess = true;
        Value = value;
    }

    private Result(Error error)
    {
        IsSuccess = false;
        Error = error;
    }

    public static Result<T> Success(T value) => new(value);
    public static Result<T> Failure(string code, string message) => new(new Error(code, message));
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون می توانیم از کدهای خطای توصیفی بیشتری استفاده کنیم:

public Result<string> GetUserById(int id)
{
    if (!_users.TryGetValue(id, out var user))
    {
        return Result<string>.Failure("USER_NOT_FOUND", "Usuário não encontrado.");
    }
    return Result<string>.Success(user);
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

و کنترلر اکنون ساختار یافته تر پاسخ می دهد:

[HttpGet("{id}")]
public IActionResult GetUser(int id)
{
    var result = _userService.GetUserById(id);

    if (!result.IsSuccess)
    {
        return NotFound(new { errorCode = result.Error!.Code, message = result.Error.Message });
    }

    return Ok(new { user = result.Value });
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پاسخ اکنون:

{
    "errorCode": "USER_NOT_FOUND",
    "message": "Usuário não encontrado."
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پایان

استفاده از استاندارد .NET 9.0 پیش بینی کد را بهبود می بخشد و از استفاده بیش از حد از استثنائات جلوگیری می کند. این امکان را برای درمان موفقیت آمیز موفقیت و خرابی فراهم می کند و باعث می شود کد پاک تر و نگهداری ساده تر شود.

اگر قبلاً از این الگوی استفاده کرده اید یا سؤال دارید ، نظر خود را بگذارید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا