**REST** (Temsilî Durum Aktarımı; İng. İngilizce: Representational state transfer), Web protokolleri ve teknolojilerini kullanan bir dağıtık sistemdir. REST prensiplerini sağlayan sistemler, *RESTful* olarak sıfatlandırılır. Temsilî Durum Aktarımı ismindeki temsilî (İng. *İngilizce: representational*), verinin temsilini kastetmekte olup onunla ilgili durumun aktarılması olarak düşünülebilir.

2000 yılında HTTP spesifikasyonunun yazarlarından biri olan Roy Fielding tarafından doktora tezinin bir parçası olarak geliştirilmiştir.

SOAP ve WSDL tabanlı Web servislerine spesifikasyon olarak daha basit bir alternatif olarak geliştirilmiştir. RESTful sistemler çoğunlukla HTTP protokolü üzerinden Web tarayıcıları tarafından sayfaların transferinde de kullanılan HTTP fiilleri (GET, POST, PUT, DELETE vs.) ile haberleşirler.

Aktarılan verinin formatı HTML, JSON, XML ya da farklı bir tipte olabilir. REST, bu konuda bir kısıtlama getirmez. Aktarılan verinin tipi ve özellikleri istemci ve sunucu tarafından HTTP protokolünde yer alan *İngilizce: content-type* (içerik tipi) ve benzeri metaveri ile tanımlanır.

Tarihçesi
---------

REST, ilk defa Roy Thomas Fielding'in 2000 yılındaki "Mimari tarzları ve ağ tabanlı yazılım mimarisi tasarımları" (İng. *"İngilizce: Architectural Styles and the Design of Network-based Software Architectures"*) adlı doktora tezinde teklif edildi. Fielding, REST mimari tarzını 1996-1999 arasında HTTP 1.0'ın mevcut tasarımına dayanarak HTTP 1.1 ile paralel olarak 1996'da geliştirdi.

Mimarî özellikleri
------------------

REST mimarî tarzıyla etkilenen mimarî özellikler şunlardır:

* Performans - bileşen etkileşimleri, kullanıcının tespit ettiği performans ve ağ verimliliğinde dominant faktör olabilir.
* Çok sayıda bileşeni ve bileşenlerarası etkileşimi ölçeklenebilirlik yapmak.
* Arayüzlerin sadeliği
* Değişen ihtiyaçları karşılamak için (uygulama yürütülürken dahi) bileşenlerin değiştirilebilirliği
* Hizmet vekillerince (İng. *İngilizce: service agents*) tarafından bileşenlerarası haberleşmenin görünürlüğü
* Program kodunu veriyle beraber hareket ettirerek bileşenlerin taşınabilirliği
* Sistem seviyesinde bileşenlerde, bağlantılarda veya verideki hatalara rağmen hataya karşı direnç güvenilirliği

Mimarî sınırlamaları
--------------------

REST'in mimarî özellikleri, bağlantılara, bileşenlere ve veri elementlerine belli etkileşim sınırlamaları uygulayarak erişilir.
Bu bölümdeki özelliklere sahip uygulamalar, "RESTful" olarak tasvir edilir.
Eğer hizmetler gerekli sınırlamaların herhangi birini ihlâl ederse artık RESTful olarak görülemezler. Bu sınırlamalarla uyumlu olma ve böylece REST mimarî stiliyle uyuşma, her çeşit hipermedya sisteminin performans, ölçeklenebilirlir, sadelik, değiştirilebilirlik, görünürlük, taşınabilirlik ve güvenilirlik gibi cazip fonksiyonel olmayan özelliklere sahip olmasını sağlar.

Formel REST sınırlamaları şunlardır:

### İstemci–sunucu

Ana madde: İstemci-sunucu
İstemcileri sunuculardan ayıran yeknesak bir arayüz. Bu, kavramların ayrılması (İng. *İngilizce: separation of concerns*), yani mesela istemcilerin sunucu dahilinde yapılmakta olan veri saklama ile ilgilenmedikleridir. Bunun sonucunda istemci yazılımının taşınabilirliği iyileşir. Sunucular da istemcilerde bulunan kullanıcı durumuyla ilgilenmezler. Böylece sunucular daha sade ve daha ölçeklenebilir olurlar. Sunucular ve istemciler de aralarındaki arayüz değiştirilmemesi şartıyla aynı fonksiyona sahip başkalarıyla değiştirilebilir ve farklı gruplarca birbirinden bağımsız olarak geliştirilebilirler.

### Durumsuzluk

Ana madde: Durumsuzluk (bilişim)
İstemci–sunucu haberleşmesi, iki talep arasında hiçbir istemci ortamının (İng. *İngilizce: client context*) sunucuda saklanmamasıyla daha fazla sınırlanmaktadır. Her istemciden gelen talep, hizmeti vermek için lazım olan bütün bilgileri içerir ve oturum durumu istemcide saklı kalır. Oturum durumu, sunucu tarafından veri tabanı gibi başka bir hizmete bir süre için transfer edilebilip denetlenebilir. İstemci, yeni bir duruma geçmek üzereyken istekler yollar. Bir veya birkaç istek yerine getirilmemişken istemci *geçiş* durumundadır (İng. *İngilizce: to be in transition*). Her uygulama durumunun sunumu, bu istemci yeni bir durum geçişi başlatacağı zaman tekrar kullanılabilecek bağlantılar ihtiva eder.

### Ön belleklenebilme

Ana madde: Web ön belleği
World Wide Web'de istemciler ve aracılar, cevapları ön belleğe alabilirler. Bu yüzden cevaplar, doğrudan veya dolaylı olarak kendilerini ön belleklenebilir (İng. *İngilizce: cacheable*) veya ön belleklenemez olarak tanımlamalıdırlar. Böylece başka isteklere cevaben istemcilerin bayat veya uygunsuz veri kullanımı önlenir. İyi yönetilmiş ön bellekleme (İng. *İngilizce: caching*) ile bâzı istemci–sunucu etkileşimlerini kısmen veya tamamen bertaraf edilir, böylece ölçeklenebilirlik ve performans daha da iyileşir.

### Tabakalı sistem

Ana madde: Tabakalı sistem
İstemci, genelde sondaki sunucuya veya yol boyunca bir aracıya bağlı olup olmadığını söyleyemez. Aracı sunucular, yük dengelemesi (İng. *İngilizce: load balancing*) ve bölüşülmüş ön bellekler (İng. *İngilizce: shared caches*) sağlayarak sistem ölçeklenebilirliği geliştirir. Bunun yanında güvenlik ilkelerini de güçlendirirler.

### Talep üzerine kod (isteğe bağlı)

Ana madde: İstemci tarafı betiği
Sunucular, geçici olarak istemcinin fonksiyonelliğini icra edilebilir kod yollayarak genişletebilir ya da özelleştirebilir (İng. *İngilizce: extend or customize code*). Java appletler ve JavaScript gibi istemci tarafı betikler bunlardan sayılır. "Talep üzerine kod", REST mimarisinde isteğe bağlı olan tek sınırlamadır.

### Yeknesak arayüz

Yeknesak arayüzü sınırlaması, her REST hizmeti için bir temel teşkil eder. eknesak arayüz, mimariyle sadeleştirip ayırır, böylece her taraf birbirinden bağımsız olarak gelişebilir. Yeknesak arayüzünün dört sınırlaması şunlardır:

Kaynakların belirlenmesi (İng. *İngilizce: identification of resources*)
Başlıbaşına kaynaklar, isteklerle belirlenir. Bu, mesela Web tabanlı sistemlerde yeknesak kaynak kimliği (İng. *İngilizce: uniform resource identifier, URI*) kullanılarak yapılır. Kaynaklar, kavramsal olarak istemcilere döndürülen sunumlarından (İng. *İngilizce: representation*) farklıdırlar. Mesela sunucu, hiçbirisi dahilî sunumu olmamasına rağmen veri tabanından gelen veriyi HTML, JSON veya XML olarak gönderebilir.
Bu temsiller yoluyla kaynakların manipülasyonu
Bir istemci temsilî kaynağı ona bağlı herhangi bir metaveriyle birlikte bulunduruyorsa bu kaynağı değiştirmek veya silmek için yeteri kadar bilgisi vardır.
Kendinden açıklayıcı mesajlar
Her mesajda kendisinin nasıl işleneceğine dair yeterli bilgi mevcuttur. Mesela hangi ayrıştırıcının (İng. *İngilizce: parser*) çalıştırılacağı bir İnternet medya tipi (İng. *İngilizce: Internet media type*, eskiden MIME tipi (*İngilizce: MIME type*) olarak bilinirdi) ile belirlenmiş olabilir. Uygulama durumu motoru olarak hipermedya (İng. *İngilizce: hypermedia as the engine of application state (HATEOAS)*)
İstemciler durum değişimini ancak sunucu tarafından hipermedya ile belirlenmiş dinamik eylemlerle yapabilirler (mesela hiper metinlerin içinde bulunan hiper bağlarla). Basit başlama noktalarının haricinde bir istemci, önceki temsillerle haber aldığının dışında herhangi bir kaynak için herhangi bir eylemin mevcudiyetini kabul edemez.

Kaynakça
--------

1. ↑  "Techopedia'da REST tanımı". 19 Kasım 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Mart 2015.
2. ↑  Roy Fielding (2000). "Architectural Styles and the Design of Network-based Software Architectures". UCU Donald Bren – School of Information & Computer Science. 19 Mart 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Mart 2015.
3. 1 2 3 4 5 6  
Fielding, Roy Thomas (2000). "Chapter 5: Representational State Transfer (REST)". *Architectural Styles and the Design of Network-based Software Architectures* (Ph.D.). University of California, Irvine. This chapter introduced the Representational State Transfer (REST) architectural style for distributed hypermedia systems. REST provides a set of architectural constraints that, when applied as a whole, emphasizes scalability of component interactions, generality of interfaces, independent deployment of components, and intermediary components to reduce interaction latency, enforce security, and encapsulate legacy systems.
4. ↑  "Fielding discusses the development of the REST style". Tech.groups.yahoo.com. 1 Eylül 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 14 Eylül 2014.
5. 1 2  Thomas Erl, Benjamin Carlyle, Cesare Pautasso, Raj Balasubramanian (2013). "5.1". Thomas Erl (Ed.). *SOA with REST*. Prentice Hall. ISBN 978-0-13-701251-0.
6. 1 2  
Fielding, Roy Thomas (2000). "Chapter 2: Network-based Application Architectures". *Architectural Styles and the Design of Network-based Software Architectures* (Ph.D.). University of California, Irvine.
7. ↑  Richardson, Leonard; Ruby, Sam (2007), *RESTful Web service*, O'Reilly Media, ISBN 978-0-596-52926-0, 19 Şubat 2012 tarihinde kaynağından arşivlendi, erişim tarihi: 18 Ocak 2011, The main topic of this book is the web service architectures which can be considered RESTful: those which get a good score when judged on the criteria set forth in Roy Fielding's dissertation.
8. ↑  "Fielding talks about application states". Tech.groups.yahoo.com. 21 Mayıs 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 7 Şubat 2013.

|  |  |
| --- | --- |
| Otorite kontrolü Bunu Vikiveri'de düzenleyin | 
* LCCN: sh2009000706

 |