Asp.NET Web API – MongoDB

Bir süredir ara verdiğim MongoDB serisine devam ediyorum. Bu yazıda Asp.NET Web API framework ile yapılan projede MongoDB veritabanından çekilmiş olan verileri REST yapısında tüm kullanıcılara göstereceğiz. Ardından bir diğer yazıda JSON biçiminde dönen verileri sorgu ile web api’den çekip kullanacağız. Veri seti olarak MongoDB sitesi üzerinde örneklerde kullanılmak üzere paylaşılan restaurants veri setini kullanacağım. Bu linkten indirilebilir.image001

Uygulamayı local üzerinde çalıştıracağımız için cmd ekranı üzerinden mongod komutu yazılarak, server başlatılmalıdır. Eğer kurulum yapmadıysanız MongoDB giriş makelesinde kuruluş için gerekli linkler mevcuttur. İlk başta temel olarak verilerin ekranda gösterilmesi, belirli bir restaurant id değerine göre gözükmesi, güncellenmesi ve silinmesi gibi REST’in temel işlemlerini ekleyeceğim.

Öncelikle visual studio üzerinden web api projesi açıyoruz ve nuget paketlerinden mongodb offical driver’ı yükleriz. Proje yapısı aşağıdaki gibidir.  DAL yani veri ile direk temas yapacak olan kısım ayrı bir sınıf kütüphanesi olarak eklenecektir. Bu kütüphanede veriler ile yapılacak işlemler için Generic Repository ve Unit of Work patternleri uygulayarak daha güzel ve esnek bir yapı oluşturuyoruz. Oluşturulan bu esnek yapı sayesinde uygulamanın test edilebilirliği ve yönetilebilmesi kolaylaşmaktadır. Ana proje bölümünde şimdilik sadece resturantcontroller sınıfı içerisinde işlemler yapılmaktadır. Dependency Injection, authorize ve log işlemleri yapmak istersek projeye ilaveler ekleriz.

Detaylı olarak bu yapıyı bu yazıda anlatmayacağım. Bu linkte bulunan yazıda generic repository ve unit of work yapısı hakkında detaylı bilgi mevcuttur.

1

MongoDb sitesi üzerinden indirdiğimiz örnek veri setinin yapısı aşağıdaki gibidir. Bu veri setindeki yapıya uygun olarak model sınıflarımızı oluşturacağız.

2

Temel model sınıfı olan restaurant aşağıdaki gibi tanımlanmıştır. Address sınıfı restaurant sınıfı içerisine yerleştirilmiştir. Address için ayrı bir sınıf oluşturup restaurant sınıfı içerisinden çağırmaktayız. Grades bölümünde sınıflar liste biçiminde eklenmektedir. Bu sınıfı oluşturup aynı Address sınıfını eklediğimiz gibi restaurant içerisine eklemekteyiz.

35

4

Öncelikle repository sınıfı oluşturuyoruz. REST mimarisinde bulunan GET, GET by id, POST, PUT ve DELETE gibi işlemler controller içinde tanımlanır. Controller içerisinde olan REST işlemlerinin uygulayacağı işlemler repository sınıfında tanımlanmıştır. Bu tanımlanan işlemler unit of work sınıfı aracılığı ile çağrılacaktır. Aşağıda repository sınıfının tanımlanması ve constructor içerisinde yapılan tanımlamaları gösterilmektedir. Sınıf generic yapıdadır. T ile belirtilen değişkene, repository sınıfı çağrılırken data modelimiz olan Restaurant sınıfını atayacağız. Repository sınıfını UnitOfWork sınıfımız içinde örnekleyeceğiz.

6

Aşağıdaki resimde repository sınıfında tanımlanmış olan metotlar gösterilmiştir. Bu metotlar controller kısmında gerekli işlemleri yapmak için çağrılacaktır.

7

UnitOfWork sınıfı aşağıdaki gibi oluşmaktadır. Constructor içerisinde veritabanına bağlanmak için gerekli işlemler yapılıyor. Oluşturduğumuz repository sınıfı için değişken tanımlanmıştır. Bu değişken repository sınıfını döndürüyor. Eğer örneklenmemiş yani değeri boş ise new ile örnekleniyor. Eğer daha önceden örneklenmesi yapılmış ise mevcut değer tekrar dönüyor. Controller içinden GET metodunu döndürmek istersek; unitofwork.Restaurant.GetAll() yazmamız gerekiyor.

8

Controller sınıfında constructor içerisinde unitofwork örneklenmiştir. Controller sınıfında REST yapısında kullanılan işlemler tanımlanmıştır. Tüm verilerin gösterilmesi için çağrılan GETfonksiyonu ve sadece belirli ObjectId değerine göre sadece tek bir değer çekmemiz için çağrılan diğer GET fonksiyonuda gösterilmiştir.

11

Aşağıda veri eklemek için kullanılan Post metodu gösterilmiştir. Kullanıcı tarafından yollanan Restaurant modeline uygun olan veri unitofwork aracılığı ile repositoryde bulunan add fonksiyonuna gönderilip veritabanına eklenmiştir.

12

Delete metodu, silinmek istenilen verinin id değerini parametre olarak alır. Yapılacak işlem için unit of work sınıfında örneklenmiş repository sınıfında olan metod çağrılmaktadır.

13

Put metodu parametre olarak Restaurant model sınıfı formatında veri alır. Güncelleme yapmak için gerekli metoda yollar.

14

Örnek olarak belirli bir id değerine göre değer çekmeye bakalım. 57601c6da9fba760e3aeed8a ObjectId değerine karşılık gelen restaurant değeri aşağıdaki gibidir. Yapılacak REST işlemlerine göre veriler kullanılmak üzere paylaşılmaktadır.

15

Projenin kaynak kodları

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s