2009-04-04 12 views
7

Bu, kafamı saran en zor zamana sahip olduğum REST asaleti olarak görünüyor. Uygulama için hipermetin tasarlanması/tanımlanması: Bu prensiplerin gerçek dünya uygulamalarına yönelik işaretçiler: Atom protokolü bu prensibi nasıl uygular? Bazıları bunu basit bir şekilde bir varsayımsal alışveriş sepeti dinlenme api'sine nasıl uygulayacağını açıklayabilir.Birisi basitçe "Hypertext uygulama durumu altyapısı olarak" açıklayabilir

cevap

5

Düzenli bir web sitesinde gezinmeyi düşünün. Ziyaret ettiğinizde, sayfaların içeriğini okuyorsunuz ve ne okuduğunuza ve ne yapmak istediğinize bağlı olarak, sayfadaki çeşitli bağlantıları takip ediyorsunuz. Bu gerçekten, "uygulama devleti motoru olarak hipermetin" in aşağı doğru kaydığının özüdür. Bu örnekte, uygulama durumu kafanızdaki durum ve bulunduğunuz sayfadır. Buna dayanarak, kafanızdaki uygulama durumunu değiştiren başka bağlantıları da geçersiniz.

Bunun için başka bir öğe var, akıl: Diğer tarafı, bu URI'leri tahmin etmenize gerek olmamasıdır: URI'ları bulmak için sayfada yeterli içerik olması gerekir (örneğin, uygulama bilgileri içerik türüne sahip ve URI şablonu gibi şeyler) veya izlenecek URI'ler mevcut olmalıdır. Bunun ötesinde, bir RESTful HTTP uygulaması URI'lerin yapısını önemsememelidir.

GÜNCELLEME: Öğeleri genişletmek için HTML formları HATEOAS'ı da gösterir. GET kullanan formlar, URI şablonlarının kullanımına benzer. HATEOS, HTTP GET kullanılarak yalnızca çapraz bağlantı yapmakla sınırlı değildir: POST (veya başka bir yöntem, tarayıcı bunu destekliyorsa) kullanarak, sunucuya gönderilecek bir gösterimi açıklamakla olabilir.

+0

URI şablon şemaları kötülerdir. OpenSearch, URI şablonlarının düzgün bir şekilde nasıl kullanıldığına iyi bir örnektir. Ancak eğer müşteri URI'larda sabitlenmişse, belli bir şekilde, REST olmayacaktır. –

+0

Hayır, istemci sunucudan aldığı URI şablonlarını kullanıyorsa, bu farklı bir hikaye, dolayısıyla OpenSearch örneğim. Sunucu, istemciye, URI'leri orada nasıl oluşturduğunu ve daha sonra grup dışı bilgiden bağımsız olarak istemciden nasıl yapacağını anlatıyor. –

0

Bu makale Flickr bağlamında bazı örnekler sağlanmaktadır.

Hypermedia in RESTful applications

+0

Flickr RESTful değil. Yalan söylüyorlar. REST'in yaratıcısı olan Fielding, Flickr'ın ne yaptıklarını bilmiyor. – aehlke

0

Bu konsepte bakmanın diğer bir yolu, durumun geçerli sayfa ve içine gömülmüş bağlarla temsil edilmesidir. Bir bağlantıyı geçme, bir sonraki sayfa tarafından temsil edilen uygulamanın durumunu değiştirir. Açıklamak biraz zor ... ... zamanın herhangi bir noktasında mevcut olan bağlantılar, daha önce gerçekleşmiş olan eylemlere dayanarak hangi eylemlerin mevcut olduğunu tanımlar. Bu "mevcut durum" un bir tanımıdır. Hile, mevcut eylemleri temsil etmek olan bir eylem üzerinde "harekete geçen" URI'leri temsil etmektir. Bir URI ile ilişkili gösterimi almak, eylemi dolaylı olarak gerçekleştirir ve sonuçta temsil edilen ifadeyi alır. URI'ler gösterime gömülür ve kullanıcı belirli bir URI ile ilişkili eylemi anlar. Çeşitli HTTP yöntemleri, gerçekleşen "eylemleri" tanımlamaya yardımcı olur ve hiçbir eyleme izin verilmediğinde belirtir. Bu genellikle insanların tüm RESTful paradigmasını açıklarken neler oluyor.

+2

Bunun çok doğru olduğunu düşünmüyorum. Ör. HTTP, yapabileceğiniz tek "eylemler" GET, POST, PUT ve DELETE. REST'te, URI'ler olarak kullanılabilir eylemleri temsil etmiyorsunuz, URI'lar aracılığıyla kaynakları açığa çıkarıyorsunuz ve insanların GET, POST, PUT ve DELETE (SİL) almasına izin veriyorsunuz. –

+1

HTTP fiillerinin doğru kullanılması REST değil. Sadece HTTP'yi doğru kullanıyor. – aehlke

12

Hipermedyayı açıklama girişiminde bulunduğumda, bir haritaya karşı yön tabelası yoluyla bir arabada gezinme örneğini kullanmayı seviyorum. Doğrudan size soruya cevap vermediğinin farkındayım ama yardımcı olabilir.

Bir aracı sürerken ve belirli bir kavşağa ulaştığınızda, o noktadan nereye gidebileceğinizi gösteren tabelalar verilir. Benzer şekilde, hiper ortam size mevcut durumunuza göre bir dizi seçenek sunar.

Geleneksel RPC tabanlı bir API daha çok harita gibidir. Bir harita ile, rotanızı statik bir yol verisi kümesine göre planlamanız eğilimi gösterir. Haritalarla ilgili bir sorun, güncelliğini yitirebilecekleri ve trafik veya diğer dinamik faktörler hakkında bilgi sağlamadıklarıdır.

İşaret levhalarının avantajı, inşaat nedeniyle trafik akışını kontrol etmek veya trafik akışını kontrol etmek için sineklerin değiştirilebilir olmalarıdır.

Tabelaların her zaman haritadan daha iyi bir seçenek olduğunu öne sürmüyorum. Açıkçası, artıları ve eksileri var ama her iki seçeneğin de farkında olmak değerlidir. Hipermedia ile aynıdır. Geleneksel RPC arayüzüne değerli bir alternatiftir.

+1

Harika bir örnek. Tabelasını benzer html linkler sanırım..right? – Surya

+0

Tam olarak. Sanırım bunu açıklamalıydım. –

+0

Bir küçük açıklama: "mevcut durumunuza dayalı bir dizi seçenek" muhtemelen, istemcinin duruma sahip olmaması gerektiği için "kaynak duruma dayalı bir dizi seçenek" olmalıdır. Sizin benzerliğiniz ile mevcut konumunuz kaynaktır. –

İlgili konular