REST ve HATEOAS web hizmetleri için iyi bir mimari midir?


15

Doğru anlarsam, REST, Roy Fielding tarafından web mimarisinin tanımlayıcı bir modeli olarak resmileştirildi . AFAIK Fielding, REST'in iyi olduğunu iddia etmedi, sadece webin fiili mimarisini tanımladı. Web zaten bu noktada muazzam bir başarılı dağıtılmış hipermetin sistemini kanıtlamıştı, bu nedenle bu tür REST'i öncelikle insanlar tarafından yönlendirilen ve tüketilen dağıtılmış hiper ortam alanı için başarılı bir mimari olarak doğrular.

REST web hizmetleri, API'lere REST mimarisi uygulanarak oluşturuldu. Ancak REST'in bu alan için istenen bir mimari olduğunu düşünmek için gerçekten bir sebep var mı? Daha spesifik olarak, HATEOAS'ın makineler arası iletişim için faydalı bir tasarım ilkesi olduğunu belirten herhangi bir kanıt var mı?

Benim endişem, HATEOAS'ın hiper medya için mantıklı olmasıdır, çünkü az bilinen içerik türleri (HTML, resimler, video vb.) Vardır ve istemci bunları nasıl kullanacağını bilir. Ancak API'ler için içerik türleri çok spesifiktir ve yalnızca istemci bunları tüketmek üzere özel olarak programlanmışsa, istemci tarafından anlamlı bir şekilde tüketilebilir. Bir URL'nin istemciye döndürülmesi kendi başına istemcinin belirtilen kaynağı tüketmesini sağlamaz.


2
Web HTTP kullanımını temel aldığından ve REST HTTP olduğundan, bunun mükemmel bir şey olduğunu düşünüyorum.
Rob

1
@Rob: HTTP'den daha fazla REST. Örneğin, SOAP ve XML-RPC de HTTP kullanır, ancak REST ile uyumlu değildir.
JacquesB

İkisi de REST mimarisine dayanmıyor. Bu nedenle fark.
Rob

4
Bu gerçekten zor bir soru. Çünkü nihayet önceki ya da şimdiki teknoloji kadar iyi ya da kötü. Görevinize bağlıdır. Bazı Görevler için çalışır. Diğerleri için Graphql veya Falcor / JSONGraph'a gidiyoruz. Ya da ikili (gRPC) bile yine modadır. Benim bakış açımdan, HATEOAS ve "akıllı müşteriler" in vaadi işe yaramadı. Tepegöz onu öldürdü.
Thomas Junk

Birçok şeye bağlı. Hepsi teknik konular değil. Uygulamayı içeren uygulama ve yürütme önemlidir.
Laiv

Yanıtlar:


15

AFAIK Fielding, REST'in iyi olduğunu iddia etmedi, sadece webin fiili mimarisini tanımladı.

Bu biraz anlıyor, sanırım. DİNLENME sonuçta ise, bir numaralandırma mimari tarzında olduğu Fielding kullanıyordum baş mimarı olarak HTTP / 1.1 spec .

Ancak REST'in bu alan için istenen bir mimari olduğunu düşünmek için gerçekten bir sebep var mı? HATEOAS'ın makineden makineye iletişim için faydalı bir tasarım ilkesi olduğunu gösteren herhangi bir kanıt var mı?

"Değişir". HATEOAS, REST'in tek tip arabirim kısıtlamasının bir parçasıdır .

Bileşen arabirimine yazılım mühendisliği genelliği ilkesi uygulanarak, genel sistem mimarisi basitleştirilir ve etkileşimlerin görünürlüğü artırılır. Uygulamalar sağladıkları hizmetlerden ayrılır ve bu da bağımsız evrimleşmeyi teşvik eder. Ancak değiş tokuş, tekdüze bir arabirimin verimliliği düşürmesidir, çünkü bilgi bir uygulamanın ihtiyaçlarına özgü olandan ziyade standart bir biçimde aktarılır. REST arabirimi, Web'in genel durumu için optimize edilen, ancak diğer mimari etkileşim biçimleri için en uygun olmayan bir arabirim ile sonuçlanan, büyük taneli hiper ortam veri aktarımı için verimli olacak şekilde tasarlanmıştır.

Şimdi bunun ne anlama geldiğini düşünelim. Kablosuz yönlendiricimle sorun yaşadığımda, stackexchange'e yanıt göndermek için kullandığım tarayıcıyı kullanarak iletişim kurabilirim. Özellikle, hangi tarayıcıyı kullandığım ya da tarayıcımın yönlendiricinin beklediğinden birkaç güncelleme (ya da önde) olup olmadığı önemli değil. Tarayıcıyı yazan mühendislik organizasyonunun, yönlendirici arayüzünü oluşturan organizasyondan tamamen bağımsız olması önemli değildir.

Bu işe yarıyor .

Elbette evrensel değil. Fielding, 2008 yılında şunları yazdı:

Bu, herkesin REST mimari stiline göre kendi sistemlerini tasarlaması gerektiği anlamına gelmez. REST, birden çok kuruluşa yayılan uzun ömürlü ağ tabanlı uygulamalar için tasarlanmıştır. Kısıtlamalara ihtiyaç duymazsanız, bunları kullanmayın.

REST mimari stilini oluşturan kısıtlamalar, indükledikleri özellikler için seçildi; bu özellikler kullanım durumunuz için değerli değilse, kesinlikle ilgili kısıtlamaları bırakmayı düşünmelisiniz.

Makineden makineye zorlaştığı yerde, insanın temsiller tarafından sağlanan semantiğe bulanıklık gösterme yeteneğini kaybetmiş olmanızdır. Müşteriler sadece medya türlerini bilerek alabilirler, ama normalde anlam elde etmek için semantik ipuçlarına bakan bir insana sahibiz.

schema.org , makine tarafından okunabilir bir kelime dağarcığı oluşturma çabasının bir parçasıdır; makine temsilcileri semantik ipuçlarını bulmak için istemciyi kullanır ve yapılacak doğru eylemleri seçmek için anlamın kendi anlayışını uygular.

Ama bu iş; kaynaklarınızın makine dostu sunumlarını geliştirmeye ve bu sunumların ileri ve geri uyumlu kalmasını sağlamaya yatırım yapmanız gerekir, böylece müşteriler bağımsız olarak geliştirilebilir.

Tek bir kuruluş hem istemciyi hem de sunucuyu denetlediğinde, bu bağımsızlığın faydaları çok daha küçüktür, bu durumda kısıtlama uygun bir mimari seçim olmayabilir.


İlginç bir cevap. Özellikle bu alıntıya dayanarak görünüyor " REST arayüzü, geniş çaplı hiper ortam veri aktarımı için verimli olacak şekilde tasarlandı, Web'in genel durumu için optimize edildi, ancak diğer mimari etkileşim biçimleri için en uygun olmayan bir arayüzle sonuçlandı. "Fielding , REST mimarisini hizmet API'leri için en uygun olarak görmezdi. (Tabii ki REST hala uygun değilse bile, SOAP daha iyidir!)
JacquesB

Fielding'in neyi en iyi değerlendireceğini söylemek zor :-). Bazı API ihtiyaçları büyük taneli hipermedya veri aktarımı içerir sanırım.
Laiv

6

Hayır, 'tam REST' o kadar da iyi değil.

HATEOS'u API'larında uygulayan kişilerin eksikliği ve HTTP fiilinin belirli bir çağrı için kullanılacak sonsuz argümanları ile kanıtlandığı gibi.

Ancak REST'in neden bu kadar popüler olduğunu bilmelisiniz. Kabul edilmeden önce, ebXML ve SOAP gibi teşekkür, zaman aşımı, konuşma kimlikleri ve durum içeren çılgın karmaşık protokoller vardı.

Bu şeyleri kurmak ve çalıştırmak ve daha sonra api tüketicilerine açıklamak zor bir işti. "Neden sadece sorgu dizesinde istediğim kimliğe sahip bir GET yapmıyorum ve bana veri gönderiyorsunuz?" açık ve yaygın bir soruydu.

Sonra ikinci sorun XML, javascript anlamadı, şemalar eşek bir ağrı vardı ve çoğunlukla oluşan büyük txt dosyaları ile sonuçlanır <MyLongObjectName>. Böylece insanlar bunun yerine JSON'u kullanmaya başladılar.

Şimdi REST'in etrafında bir kült var, ancak kurallar çok belirsiz olduğu için, tüketicilerin 'sadece alacakları' ve 6 aylık bir biniş olmadan kullanacakları kadar basit olan kullanılabilir bir API'yi engellemenizi engellemiyor. süreci.


Fielding'in sık sık dile getirdiği şikayetlerden biri, insanların REST'i anlama ve doğru uygulama eksikliğidir. Bu REST'in bir hatası değildir. Javascript'in XML ile başarısızlığı da REST ile ilgili herhangi bir sorun değildir. Javascript ve XML'nin REST ile hiçbir ilgisi yoktur. Fielding'in kendini çevrimiçi olarak erişilebilir hale getirdiği, tezinin dışında makaleler yazdığı, uygun REST kullanımı örneklerine işaret ettiği ve insanların HTTP'nin yazımını ve uygulamasını anlamada sorun yaşamadıkları anlaşıldığında, pek çok sorunun anlaşılmaması gerektiğini gösteriyor. ve REST'in düzgün bir şekilde uygulanması.
Rob

XML'in REST'in iyi bir API mimarisi olup olmadığı konusunda bir etkisi yoktur, standartta kaynak formatı olarak XML gerektiren hiçbir şey yoktur. JSON, HTML, düz metin, diğerleri arasında geçerli kaynaklardır.
Paul

2
Bence REST hakkında konuşurken standardın ne olduğunu ve insanların gerçekte ne uyguladıklarını bilmeliyiz ve daha sonra CALL 'REST'
Ewan

2

Roy'un REST prensiplerinin çoğunun orijinal mucidi olmadığını belirtmek gerekir, çeşitli spesifik problemleri çözmek için önceki sistemlerde çalıştığı bilinen birçok prensibi bir araya getirir. REST, bu ilkeleri tek bir mimaride uygulamanın doğal sonucudur.

Roy Fielding tezini REST üzerine yazmadan önce bile , HTTP daha sonra REST olarak bilinen ilkeler etrafında tasarlandı. Gelen tezini sonuca şunları yazdı:

İnternet Mühendisliği Görev Gücü içindeki mevcut Köprü Metni Aktarım Protokolü'nü (HTTP / 1.0) [19] tanımlama ve yeni HTTP / 1.1 [42] ve Tekdüzen Kaynak Tanımlayıcıları (URI) [21] standartlarının uzantılarını tasarlama çabalarımızın başında ], World Wide Web'in nasıl çalışması gerektiğine dair bir modele ihtiyaç olduğunu anladım. Temsili Devlet Transferi (REST) ​​mimari tarzı olarak adlandırılan genel bir Web uygulaması içindeki etkileşimlerin bu idealize modeli , önceden varolan mimarideki kusurların tanımlanabileceği ve genişletilebileceği yol gösterici ilkeleri sağlayan modern Web mimarisinin temeli oldu. dağıtımdan önce doğrulandı .

REST ve HATEOS, tasarlandığı soruna iyi bir uyum sağlar:

REST, bileşen uygulamalarının bağımsızlığını ve ölçeklenebilirliğini en üst düzeye çıkarırken gecikmeyi ve ağ iletişimini en aza indirmeye çalışan koordineli bir mimari kısıtlama kümesidir . Bu, diğer stillerin bileşen semantiğine odaklandığı bağlayıcı semantiğine kısıtlamalar koyarak elde edilir. REST, etkileşimlerin önbelleğe alınmasını ve yeniden kullanılmasını, bileşenlerin dinamik ikame edilebilirliğini ve eylemlerin aracılar tarafından işlenmesini sağlar , böylece Internet ölçeğinde dağıtılmış bir hiper ortam sisteminin ihtiyaçlarını karşılar.

Bununla birlikte, Web ve REST'in her sorun için uygun olmadığını belirtmek gerekir:

Benzer şekilde, önerilen uzantılar mimariye uygun olup olmadıklarını görmek için REST ile karşılaştırılabilir; değilse, bu işlevselliği daha uygulanabilir bir mimari stile paralel çalışan bir sisteme yönlendirmek daha etkilidir.

Yani sorunuz "REST ve HATEOAS web hizmetleri için iyi bir mimari midir?" o zaman cevap basitçe "evet, web servisleri için iyi bir mimaridir". Sorun gerçekten, insanların web kısıtlamalarına uyarlayarak çözmeye çalıştıkları tüm sorunların gerçekten ilk etapta web hizmetleri olup olmadığıdır.

Gerçekten REST'e uymayan birçok API vardır. REST'in çözmek için tasarlandığı türden bir ölçeklenebilirliğe ihtiyaç duymayan API'ler, bağımsız olarak gelişebilen ve uzun ömürlü olması gerekmeyen birden fazla kuruluş tarafından kullanılmaz; bu sorunlar için, REST kısıtlamaları sadece bir deli gömleğidir.

Ancak REST'in bu alan için istenen bir mimari olduğunu düşünmek için gerçekten bir sebep var mı? Daha spesifik olarak, HATEOAS'ın makineler arası iletişim için faydalı bir tasarım ilkesi olduğunu gösteren herhangi bir kanıt var mı?

Kanıt, Web'in birçok insanın problemlerini çözmedeki başarısıdır. REST, daha önceki birçok mimari stilin tasarımlarını birleştiren hibrit bir mimaridir. Birçok sorun etki alanı Web'in tüm gereksinimlerine sahip değildir ve iyi performans göstermesi için REST'in tüm kısıtlamalarına uymak zorunda değildir. Bu yüzden sadece REST'in bazı kısımlarını uygulayarak başarılı olan diğerlerini değil, iyi çalışan birçok başarılı mimari vardır. Örneğin, HATEOAS ve Uniform Interface, örgütsel sınırları ve nispeten kısa kullanımdan kaldırma süresi olan sistemleri geçmesi gerekmeyen API'lar tarafından atlanan ilkelerdir.


2

Fielding'in Adobe Experience Manager'daki sunumunda:

REST bir mimari DEĞİLDİR!

Dinlenme, internette var olan farklı mimarinin soyutlaması olan mimari bir stildir.

REST, mimari özellikleri teşvik etmek için tasarım kısıtlamalarının birikimidir

REST bir terimdir ve herkes RESTful API'ye sahip olmak ister. Gerçekte, insanlar REST kısıtlamaları ile karşı karşıya kaldıklarında, bu kısıtlamaların bazılarını bırakmışlardır, çünkü tüm kısıtlamaları uygulamalarına gerek yoktur ya da hiçbir faydaları yoktur.

Bahsettiğiniz gibi, HATEOAS istemci bir web tarayıcısı olduğunda kullanışlıdır. İstemci bir mobil uygulama olduğunda, belki de çok fazla değil. İyi bir uygulama olurdu, ancak böyle bir uygulama tasarlamanın maliyetleri de vardır, o kadar ki, örnek vermek gerekirse, mobil uygulama ekibi ve arka uç ekibi bu kısıtlamayı bırakmayı kabul etti. Ve bu tür bir mantıklı çünkü her iki ekip de aynı şirket için çalıştıkları için gevşek bağlanmış değiller.

AEM DİNLEME


0

istediğiniz başka bir sunucu tarafından tüketilen bir hizmet oluşturmaksa, xmlrpc doğru seçimdir. İstediğiniz bir hizmet, ince istemciler veya düşük güçlü cihazlar veya açık internet üzerinden bilinmeyen istemciler tarafından tüketilmekse, belki de json kullanarak dinlenme düşünün. Ancak unutmayın, json, xml ile karşılaştırıldığında genel verileri belirtmek için daha düşük bir gösterimdir.


1
JSON neden xml'den daha düşük?
Malky.Kid

@ Malky.Kid: Tabii ki herhangi bir XML belgesini JSON olarak temsil etmenin bir yolunu her zaman bulabiliriz, bu yüzden JSON onunla ifade edebileceğiniz şeylerden daha düşük değildir. Ancak, XML, bir şey için, herkesin bir veri şemasını icat etmesine ve karar vermesine gerek kalmadan meta verileri kutudan (şema, tür bilgileri, yorumlar, ad alanları, işleme talimatları, hatta kullanılacak karakter kodlaması) ifade etmek için daha sözdizimsel özellikler sunar. (JSON'da olduğu gibi) bu şeyleri yapmak için, bu anlamda JSON'dan daha üstün yetenekler sunduğunu söylemenin adil olduğunu düşünüyorum.
stakx
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.