Monthly Archive: Eylül 2014

Swagger ile Restfull API Dökümantasyonu

Swagger için, restfull apilerimizi dökümante edebileceğimiz son zamanlarda standart haline gelmiş bir kütüphane diyebiliriz. Java,.net, node.js, php, python, ruby gibi birçok yazılım diline frameworku bulunmakta. Ben burada asp.net web api için oluşturulmuş(node.js versiyonu daha sonra) Swagger.net ‘i anlatacağım. Öncelikle Visual Studiomuzu açıp yeni asp.net mvc4 projesi diyelim ve açılan pencereden web api seçeneğini seçelim. 

Visual Studio bizim için varsayılan bir web api projesi oluşturdu. Solution Explorer dan controllerlarımızın olduğu Controllers klasörüne baktığımız zaman 2 adet (HomeController.cs ve ValuesController.cs) controller olduğunu görüyoruz.

Bunlardan ValuesController sınıfını açtığımız zaman sınıfımızın ApiController isimli classdan inherit ettiğini görüyoruz.

Bunun anlamı ValuesController sınıfı web apimiz için metodlar yazacağımız sınıfımız olduğu(Eğer istersek kendimiz controller oluşturup ApiController sınıfından inherit etmesini sağlayabilirdik).

Dikkat edersek metodların üzerinde yorum satırları olduğunu görürüz. İşte Swaggerın bize sunacağı dökümantasyon kütüphanesi bu yorum satırlarından oluşuyor.

Projemize swagger kütüphanesini nuget paket yöneticisini kullanarak ekleyebiliriz. Öncelikle nuget package manager consoluna Install-Package Swagger.Net  yazalım ve Swagger.Net in kütüphanesini projemize ekleyelim.

Artık ValuesController sınıfımızda web api metodlarımızın üzerine yazdığımız yorum satırlarına swaggerın sunduğu api üzerinden erişebiliriz. Ama önce projemizi derleyip çalıştıralım. Aşağıdaki hata ile karşılaşmamız normal çünkü gereken bazı ayarları yapmadık.

Hatada da yazdığı gibi swaggerın çalışabilmesi için projemize sağ tıklayıp Properties >Build ‘ e geliyoruz .

Buradan XML documentation file seçeneğini işaretliyoruz(varsayılan olarak işaretsiz geliyor) ve dökümantasyon dosyamızın nereye kaydedileceğini seçiyoruz. Default değerde bırakıyoruz( Eğer custom bir yol belirlemişsek çalışmayacak. Çalışması için  AppStart/SwaggerNet.cs dosyasını düzenlememiz gerekiyor)

Şimdi projemizi derleyip çalıştıralım ve Url adresine http://localhost:xxxxx/api/swagger girelim. Karşımıza json formatında bazı bilgiler çıkacaktır.


Aslında bu gördüğümüz bilgiler Swagger kütüphanesinin bize sunduğu dökümantasyon bilgilerimiz. Ama dikkat edersek description kısmında ” No Documentation Found” diyor. Yani dökümantasyon bulunamadı. Bunun sebebi swaggerın metodun üzerine yazdığınız dökümantasyon commentlerinin formatını öyle kafanıza göre veremiyor olmanız. Yazılım dünyasında genel olarak kabul gören dökümantasyon formatlarını kullanmalısınız  ki swagger bunu net birşekilde algılayıp parametre yollamanıza olanak sağlasın(Parametre olayı ileride işlenecek). O zaman biraz dökümantasyon yapalım.

        

///         public IEnumerable Get()         {             return new string[] { “value1”, “value2” };         }         ///
/// Get a single Value by it’s id         ///

///         ///         public string Get(int id)         {             return “value”;         }         ///
/// Post api/values         ///

///         ///         public void Post([FromBody]string value)         {         }         ///
/// Put api/values         ///

///         ///         ///         public void Put(int id, [FromBody]string value)         {         }         ///
/// Remove a Value by it’s id         ///

///         public void Delete(int id)         {         }

Metodlarımızı dökümante ettikten sonra swagger apisini çağırdığımızda bize vereceği veri aşağıdaki gibi oluyor.

{“apiVersion”:”4.0.0.0″,”swaggerVersion”:”2.0″,”basePath”:”http://localhost:59501″,”resourcePath”:null,”apis”:[{“path”:”/api/docs/Values”,”description”:”Get all of the values.”,”operations”:[]}]}

Şimdi ikinci kullanacağımız araç swagger-ui . Bu kütüphane swagger apide bize dönen değerleri güzel bir arayüzde bize sunup dökümante ettiğimiz metodları test edebilmemize ve dökümanteyi görebilmemize olanak sağlayan bir UI. Bunuda Nuget yardımıyla projemize ekliyoruz. Package Manager Consolumuza Install-Package Swagger.Net.UI yazıyoruz ve enter a basıyoruz. Gerisini nuget halledecek ve projemize ekleyecektir.


Dikkat eder isek projemize SwaggerUi diye bir klasör ekledi. Bu klasörün içerisinde swagger apisinden dönen değerleri bize sunan arayüz, html ve js ler bunlunmakta.

Projemizi derleyip çalıştırıyoruz. Ve url adresimize http://localhost:xxxxx/swaggerui/ yazıyoruz. Karşımıza gelen ekran SwaggerUi ‘ın ana ekranı.


Burada dikkat edersek http://YOUR-URL-HERE:PORT/api/swagger diye bir url yazıyor. Bu url adresi bizim swagger apimizin url i (swagger ui kurmadan önce bize json formatında veri veren api).
Oraya kendi swagger apimizin adresini giriyoruz ve explorer butonuna basıyoruz.

Farkettiyseniz bizim Values isimli web apimiz geldi. Hemen üzerine tıklıyoruz.

Gördüğünüz gibi Values isimli web api sınıfımızın içindeki tüm metodlar ve dökümantemiz geldi.(Yorumlarımız sağda gözüküyor). Şimdi ilk olarak /api/Values isimli metodumuzu temsil eden get metodumuza tıklayalım.

Try it out isimli buton karşımıza geldi. Tıklayalım.

Evet metodumuz çalıştı ve veriyi json formatında gönderdi. Bu şekilde restfull metodlarınıda SwaggerUi üzerinden test edebiliyoruz. Peki ya parametre göndermek istersek o zaman nasıl yapacağız? Aşağıdaki gibi…

Örnek Projenin Github Adresi:https://github.com/fuattatar/swaggernet.git

Kaynak:
https://github.com/Swagger-Net/Swagger.Net
https://github.com/wordnik/swagger-spec
http://swagger.io/
https://www.nuget.org/packages/Swagger.Net.UI/

MS CRM 4.0 ekler için dosya boyutu sınırını değiştirmek

CRM 4.0 ekler için dosya boyutu sınırını değiştirmek:

1. Web.config dosyasını açıyoruz (C:InetpubCRMweb.config).

2.    elementi içerisini aşağıdaki gibi değiştiriyoruz (10240 i istediğimiz şekilde değiştirebiliriz)

3. web.config dosyamızı kaydediyoruz.

4. Tarayıcıdan Crm’ i açıyoruz.

5. Ayarlar | Yönetim| Sistem Ayarları kısmına giriyoruz.

6. E-posta sekmesine tıklıyoruz.

7.Maiksimum dosya boyutu kısmını (kilobytes) 10240 yapıyoruz.

9.Tamam butonuna basıp kapatıyoruz.

10. Sonrada IIS i yeniden başlatıyoruz. .