REST Mimarisi & RESTful Servisler
REST istemci-sunucu arasında hızlı ve kolay şekilde iletişim kurulmasını sağlayan bir servis yapısıdır. Açılımı Representational State Transfer olan bu ifadeyi Türkçe’ye Temsili Durum Transferi diye çevirebiliriz.
Client-server arasındaki haberleşmeyi sağlayan HTTP protokolü üzerinden çalışan bir mimaridir. İstemci ve sunucu arasında XML ve JSON verilerini taşıyarak uygulamanın haberleşmesini sağlar.
REST tabanlı bir mimaride her şey bir kaynaktır. Kaynaklar global kimlikler (genellikle URI’lar) tarafından tanımlanır. GET, POST, PUT, DELETE vb. gibi HTTP yöntemlerini kullanarak kaynakları okuma, yazma, değiştirme ve oluşturma olanağı sağlanır.
HTTP Metotları
RESTful web servislerinde kaynaklara ulaşmak için Uniform Resource Identifiers(URI) kullanılır. Bu kaynaklar üzerinde işlemlerde de HTTP methodları ile gerçekleştirilir. GET, PUT, POST, DELETE methodları web servis içinde clienttan gelen isteklerin serverda nasıl işleneceğini belirler. HTTP methodlarının bu şekilde kullanılması da web servisin platform bağımsız olarak kullanılmasına olanak verir.
RESTful servisler veri iletiminde farklı HTTP metotlarını kullanmaktadır. Bunlar ;
- GET okuma işlemidir,
- POST yeni bir kaynak oluşturur,
- PUT yeni bir kaynak oluşturur veya varolan kaynağı günceller,
- DELETE ise kayıt silme işlemi için kullanılır.
Yapılan HTTP request’i için çağrılan URL ile beraber HTTP method bilgisi bahsi geçen 4 metottan biri olarak seçilir ve sunucu yapılan talebin kayıt üzerine nasıl etki edeceğini buna göre belirler.
Şimdi bu kategorilerde en çok kullanılan status code’ları inceleyelim.
· 200 (OK) : GET, PUT veya POST işleminde başarılı oldu. Başarılı bir yanıt için döndürüldü
· 201 (Created) : PUT veya POST işleminde başarı. Nesne başarıyla oluşturuldu veya güncelleştirildi.
· 204 (No Content) : PUT veya POST işleminde başarı. Dizin veya belgeler başarıyla karşıya yüklendi.
· 400 (Bad Request ): istek URI ‘SI, üst bilgiler veya gövdede bir hata olduğunda döndürülür.
· 401 (Unauthorized ): Korumalı bir resource’a gerekli authorization sağlanmadan erişilmeye çalışıldığını ifade eder.
· 403 (Forbidden ): Geçersiz bir API anahtarı geçirdiğinizde döndürüldü.
· 404 (Not Found ): Client’ın istediği resource’un bulunamadığını ifade eder.
· 405 (Method Not Allowed ): İstek yapılan URI’ın ilgili metodu desteklemediğini belirtir
· 406 (Not Acceptable): Server’ın, client’ın gönderdiği istekte header’da Accept alanında yazdığı medya tiplerinden herhangi bir formatta çıktı veremediğini belirtir.
· 409 (Conflict ): Yazma işlemleri çakışması olduğunda döndürülür.
· 415 (Unsupported Media Type ): Server’a, desteklemediği tipte bir resource gönderildiğinde 415 döner.
· 500 (Internal Server Error ): Server’ın hatası yüzünden istek yerine getirilemiyorsa kullanılır.
RESTful API’ler nasıl çalışır?
Bir RESTful API’nin temel işlevi, internette gezinmeyle aynıdır. İstemci, bir kaynağa ihtiyaç duyduğunda API’yi kullanarak sunucu ile iletişime geçer. API geliştiricileri, istemcinin REST API’yi nasıl kullanması gerektiğini sunucu uygulamasının API belgelerinde açıklar. Herhangi bir REST API çağrısına yönelik genel adımlar şunlardır:
- İstemci, sunucuya bir istek gönderir. İstemci, isteği sunucunun anlayacağı şekilde biçimlendirmek için API belgelerine uyar.
- Sunucu, istemcinin kimliğini doğrular ve istemcinin bu istekte bulunma hakkı olduğunu onaylar.
- Sunucu, isteği alır ve dahili olarak işler.
- Sunucu, istemciye bir yanıt verir. Yanıt, istemciye isteğin başarılı olup olmadığını söyleyen bilgileri içerir. Yanıt aynı zamanda, istemcinin talep ettiği bilgileri de içerir.
REST API isteği ve yanıt ayrıntıları, API geliştiricilerinin API’yi nasıl tasarladığına bağlı olarak küçük farklılıklar gösterir.
RESTful API’lerin avantajları nelerdir?
Ölçeklenebilirlik
REST, istemci-sunucu etkileşimlerini optimize ettiğinden, REST API’leri uygulayan sistemler verimli şekilde ölçeklendirme yapabilir. Durumsuzluk; sunucunun, geçmiş istemci istek bilgilerini saklaması gerekmediğinden sunucu yükünü ortadan kaldırır. İyi yönetilen önbelleğe alma süreci, bazı istemci-sunucu etkileşimlerini kısmen veya tamamen ortadan kaldırır. Tüm bu özellikler, performansı azaltan iletişim tıkanıklıklarına neden olmadan ölçeklendirmeyi destekler.
Esneklik
RESTful web hizmetleri, toplam istemci-sunucu ayrımını destekler. Bu hizmetler, her bir parçanın bağımsız olarak gelişebilmesi için çeşitli sunucu bileşenlerini basitleştirir ve birbirinden ayırır. Sunucu uygulamasındaki platform veya teknoloji değişiklikleri, istemci uygulamasını etkilemez. Uygulama işlevlerini katmanlama özelliği, esnekliği daha da artırır. Örneğin, geliştiriciler uygulama mantığını yeniden yazmadan veritabanı katmanında değişiklikler yapabilir.
Bağımsızlık
REST API’ler, kullanılan teknolojiden bağımsızdır. API tasarımını etkilemeden hem istemci hem de sunucu uygulamalarını çeşitli programlama dillerinde yazabilirsiniz. Ayrıca, iletişimi etkilemeden her iki taraftaki temel teknolojiyi de değiştirebilirsiniz.
Umarım faydalı bir aktarım olmuştur. Bir sonraki yazımda görüşmek üzere.
Teşekkürler.