• Cts. Şub 24th, 2024

Arif GÖKÇE

Senior Software Engineer

REST API Nedir?

Byarifgokce

Ağu 7, 2017
restApi

Web tabanlı uygulamaların geliştirilmesinde, servisler arası iletişim büyük önem taşır. RESTful API ve SOAP, bu tür iletişimde sıkça kullanılan iki farklı yaklaşımdır. Bu yazıda, öncelikle RESTful API ve SOAP’un tanımlarını hem teknik hem de genel olarak açıklayacağız. Ardından, .NET Core üzerinde örnekler vererek RESTful API ve SOAP arasındaki farkı inceleyeceğiz. Sonrasında RESTful API’de kullanılan HTTP metodlarını ve kod örneklerini ele alacağız. Ayrıca, RESTful API kullanırken nelere dikkat etmemiz gerektiğini ve RESTful API ve RESTful’un teknik kazanımlarını analiz edeceğiz.

REST, Representational State Transfer’ın (Temsilî Durum Transferi) kısaltmasıdır ve Roy Fielding tarafından 2000 yılında tanımlanan bir mimaridir. REST, HTTP protokolünü kullanarak web servislerini oluşturmak için bir yaklaşım sağlar. REST API, bu mimariye uygun olarak tasarlanmış ve HTTP protokolünü kullanarak uygulamalar arasında veri transferi sağlayan bir uygulama programlama arayüzüdür.

REST API’nin temel prensipleri şunlardır:

  • Stateless (Durumsuzluk): REST API, istemci ve sunucu arasındaki herhangi bir durumu (state) paylaşmaz. Her istek (request) bağımsızdır ve istemci kimliği, oturum durumu veya diğer geçici veriler gibi herhangi bir durumu sunucuda saklamaz. Bu, ölçeklenebilirlik ve güvenilirlik açısından avantaj sağlar.
  • Client-Server (İstemci-Sunucu): REST API, istemci ve sunucu arasında net bir ayrım yapar. İstemci, kullanıcı arayüzünü (UI) temsil ederken, sunucu iş mantığı ve veri depolamayı (data storage) temsil eder. Bu, istemci ve sunucunun bağımsız olarak geliştirilebilmesine, ölçeklenebilirliğe ve daha iyi güvenliğe olanak tanır.
  • Cacheable (Önbellekleme): REST API, yanıtları (responses) önbelleğe alabilir, yani sunucu tarafından gönderilen yanıtlar istemci tarafından saklanabilir. Bu, ağ trafiğini azaltarak performansı artırabilir.
  • Uniform Interface (Birleşik Arayüz): REST API, genel ve tutarlı bir arayüz sunar. HTTP protokolü üzerinden standart yöntemleri (GET, POST, PUT, DELETE vb.) kullanarak kaynaklara (resources) erişim sağlanır. Kaynaklar, tekil bir URI (Uniform Resource Identifier) ile temsil edilir ve bu URI üzerinden erişim sağlanır.
  • Layered System (Katmanlı Sistem): REST API, farklı bileşenlerin (layers) ayrı ayrı geliştirilmesine ve değiştirilmesine izin veren bir yapıdadır. Her katman, belirli bir işlevi yerine getirir ve diğer katmanlarından bağımsızdır. Bu, sistemde esneklik ve ölçeklenebilirlik sağlar.
  • Stateless Communication (Durumsuz İletişim): REST API, her istek (request) ve yanıt (response) mesajını, tüm gerekli bilgileri içerir şekilde taşır. Sunucu, istemci bağlantısını herhangi bir oturum durumu veya geçici veri saklamadan yönetir. Bu, REST API’nin genel olarak hafif ve hızlı olmasını sağlar.

Bu prensipler, REST API’nin basit, ölçeklenebilir, güvenilir ve kullanıcı dostu bir şekilde çalışmasını sağlar. REST mimarisi, modern web servislerini tasarlarken yaygın olarak kullanılan bir standarttır.

RESTful API ve SOAP:

RESTful API (Representational State Transfer), web servislerini kullanarak istemcilerin sunucu ile iletişim kurmasını sağlayan bir mimaridir. RESTful API, HTTP protokolünü kullanır ve kaynakları (Resource) temsil eden URL’ler ile iletişim kurar. İstemci, HTTP metodları (GET, POST, PUT, DELETE vb.) kullanarak kaynaklara erişebilir ve işlemler gerçekleştirebilir.

SOAP (Simple Object Access Protocol), XML tabanlı bir protokoldür ve web servislerinin iletişimini sağlar. SOAP, WSDL (Web Services Description Language) adlı bir dil kullanarak servislerin nasıl kullanılacağını ve hangi veri türlerinin kullanılabileceğini tanımlar. SOAP, genellikle XML-RPC ve HTTP protokollerini kullanır.

.NET Core, RESTful API ve SOAP uygulamalarını geliştirmek için güçlü bir platform sunar. İşte .NET Core üzerinde RESTful API ve SOAP kullanımına yönelik örnekler:

RESTful API Örneği

[ApiController]
[Route("api/[controller]")]
public class UserController : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        // Kullanıcı listesini döndür
        return Ok(users);
    }

    [HttpGet("{id}")]
    public IActionResult Get(int id)
    {
        // Belirtilen kullanıcıyı döndür
        var user = users.FirstOrDefault(u => u.Id == id);
        if (user == null)
        {
            return NotFound();
        }
        return Ok(user);
    }

    [HttpPost]
    public IActionResult Post(User user)
    {
        // Yeni kullanıcıyı kaydet
        // ...
        return CreatedAtAction(nameof(Get), new { id = user.Id }, user);
    }

    [HttpPut("{id}")]
    public IActionResult Put(int id, User user)
    {
        // Kullanıcıyı güncelle
        // ...
        return NoContent();
    }

    [HttpDelete("{id}")]
    public IActionResult Delete(int id)
    {
        // Kullanıcıyı sil
        // ...
        return NoContent();
    }
}

SOAP Örneği:

// Servis.cs
[WebService(Namespace = "http://www.example.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class UserService : System.Web.Services.WebService
{
    [WebMethod]
    public User GetUser(int id)
    {
        // Kullanıcıyı getir
        // ...
        return user;
    }

    [WebMethod]
    public void AddUser(User user)
    {
        // Yeni kullanıcıyı ekle
        // ...
    }

    [WebMethod]
    public void UpdateUser(User user)
    {
        // Kullanıcıyı güncelle
        // ...
    }

    [WebMethod]
    public void DeleteUser(int id)
    {
        // Kullanıcıyı sil
        // ...
    }
}

RESTful API ve SOAP Kullanılan HTTP Metodları:

RESTful API, HTTP protokolündeki çeşitli metodları kullanarak kaynaklarla etkileşimde bulunur. En sık kullanılan HTTP metodları şunlardır:

  • GET: Kaynağı oku, veriyi getir.
  • POST: Yeni kaynak oluştur, veri ekleyin.
  • PUT: Mevcut kaynağı güncelle, veriyi güncelle.
  • DELETE: Kaynağı sil, veriyi sil.

SOAP ise kendi protokolü üzerinden çalıştığı için HTTP metodları yerine, SOAP mesajları kullanır.

RESTful API Kullanırken Dikkat Edilmesi Gerekenler: RESTful API kullanırken şu noktalara dikkat etmek önemlidir:

  • Güvenlik: API güvenliği, kullanıcı kimlik doğrulama ve yetkilendirme gibi önlemler alarak sağlanmalıdır.
  • Performans: API’nin performansı, gereksiz veri transferini önlemek, önbellekleme ve veri sıkıştırma gibi tekniklerle optimize edilmelidir.
  • Hata yönetimi: API, hataları uygun hata kodları veya hata nesneleri ile yönetmeli ve istemcilere açık hata mesajları döndürmelidir.
  • Versioning: API’nin sürümlendirme yönetimi iyi yapılmalı, geriye dönük uyumluluğa dikkat edilmelidir.
  • Dokümantasyon: API’nin kullanımını kolaylaştırmak için detaylı dokümantasyon sunulmalıdır.

RESTful API ve RESTful’un Kazandırdığı Teknik Kazanımlar:

RESTful API ve RESTful, şu teknik kazanımları sağlar:

  • Hafif ve Esnek: RESTful API’ler, HTTP protokolünü kullanarak basit ve hafif bir iletişim mekanizması sağlar. Ayrıca kaynakları temsil eden URI’ler ile kaynaklara erişim kolaylaştırır ve kaynakları farklı formatlarda (JSON, XML, vs.) temsil etme esnekliği sunar.
  • Bağımsızlık: RESTful API’ler, platformdan ve dil bağımsızdır, yani farklı programlama dilleri ve platformlar arasında kolayca entegre edilebilirler. Bu, sistemlerin farklı teknolojilere dayandığı karmaşık ortamlarda bile kullanılabilirliği artırır.
  • Ölçeklenebilirlik: RESTful API’ler, dağıtık sistemlerde ölçeklenebilir ve performanslı bir şekilde çalışabilir. Stateless olmaları, oturum yönetimi gibi sunucu tarafında tutulan durumu ortadan kaldırarak, sistemlerin yüksek talepleri karşılayabilmesini sağlar.
  • Kolayca Cache Edilebilir: RESTful API’ler, HTTP protokolünü kullandığı için, çeşitli HTTP caching mekanizmalarını kullanarak sonuçları cache edebilir ve tekrar kullanabilir. Bu, API performansını artırabilir ve ağ trafiğini azaltabilir.
  • Uygun ve Tutumlu: RESTful API’ler, kaynakları ve operasyonları uygun ve tutumlu bir şekilde temsil eder. Sadece ihtiyaç duyulan kaynaklar ve operasyonlar kullanılarak gereksiz veri transferi engellenir ve gereksiz karmaşıklık ortadan kaldırılır.
  • Evrensel Ulaşılabilirlik: RESTful API’ler, HTTP protokolünü kullanarak, farklı cihazlardan (web tarayıcılar, mobil cihazlar, vs.) ve farklı istemci uygulamalardan (web, mobil, masaüstü, vs.) erişilebilir. Bu, çoklu platform desteği ve geniş kullanılabilirlik sağlar.
  1. 200 OK: İstek başarıyla gerçekleştirildi ve sonuçlar başarılı bir şekilde döndü.
  2. 201 Created: Kaynak başarıyla oluşturuldu. Genellikle POST isteklerinden sonra kullanılır.
  3. 204 No Content: İstek başarıyla gerçekleştirildi, ancak dönüş değeri yok. Genellikle DELETE isteklerinden sonra kullanılır.
  4. 400 Bad Request: İstek hatalı veya geçersiz veri içeriyor. İstemci tarafından yapılan hatalı istekleri ifade eder.
  5. 401 Unauthorized: Kimlik doğrulama başarısız oldu veya kimlik doğrulama bilgileri eksik. Kullanıcının kimlik doğrulama gerektiren kaynaklara erişimi engellendi.
  6. 403 Forbidden: İstemci, kaynağa erişim yetkisine sahip değil. Kullanıcının kaynağa erişim izni yok.
  7. 404 Not Found: Kaynak bulunamadı. İstek yapılan kaynak veya endpoint bulunamadı.
  8. 500 Internal Server Error: Sunucu tarafında bir hata meydana geldi. Genel bir hata kodu.
  9. 503 Service Unavailable: Servis geçici olarak kullanılamıyor. Genellikle bakım veya yük dengesi gibi durumlarda kullanılır.
  10. 302 Found (Redirect): Kaynak başka bir URL’ye taşındı. İstek yapılan kaynak farklı bir URL’ye yönlendirildi.

Bu, RESTful API’lerde yaygın olarak kullanılan bazı HTTP status kodlarıdır. Doğru HTTP status kodlarını kullanmak, istemcilerin ve sunucuların doğru şekilde iletişim kurmasını sağlar ve hatalı durumlarda uygun hata mesajları döndürerek kullanıcı deneyimini geliştirir.

  • 200 OK: İstek başarıyla gerçekleştirildi ve sonuçlar başarılı bir şekilde döndü.
  • 201 Created: Kaynak başarıyla oluşturuldu. Genellikle POST isteklerinden sonra kullanılır.
  • 204 No Content: İstek başarıyla gerçekleştirildi, ancak dönüş değeri yok. Genellikle DELETE isteklerinden sonra kullanılır.
  • 400 Bad Request: İstek hatalı veya geçersiz veri içeriyor. İstemci tarafından yapılan hatalı istekleri ifade eder.
  • 401 Unauthorized: Kimlik doğrulama başarısız oldu veya kimlik doğrulama bilgileri eksik. Kullanıcının kimlik doğrulama gerektiren kaynaklara erişimi engellendi.
  • 403 Forbidden: İstemci, kaynağa erişim yetkisine sahip değil. Kullanıcının kaynağa erişim izni yok.
  • 404 Not Found: Kaynak bulunamadı. İstek yapılan kaynak veya endpoint bulunamadı.
  • 500 Internal Server Error: Sunucu tarafında bir hata meydana geldi. Genel bir hata kodu.
  • 503 Service Unavailable: Servis geçici olarak kullanılamıyor. Genellikle bakım veya yük dengesi gibi durumlarda kullanılır.
  • 302 Found (Redirect): Kaynak başka bir URL’ye taşındı. İstek yapılan kaynak farklı bir URL’ye yönlendirildi.
  • Bu, RESTful API’lerde yaygın olarak kullanılan bazı HTTP status kodlarıdır. Doğru HTTP status kodlarını kullanmak, istemcilerin ve sunucuların doğru şekilde iletişim kurmasını sağlar ve hatalı durumlarda uygun hata mesajları döndürerek kullanıcı deneyimini geliştirir.

Bu, RESTful API’lerde yaygın olarak kullanılan bazı HTTP status kodlarıdır. Doğru HTTP status kodlarını kullanmak, istemcilerin ve sunucuların doğru şekilde iletişim kurmasını sağlar ve hatalı durumlarda uygun hata mesajları döndürerek kullanıcı deneyimini geliştirir.

Umarım bu yazı, RESTful API ve SOAP arasındaki farkı, RESTful API kullanımı, dikkat edilmesi gereken noktalar ve teknik kazanımları açıklayan güçlü ve anlaşılır bir kaynak olmuştur. Herhangi bir konuda daha fazla bilgi veya örnek kodlar isterseniz, lütfen sormaktan çekinmeyin.