REST API Nedir ? Örnek Proje ile
Bu yazı iki kısımdan oluşmakta olup bu yazı ilk kısımdır.
REST hiper medya sistemleri için mimari stildir. REpresentional State Transfer (Temsili Durum Transferi) anlamına gelir. Diğer mimari tasarımlar gibi bir servisin RESTful olarak sayılması için bazı prensipleri(REST prensipleri) sağlamalıdır. REST mimarisine uygun Web API uygulamasına veya Web Servisine RESTful API denir. Bu mimarideki API’lerin REST prensiplerini uygulaması gerekir. Bu prensipler API’lerin kolay, anlaşılabilir ve kullanılabilir olmasını sağlar. RESTful API her çağırıldığında sunucu istenilen kaynağın durumunun sunumunu(resource state representation) istemciye iletir. Bu sunum JSON,HTML,XML gibi formatlarda olabilir. Kaynak için tanımlayıcı olması gerekir. Bu tanımlayıcı URL(Uniform Resource Locator) olabilir. Kaynak için hangi işlemin yapılacağı HTTP metodu(GET,POST,PUT,DELETE) olarak belirtilebilir. İstemci ile sunucu standart bir protokol ile haberleşir bu protokol genelde HTTP protokolüdür. Ancak REST, HTTP protokolünün kullanılmasını zorunlu kılmamaktadır. REST ilk defa 2000 yılında “Mimari tarzları ve ağ tabanlı yazılım mimarisi tasarımları” adlı doktora tezinde, Roy Thomas Fielding tarafından sunuldu.
REST Prensipleri (İlkeleri)
Bir uygulamanın RESTful olabilmesi için(yani sunulan REST standartını kullanan) REST prensiplerini sağlaması gerekir. Bu prensipler…
1.Tek Düze Arayüz
- Kaynakların tanımlanması. Sunucuya yapılan bütün isteklerde kaynak tanımlayıcısı(resource identifier) olmalıdır.
- Kaynakların sunumlar ile manüpile edilmesi. Kaynakların sunucu cevabında tek düze(aynı) sunumu olmalıdır. API kullanıcıları sunucudaki kaynakları değiştirmek için bu sunumları kullanabilmelidir(Sunumlar yeterli bilgiyi içermeli).
- Kendini tanımlayıcı mesajlar. İstemciden sunucuya yapılan her istek sunucunun anlayabilmesi ve isteği işleyebilmesi, sunucudan istemciye verilen her cevap istemcinin cevabı anlayabilmesi ve işleyebilmesi için her türlü bilgiyi içermelidir.
- Uygulamanın durumunun motoru(application state engine) olarak hiper medya. İstemci uygulama dinamik olarak hiper linkleri kullanarak diğer kaynaklara ve etkileşimlere erişebilmeli. Örneğin API’yi kullanan istemci herhangi bir kullanıcının bilgisini istediğinde aynı zamanda bu kullanıcıda değişiklik yapabilmesi için gerekli olan işlemleri(silme, düzenleme vb.) sunucudan aynı istekte almalı. (Bkz. HATEOAS)
2.İstemci-Sunucu
İstemci sunucu ilkesi, şeylerin ayrılması(seperation of concerns) prensibini uygular. Böylelikle istemci ve sunucu birbirinden bağımsız olarak gelişir.
3.Durumu(State) Olmayan(Stateless)
Bu prensibe göre istemciden sunucuya yapılan her türlü istek, isteği anlamak ve bitirmek adına bütün bilgileri içermelidir. Sunucu API’yi veya servisi kullanan kullanıcıyı hatırlamamalıdır. Örneğin aynı kullanıcı iki kez üst üste kaynağı okumak istediğinde sunucu bir önceki işlemi hatırlamaz. Her spesifik istek sunucunun isteği işlemesi için gereken bilgiyi içerir.
4.Önbelleğe Alınabilir(Cacheable)
Bu prensip sunucudan gelen cevabın kendini önbelleğe alınabilir veya alınamaz diye etiketlemesi gerektiğini belirtir. Eğer cevap önbelleğe alınabilirse cevap sürüm bilgisi içerebilir ve istemci bu veriyi ileride spesifik bir periyotta, eşit isteklerde kullanabilir. Sürüm bilgisinden istemci verinin eski olup olmadığını anlayabilir.
5.Katmanlı Sistem(Layered System)
Katmanlı sistem, mimarinin bir kaç hiyerarşisel katmandan oluşmasıdır. Sunucudan kaynağı isteyen istemci ve istemciye yanıt veren sunucu arasında birden fazla ara katman olabilir. Bu ara katmanlar isteğe veya cevaba etki etmezler. (Örneğin güvenlik katmanı, ters vekil sunucusu, yük dengeleme katmanı(load balancing))
6.Talep Üzerine Kod(Code on Demand) — Opsiyonel
REST aynı zamanda istemcinin fonksiyonelliğini kod indirerek artırmasını sağlar. Sunucu özelliklerin bir kısmını kod olarak istemciye verebilir. Bu durumda istemcinin tek yapması gereken kodu çalıştırmaktır. Bu kod önceden yapılmış ve hazırlanmış özellikleri tekrar yapmaktan alı koyar.
REST’te Kaynak(Resource)
REST’te soyutlanan her bilgiye kaynak denir. REST kaynağı herhangi bir döküman, yazı,resim, dosya, servis veya kaynakların birleşimi olabilir. Bu kaynakların herhangi bir zamandaki durumuna(state) kaynağın sunumu(representation) denir. Kaynağın sunumu aşağıdakilerden oluşur:
- Veri
- Veriyi anlatan ve açıklayan metaveri
- İstenilen bir sonraki duruma(state) geçebilmek için hiper linkler(hyperlinks).
REST API’si birbirine bağlı kaynaklardan oluşur. Bu kaynaklar dizisi aynı zamanda REST API’nin kaynak modelidir.
Kaynak Tanımlayıcıları(Resource Identifiers)
REST, istemci ve sunucu etkileşiminde kullanılan kaynakları ayırmak için kaynak tanımlayıcılarını kullanır.
Hipermedya(Hypertext / Hypermedia)
Sunumun veri formatı,medya türü olarak isimlendirilir. Medya türü sunumun nasıl işlenmesi gerektiğini belirler.(HTML, JSON, XML vb.) Örneğin sunulan kaynağın formatı JSON ise JSON’a göre işlemler yapılmalıdır.
Hiper medya bilgilerin ve kontrollerin eş zamanlı sunumu anlamına gelir. Unutmamak gerekir ki hiper medya’nın tarayıcıda HTML,XML veya JSON olması gerekmez. Makineler veri formatını ve ilişki türünü anladıklarında bağlantıları(link) takip edebilirler. — Roy Thomas Fielding
Kendini Açıklayan(Self Descriptive)
Kaynak sunumları kendini açıklamalıdır.
Özetleyecek olursak bir API’nin veya uygulamanın REST olabilmesi(RESTful) için yukarda bahsi geçen beş adet prensibi uygulamalıdır. Ayrıca opsiyonel olarak altıncı prensibide uygulayabilir.