.Net Core Web API' de Results Yapısı Oluşturmak

Geri Dön
Tarih: 3/18/2022 10:40:21 PM

Merhaba, başlığı .Net Core olarak açtım fakat bu yapıyı .Net Framework API'de de kullanabiliriz. Bunu kısaca özetleyecek olursam diyelim Postman'da bir sorgu atıp tablolarınızı listeleyeceksiniz fakat bu API'yi kullanacak olan kişiye bir results döndürmemiz gerekmektedir. Burada API'yi kullanacak olan kişi yaptığımız results yapısı sayesinde bilgi sahibi olacaktır.



Bu yapıyı oluşturmak için size tavsiyem bir Core katmanında oluşturun çünkü her API projenizde kullanabilirsiniz. Bu yüzden şimdi gerekli results kodlamalarını yapalım. İlk olarak IResult ve IDataResult adı altında interfacelerimizi oluşturalım.

public interface IResult
    {
        bool Success { get; }
        string Message { get; }
    }

public interface IDataResult<T>:IResult
    {
        T Data { get; }
    }


Devamında ise arayüzlerimizi bağlayacak olan gerekli class yapılarını oluşturalım. İlk olarak IResult için kodlayalım.
 

 public class Result:IResult
    {
        public Result(bool success, string message) : this(success)
        {
            Message = message;
        }

        public Result(bool success)
        {
            Success = success;
        }
        public bool Success { get; }
        public string Message { get; }
    }


public class SuccessResult:Result
    {
        public SuccessResult(string message) : base(true, message)
        {

        }

        public SuccessResult() : base(true)
        {

        }

    }


 public class ErrorResult:Result
    {
        public ErrorResult(string message) : base(false, message)
        {

        }

        public ErrorResult() : base(false)
        {

        }
    }


Şimdi bunu birde IDataResult için kodlayalım.
 

public class DataResult<T>:Result,IDataResult<T>
    {
        public DataResult(T data, bool success, string message) : base(success, message)
        {
            Data = data;
        }

        public DataResult(T data, bool success) : base(success)
        {
            Data = data;
        }
        public T Data { get; }
    }


 public class SuccessDataResult<T>:DataResult<T>
    {
        public SuccessDataResult(T data, string message) : base(data, true, message)
        {

        }

        public SuccessDataResult(T data) : base(data, true)
        {

        }

        public SuccessDataResult(string message) : base(default, true, message)
        {

        }

        public SuccessDataResult() : base(default, true)
        {

        }
    }


public class ErrorDataResult<T>:DataResult<T>
    {
        public ErrorDataResult(T data, string message) : base(data, false, message)
        {

        }

        public ErrorDataResult(T data) : base(data, false)
        {

        }

        public ErrorDataResult(string message) : base(default, false, message)
        {

        }

        public ErrorDataResult() : base(default, false)
        {

        }
    }


Yapılarımızı bitirmiş oluyoruz. Şimdi gelelim bunu örnek bir ProductManager'de kullanalım ve yazımızı bitirelim.

 

public IDataResult<List<Product>> GetAllProducts()
        {
            var result = _productDal.GetAllProducts();
            if (result!=null)
            {
                return new SuccessDataResult<List<Product>>(result,"Ürünler başarıyla listelendi");
            }
            return new ErrorDataResult<List<Product>>("Ürün listesi hatadır");
        }


Projenin Result dosyalarına GitHub adresimden ulaşabilirsiniz. Kolay gelsin..