Post Page Advertisement [Top]

   Merhaba,
   Bu yazımızda ASP .Net Core 2.2 ile Restfull bir API oluşturacağız.Moduler, Kolay az kod gerektiren ve en önemlisi cross-platform çalışabilecek bir API ve .Net Core 2.2 ile artık API Analizi de yapabiliyoruz.



  İlk olarak .Net Core 'u ilk defa kullanacaklar için ön hazırlık yapalım: Core'da geliştirme yapabilmeniz için ilk olarak VS 2015 P3 ya da VS 2017 'ye ihtiyacımız var Visual Studio Code 'da da yazmak mümkün. Ben VS 2017'yi community edition olarak bu linkten edindim. VS kurulumunu tamamladıktan sonra .Net Core SDK 'i indirmek için bu linke tıklayalım. Kurulum oldukça basit adımları takip ederek diyerek kurulumu tamamlayalım.

Okurken ne dinlemeli ?




Ortam kurulumlarını tamamladıktan sonra gelelim projemizi oluşturmaya . VS 2017' den Core sekmesinden Web Applications' u seçerek API template'si ile projemizi oluşturacağız.



Projeyi create ettiğimizde şablon bize tüm kolaylıkları sağlıyor. Örnek bir controller bile oluşturuyor . Biz ValuesController'i silip  kendi Controller'imizi oluşturmak üzere Projeye sağ tıklayıp Add-> New-> Empty Controller ekliyoruz.


API' yi genel hatları ile anlatacak olursak , bir stok API 'ı ve bazı malzemeleri ekleyebiliyoruz. Eklediğimiz malzemelerin hepsini ilgili endpoint çağrımı ile listeleyebiliyoruz. Teknik açıdan sınıflarda kullanacağımız modellerimiz Models klasörü altında , Data sağlayıcılarımız Repository ,API controller'i Controllers altında ve uygulama ilklendircimiz StartUp.cs olmak üzere ana dizinde yer almaktadır.Aşağıdaki gibi model sınıfımızı oluşturarak işe başlayalım:

namespace AvengersAPI.Models
{
    public class InventoryItem
    {
        public int Id { get; set; }
        public string ItemName { get; set; }
    }
}

Şimdi Repository Interface ve sınıfımızı oluşturalım.Hangi metodlar olacağını interface 'de belirleyelim:

namespace AvengersAPI.Business
{
    public interface IInventoryRepository
    {
        InventoryItem AddInventoryItem(InventoryItem item);
        List<InventoryItem> GetInventoryItems();
        InventoryItem GetInventoryItem(int Id);
    }
}

Buna göre InventoryRepository.cs class'ımız Controller ihtiyaçlarımızı göre aşağıdaki implementasyonlardan oluşacaktır:

    public class InventoryRepository:IInventoryRepository

    {
        private readonly List<InventoryItem> _inventoryItems;

        public InventoryRepository()
        {
            _inventoryItems = new List<InventoryItem>();
        }

        public InventoryItem AddInventoryItem(InventoryItem item)
        {
            _inventoryItems.Add(item);

            return item;
        }

        public List<InventoryItem> GetInventoryItems()
        {
            return _inventoryItems;
        }


        public InventoryItem GetInventoryItem(int Id)
        {
            return _inventoryItems.Where(x=>x.Id==Id).FirstOrDefault();
        }
    }

Gelelim API 'ın en önemli kısmını oluşturan InventoryController 'ı kodlamaya : Burada önemli noktalardan biri de IInventoryRepository ile contstuctor üzerinden Injection yapmak daha sonra ve bu injection 'un çözümlenebilmesi için Startup.cs 'de bir singleton nesnesi yaratmak.

namespace AvengersAPI.Controllers
{
    [Route("v1/")]
    [ApiController]
    public class InventoryController : ControllerBase
    {
        private readonly IInventoryRepository _repository;

        public InventoryController(IInventoryRepository repository)
        {
            _repository = repository;
        }

        [HttpPost]
        [Route("AddInventoryItem")]
        public ActionResult<InventoryItem> AddInventoryItem(InventoryItem item)
        {
            var inventoryItems = _repository.AddInventoryItem(item);

            if (inventoryItems==null)
            {
                return NotFound();
            }

            return inventoryItems;
        }
            ...

Şimdi Startup.cs'de singleton ile Application Service'yi inject ediyoruz.Aynı zamanda bu nesnenin uygulama yaşam döngüsü boyunca bir kere instance oluşturmasını sağlamış oluyoruz.


public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            services.AddSingleton<IInventoryRepository, InventoryRepository>();
        }

Inventory Controller'de yer alan aşağıdaki metodlara da göz atmanızı tavsiye ederim:

        [HttpGet]
        [Route("GetInventoryItems")]
        public ActionResult<List<InventoryItem>> GetInventoryItems()

        [HttpGet]
        [Route("GetInventoryItem/{Id}")]
        public ActionResult<InventoryItem> GetInventoryItem(int Id)

>Uygulamamızı tamamladığımıza göre  IIS Express 'e tıklayarak API 'ı ayağa kaldırabiliriz. Çalıştırdığımızda default olarak Values controller'i aradığını ve api/values endpoint'ine gittiğini görebiliriz. Biz bu default değerleri aşağıdaki gibi launchSettings.json 'dan değiştirelim :

  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "v1/GetInventoryItems",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },


Uygulamamızı IIS'e host ettiğimizde hiç bir malzeme olmadığı için 404 hatası ile karşılaşacağız öyleyse POST metodu olan AddInventoryItem metod ile bir kaç malzeme ekleyelim. Örnek data olması için Sample Data klasörü altına sizin için örnek bir json verisi ekledim.

HttpPost metodu çağrımını yapmak için Postman aracını kullanacağım: İlk olarak AddInventoryItem metod çağrımını yaparak inventory ekleyelim. Bunun için Postman' de Http tipini POST seçip Body sekmesine gelip  Raw checkbox'ını işaretleyelim ,raw formatını JSON(application/json) olarak değiştirelim.



 Daha sonra body'e sample data altındaki json datasını yazalım.ve Send butonuna tıklayarak aynı verinin bize geri döndüğünü ve 200 success aldığımızı görelim. Arka tarafta inventoryItems List'ine bu inventory'ler eklenmektedir.





GetInventoryItems ve GetInventoryItem metodlarını da deneyelim bunun için Sadece bir get çağrımı yapmamız yeterli ve AddInventoryItem endpoint'i ile eklediğimiz tüm itemlerin burada  listelendiğini görelim:




Böylece .Net Core ortamında bir REST API 'miz oldu. Bundan sonraki adımlarda API 'için Logger yazabiliriz. Middleware ile Request ve Response 'lerimizi validate edebilir. Docker container 'lar ile Linux ortamlara uygulmamızı deploy edebilir ya da Azure App Services ile uygulamamızı buluta yükleyebiliriz. Swagger ile API dökümantasyonu hazırlayabilirsiniz. Oldukça geniş ve esnek bir vizyonu olan .Net Core yukarıdaki gibi ve çok daha fazla imkanı bize sunmakta... İlerleyen .Net Core yazılarımda görüşmek üzere.

Uygulamanını kodunu buradan inceleyebilirsiniz.

Sağlıkla kalın.

Hiç yorum yok:

Yorum Gönder

Bottom Ad [Post Page]