- REST standardını izleyen bir API, RESTful API olarak adlandırılır.
Her HTTP request’inde yapılması istenilen işlemin HTTP Method’larıyla (Verb) ifade edilmelidir.. POST, PUT, DELETE ,GET gibi. Böylece proxy ihtiyacı ortadan kalkmış oluyor ve platform bağımsız yapılar kurmak kolaylaşıyor.
RESTful servisler’in birçok farklı response tipi olabilir. Bugünlerde popüler olarak JSON kullanılıyor fakat XML, CSV veya amaca bağlı olarak HMTL bile kullanılabilir.
1 — Client Server Architecture
Rest mimarisinin kurallarından birisi Client ve Server bir birinden bağımsız olmalı ve geliştirme sürecinde bu iki bileşen bir birinden bağımsız olarak geliştirilebilir olmalıdır.
Bu kural sayesinde, birçok client aynı serveri kullanabilecektir çünkü client bazında işlem yapacak şekilde server geliştirmeyeceğiz. Ayrıca server tarafında kullanılan programlama dilini veya kullanılan veri saklama ortamlarını değiştirsek de kullanıcı tarafında herhangi bir değişiklik yapmamıza gerek olmayacaktır.
2 — Stateless
REST mimarisinin kullanıldığı web servislerde isteklerin yürütülmesi için gereken tüm bilgiler requestle birlikte gelmelidir. Bir isteğin yürütülebilmesi için makina üzerinde daha önce saklanmış verilere ihtiyaç duyulmamalıdır.
Bu kural sayesinde uygulamalarımız yatayda ölçeklenebilir olurlar.
Her bir request işlemin yürütülebilmesi için gereken tüm verilere sahip olduğu için istek, hizmet sağlayıcı tarafından geliştirilmiş uygulamanın kurulu olduğu herhangi bir makinada işlenebilir.
Eğer bu kurala uymadan geliştirmelerimizi yaparsak bir isteğin işlenebilmesi için bir makina üzerinde kullanıcıya ait bilgilerin daha önceden saklanması gerekmektedir. Bu durumda da makinalar üzerinde kullanıcı oturumları (session) oluşturmuş oluruz.
Eğer kullanıcıya ait oturum meşgul olan makina üzerinde açılmışsa, kullanıcımız boş makinalardan yararlanamaz ve hizmet almak için bekler. Bu durumda kaynaklarımızı verimli kullanamamış oluruz.
3 — Cacheable
Cache, verinin bir kopyasının kolay erişilebilir bir ortamda saklanması ve verinin asıl kaynağından değil daha hızlı erişilebilinen ortamdan alınması işlemi olarak nitelendirilebilir. Web servisleri kullanıcının isteğini karşılarken verinin cache’lenebilir olup olmadığına dair bilgi dönmelidir. Cache’lenebilir olan veriler içinde bir versiyon numarası kullanıcıya iletilir. Kullanıcının elinde tuttuğu veriye ait versiyon numarası geçerli olduğunu sürece bu bilgi tekrar tekrar kullanılabilir.
Bu kural aracılığıyla kullanıcı ve hizmet sağlayıcı arasında daha az iletişim kurulması amaçlanmaktadır. Hem kullanıcı kaynaklarını daha verimli kullanıyor ve daha hızlı aksiyon alıyor olacaktır hem de hizmet sağlayıcının üzerinde oluşacak yük azalacaktır.
4 — Layered System
Bu kurala göre kullanıcı tarafı ara bir hizmet sağlayıcıyla mı yoksa işlemi yürütecek son katmanla mı iletişimde olduğunu bilmemelidir.
Bu kural aracılığı ile hizmet sağlayıcı ve kullanıcı tarafındaki düşük bağımlılığın var olması gerekliliği bir kez daha vurgulanmıştır. Kullanıcının, bir makina üzerinden hizmet aldığının veya load-balancer gibi araçlarla farklı makinalardan hizmet aldığının farkında olmaması bu kurala uygunluğun sonucudur.
5 — Uniform Interface
Aynı endpointe bakan farklı yazılımcılar ister prosedürel dille geliştirme yapıyor olsun ister nesne yönelimli bir dille geliştirme yapıyor olsun aynı anlamı çıkarıyor olacaklardır.
Bu kural 4 alt madde ile betimlenmiştir.
- Resource identification in requests
Hizmet sağlayıcıya bir istek iletilirken, hangi kaynak için işlem yürütülmek istendiği bu istek içerisinde belirtilmelidir.
[POST] http://base-url/accounts veya [GET] http://base-url/accounts?name=aytac
- Resource manipulation through representations
Kullanıcı tarafında kaynağa ait bir veri elde edildiği zaman, kaynak üzerinde gerekli değişiklikleri yapmak için bu veriler yeterli olmalıdır.
Bu kuralı şu şekilde açıklayabiliriz. Ürün olarak temsil edilen veri kümesi üzerinde bir değişiklik yapmak istediğimiz zaman [PATCH] http://base-url/products/PRODUCT_ID endpoint’ini kullanmamız gerektiğini düşünelim.Hangi ürün üzerinde işlem yürütmek istediğimizi PRODUCT_ID verisi ile göstermemiz gereksin. Buna karşın GET eylemi yürüterek ürünler verisini elde ettiğimiz zaman bu veri kümesi içerisinde ürüne ait bir PRODUCT_ID değeri göremediğimizi düşünelim. Bu durumda ürünler kaynağından aldığımız veri, ürünler kaynağı üzerinde bir değişiklik yapmamız için yeterli olmamaktadır. İşte bu durum REST mimarisine uymadığımızı göstermektedir.
- Self-descriptive messages
Hizmet sağlayıcıdan alınan cevapların kullanıcı tarafında işlenebilmesi için mesajın kendini anlatan bilgilere sahip olması gerekmektedir.
Bu durumu en güzel açıklayan örneklerden biri Content-Type başlık alanı olabilir. Bu başlık alanına karşılık gelen değer kısmında “application/json”, “text/html” vb. bilgileri görebiliriz. Bu alana baktığımız zaman mesajın nasıl bir parse operasyonundan geçeceğini anlayabilmekteyiz.
- Hypermedia as the engine of application state
Kullanıcı aldığı cevaplar içerisinde yer alan linkler aracılığı ile gerekli diğer kaynaklara da erişebilmelidir.
Bir e-ticaret sitesine girdiğimizi düşünelim. 42 id değerine sahip kategori verisini talep etmiş olalım.
Aldığımız kategori cevabının içerisinde bu kategoriye ait ürünlere nasıl ulaşabileceğimize ait bilgiler yer almalıdır.
6— Code on Demand
Hizmet sağlayıcı kullanıcıya yürütülebilir program parçaları sunabilmelidir.
Hizmet sağlayıcının kullanıcıya javascript gibi yürütülebilir kod parçaları sunabilmesi bu kurala örnek olarak verilebilir.
Bu kural REST için opsiyoneldir. Bu sebeple REST mimarisine uyup uymadığımızı gösteren 5 ana kuraldan bahsedilmektedir.
REST vs SOAP
REST’in avantajları nelerdir
- Hafiftir, kolay extend edilebilir.
- Gelen, giden data boyutu SOAP ile karlılaştırıldığında çok ufaktır
- Tasarlaması kolaydır ve implementasyonu kolaydır, herhangi bir ekstra tool’a ihtiyacı yoktur
- HTTP üzerinden çalışır, platform bağımsızdır
SOAP’ın avantajları ;
- Consume etmesi kolaydır, bir şemayla beraber gelir
- Type-safety’dir, sizi bu tür validasyonlarla uğraştırmaz
- Bir sürü development tool’u vardır
- Security implementasyonu REST’e göre daha kolaydır, bir sürü hazır yapı vardır.
Hiç yorum yok:
Yorum Gönder