8.1 Uzak API yaklaşımı

Bir istemci-sunucu mimarisi oluştururken tüm programcılar aynı hatayı yapar. Sunucuya yapılan istekleri yöntem çağrıları olarak işlemeye başlarlar .

Rapor oluşturma işlemini sunucuda başlatmak istiyorsanız, neden ona şöyle bir istek göndermiyorsunuz:

http://server.com/startDocumentGeneration?params

Ve tamamlandıktan sonra raporu nasıl indirebilirim? Bunu yapmak için başka bir yöntem yazacağız:

http://server.com/getDocument

Sunucu, HttpSessionbelgemizdeki bilgileri depolar ve belge oluşturulur oluşturulmaz, sunucu onu geri verir.

Harika bir yaklaşım. Ya da değil?

Yaklaşım gerçekten korkunç. Mesele şu ki, sunucunun belge numarasını hatırlaması gerekiyor. Başka bir deyişle, yeni yöntem çağrılarını düzgün bir şekilde işlemek için sunucunun önceki yöntemleri çağırmanın sonuçlarını hatırlaması gerekir.

Web'de bu büyük bir sorundur. İnternet kaybolabilir, tarayıcı kapanabilir. Sayfa yeniden yüklenebilir veya yanlışlıkla bir bağlantıya tıklanabilir vb. Ve sunucu, önceki kullanıcı isteklerinden megabaytlarca veri depolamaya devam edecek ...

Sunucuyla rahat çalışma için, sunucuya yapılan önceki isteklerin verilerinin her zaman elinizin altında olmasını bekleyemezsiniz.

O halde sunucunun yöntemleri nasıl çağrılır? Doğru cevap korkunç olurdu: mümkün değil!

8.2 REST yaklaşımı

Programcılar temel bilgilere geri döndüler ve başlangıçta isteğin sunucudaki dosyanın yolunu içerdiğini hatırladılar:

http://server.com/path?params

Ve bu yaklaşımı maksimumda kullanmaya karar verdik.

Artık sunucu, ağaç biçiminde dışarıdan görülebilen bir veri deposu olarak kabul ediliyor .

Tüm kullanıcıların bir listesini almak istiyorsanız, sorguyu arayın:

http://server.com/users

113 numaralı kullanıcı hakkında veri almak istiyorsanız, sorguyu çalıştırın:

http://server.com/users/113

Ve benzeri, hepsi aynı damarda.

Bir kez daha sunucu, dışarıdan bir ağaç şeklinde görülebilen bir veri deposu olarak görülüyor.

Veriler alınabilir - GET istekleri , değiştirilmiş - POST istekleri ve silinen - DELETE istekleri .

8.3 Durum yok

İstemci ve sunucu arasındaki REST etkileşim protokolü aşağıdaki koşulu gerektirir: istemciden gelen istekler arasındaki süre boyunca, sunucuda istemcinin durumu hakkında hiçbir bilgi depolanmaz.

İstemciden gelen tüm istekler, sunucunun isteği yerine getirmek için ihtiyaç duyduğu tüm bilgileri her seferinde alacağı şekilde hazırlanmalıdır . Oturum durumu istemci tarafında kaydedilir.

İstemci isteklerinin işlenmesi sırasında, istemcinin geçiş durumunda olduğu kabul edilir. Her bir uygulama durumu, istemcinin bir sonraki isabetinde çağrılabilen bağlantılarla temsil edilir.

8.4 Arayüz bütünlüğü

Sunucudan nesneleri almak için kullanılan tüm yollar standartlaştırılmıştır. Bu, özellikle diğer REST sunucularından veri alıyorsanız çok kullanışlıdır.

Tüm nesne arayüzleri üç koşula uymalıdır:

kaynak tanımlama

Tüm kaynaklar, bir URI kullanılarak isteklerde tanımlanır. Sunucu içindeki kaynaklar, istemcilere döndürülen görünümlerden ayrıdır. Örneğin, bir sunucu, veritabanından HTML, XML veya JSON olarak veri gönderebilir ve bunların hiçbiri sunucu içinde bir depolama türü değildir.

Bir Görünüm Aracılığıyla Kaynakları Manipüle Etme

İstemci, meta veriler de dahil olmak üzere kaynağın bir temsilini saklıyorsa, sunucudaki kaynağı değiştirmek veya silmek için yeterli bilgiye sahiptir.

"Kendini tanımlayan" mesajlar

Her mesaj, nasıl ele alınacağını anlamak için yeterli bilgi içerir. Örneğin, kullanıcı hakkında bilgiye ihtiyacınız varsa, sunucu size ad ve adres alanlarının olacağı bir JSON nesnesi döndürür.

Danışanın cevaptaki ilk sayının yaş, ikinci sayının doğum tarihi olduğunu bilmesi gereken bir durum olmamalıdır.

8.5 Önbelleğe Alma

REST yaklaşımı, veri isteklerinin HTTP protokolü aracılığıyla yapıldığını varsayar. Bu nedenle, nesneler bir GET isteği çağrılarak elde edilir. Bu, bir GET isteği yoluyla alınan tüm kaynaklar gibi, HTTP kaynaklarının önbelleğe alınmasıyla ilgili tüm kurallara tabi oldukları anlamına gelir.

Yani, REST API aracılığıyla alınan veriler, web sunucularındaki herhangi bir statik kaynakla aynı şekilde önbelleğe alınır. Güzellik :)