İçeriğe geç

Swagger ile API Dokümantasyonu: Kendi Kendine Konuşan Kodlar!

Şöyle bir olay yaşadım geçenlerde, evde oturmuş Vue.js ile bir şeyler geliştiriyordum. Kendi yazdığım C# REST API’sine veri gönderiyordum Dapper ve PostgreSQL kullanarak. Her şey gayet güzel çalışıyordu, testlerimi yapıyordum, sonuçlar istediğim gibi geliyordu. Tam “tamamdır bu iş oldu” derken, proje bittiğinde dokümantasyona oturdum. İşte o an anladım ki, kod yazmak yetmiyor, onu bir de anlatabilmek gerekiyor. Hele ki ekipteki diğer arkadaşlar için veya yarın öbür gün ben unuttuğumda kendim için…

Neyse efendim, bu dokümantasyon işi de bazen insanın canını sıkabiliyor, değil mi? Hani böyle bütün gece kod yazarsın, sabahına her şey tıkırında gider ama gel gör ki, o kodun ne işe yaradığını, nasıl çalıştığını, hangi parametreleri aldığını birine anlatman gerektiğinde sanki bambaşka bir dile konuşuyormuşsun gibi hissedersin. İşte bu noktada sahneye Swagger çıkıyor, hem de ne çıkış! Kendi başına buyruk, her şeyi açıklayan bir kahraman gibi.

Swagger dediğimiz şey aslında basit bir API dokümantasyon aracı. Ama basit dediğime bakmayın, o kadar güçlü ve kullanışlı ki, sanki API’nizin bir nevi kişisel asistanı gibi. Onunla, yazdığınız API’lerin uç noktalarını, hangi HTTP metotlarını kullandıklarını (GET, POST, PUT, DELETE falan filan), hangi parametreleri aldıklarını, hangi tipte veri döndürdüklerini görsel olarak görebiliyorsunuz. Kendi kendine konuşan kodlar gibi düşünün, ama bu sefer konuşan kod değil, onu anlatan bir arayüz var.

Hani bazen kendi yazdığınız bir kodu bir hafta sonra açarsınız da “Ben bunu nasıl yapmışım böyle?” dersiniz ya, işte Swagger bu durumu ortadan kaldırıyor. Bir kere tanımladınız mı, API’nizin sözlüğü gibi oluyor. Hem sizin için hem de sizinle birlikte çalışan diğer geliştiriciler için inanılmaz bir kolaylık sağlıyor. Düşünsenize, bir API’yi kullanacak olan bir front-end geliştiricisi, Swagger arayüzüne bakıp hangi veriyi göndereceğini, ne döneceğini anında görebiliyor. Bu da hata oranını ciddi şekilde düşürüyor, inanılmaz bir zaman tasarrufu sağlıyor. Açıkçası bana göre bu işin en can alıcı noktası bu.

Swagger’ı projenize entegre etmek de sanıldığı kadar zor değil. Özellikle .NET Core ve .NET 5 ve sonrası sürümlerde bu işi inanılmaz kolaylaştırmışlar. Sadece birkaç paket ekleyip, birkaç ayar yapmanız yeterli oluyor. Hatta bazen o kadar basit ki, sanki sihirli bir değnek dokunmuş gibi çalışıyor. İşte bu yüzden ben de kendi projelerimde mutlaka kullanırım. Bu arada, Swagger UI dediğimiz görsel arayüzü de ayrıca harika. Sanki bir demo ekranı gibi, API’nizi oradan test bile edebiliyorsunuz. Ne güzel değil mi?

Örnek verecek olursak, diyelim ki bir kullanıcı bilgisi alma API’niz var. Bunu Swagger ile şöyle dokümante edebilirsiniz:

Önce projenize gerekli paketleri eklemeniz gerekiyor. Genellikle `Swashbuckle.AspNetCore` paketi yeterli oluyor.

Sonra `Startup.cs` (veya yeni projelerde `Program.cs`) dosyasında birkaç ayar yapacaksınız. Şöyle bir şey olması lazım:

// Startup.cs veya Program.cs'de services.AddSwaggerGen(c => {     c.SwaggerDoc("v1", new OpenApiInfo { Title = "Benim API'm", Version = "v1" }); });

// ...

app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Benim API'm v1"); });

Bu kadar basit. Sonra API controller’larınızın üzerine birkaç tane attribute ekleyerek dokümantasyonu daha da detaylandırabilirsiniz. Mesela, bir kullanıcı bilgisi alan GET isteğiniz şöyle olabilir:

[HttpGet("{id}")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(KullaniciModel))] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status400BadRequest)] /// <summary> /// Belirli bir ID'ye sahip kullanıcıyı getirir. /// </summary> /// <param name="id">Kullanıcı ID'si</param> /// <returns>Kullanıcı bilgileri veya hata mesajı</returns> public async Task<IActionResult> GetKullanici(int id) {     // ... kullanıcıyı veritabanından alma kodları ...     if (kullanici == null)     {         return NotFound(); // 404     }     return Ok(kullanici); // 200 }

Şimdi bu kodu çalıştırdığınızda, Swagger UI’da bu endpoint’i göreceksiniz. Üzerine tıkladığınızda, ne alacağını, ne döndüreceğini, hangi hata kodlarını verebileceğini hepsini görebileceksiniz. Hatta “Try it out” butonuna basıp doğrudan oradan test bile yapabilirsiniz. Bu, özellikle geliştirme aşamasında inanılmaz pratik. Bir de şöyle düşünün, siz API’yi geliştirirken, front-end ekibi de bu dokümantasyona bakarak kendi tarafını geliştirmeye başlayabiliyor. Paralel çalışmanın en güzel örneklerinden biri işte bu.

Neticede, Swagger sadece bir dokümantasyon aracı değil, aynı zamanda geliştirme sürecini hızlandıran, ekip içi iletişimi güçlendiren ve API’lerinizi daha anlaşılır hale getiren harika bir çözüm. Hele ki büyük projelerde veya birden fazla geliştiricinin çalıştığı ekiplerde bu aracın değeri paha biçilemez. Yani bana sorarsanız, API geliştiriyorsanız mutlaka kullanmanız gereken bir şey. GitHub’da da bununla ilgili birçok örnek bulabilirsiniz, merak edenler şöyle bir arama yapabilir.

Bu arada, Swagger’ın sadece API’leri tanımlamakla kalmadığını, aynı zamanda OpenAPI Specification adında standart bir format kullandığını da belirtmek lazım. Bu da demek oluyor ki, sadece Swagger UI değil, başka araçlar da bu tanımlama dosyasını okuyup kullanabiliyor. Bu da işleri daha da kolaylaştırıyor tabii. Hani bazen bir şeye sahip olursun da, bunun ne kadar işe yaradığını sonradan fark edersin ya, işte Swagger da benim için öyle bir şey oldu zamanla. Başta sadece bir dokümantasyon aracı sandım ama işin içine girdikçe ne kadar önemli bir araç olduğunu anladım.

Sonuç olarak, eğer kodunuzun hem sizin hem de başkaları tarafından kolayca anlaşılmasını istiyorsanız, geliştirme sürecinizi hızlandırmak ve hataları azaltmak istiyorsanız, Swagger kesinlikle listenizin başında olmalı. Deneyin, göreceksiniz ne kadar fark yaratıyor. Ben hala ara sıra kendi yazdığım eski kodlara bakıp “bu neymiş böyle” dediğim oluyor ama Swagger’ı kurduktan sonra bu “neden”ler azalmaya başladı. Tek kelimeyle harika. Evet. Tamamen.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.