Netflix veya Twitter tarzı bir web hizmeti REST veya SOAP kullanmalı mı? [kapalı]


145

İki REST hizmeti uyguladım: Twitter ve Netflix. Her iki seferde de, bu hizmetleri SOAP yerine REST olarak ortaya çıkarma kararına dahil olan kullanımı ve mantığı bulmakta zorlandım. Umarım birileri bana neyi kaçırdığıma dair ipucu verebilir ve REST'in neden bu gibi hizmetler için hizmet uygulaması olarak kullanıldığını açıklayabilir.

  1. Bir REST hizmetinin uygulanması, bir SOAP hizmetinin uygulanmasından çok daha uzun sürer. Bir WSDL'de okumak ve proxy sınıfları ve istemcileri çıkarmak için tüm modern diller / çerçeveler / platformlar için araçlar mevcuttur. Bir REST hizmetinin uygulanması elle yapılır ve - bunu elde edin - belgeleri okuyarak. Ayrıca, bu iki hizmeti uygularken, gerçek bir şema veya referans belgesi olmadığından, borudan neyin geri geleceği konusunda "tahminler" yapmanız gerekir.

  2. Neden yine de XML döndüren bir REST hizmeti yazasınız? Tek fark, REST ile her öğenin / özniteliğin temsil ettiği türleri bilmemenizdir - bunu uygulamak için kendi başınızasınız ve bir gün, her zaman bir int olduğunu düşündüğünüz bir alanda bir dizgeye rastlamayacağınızı umuyorsunuz . SOAP, WSDL'yi kullanarak veri yapısını tanımlar, bu yüzden bu çok basittir.

  3. SABUN ile SOAP Zarfının "ek yüküne" sahip olduğunuz şikayetini duydum. Bu gün ve çağda, gerçekten bir avuç bayt için endişelenmemiz gerekiyor mu?

  4. REST ile URL'yi tarayıcıya açıp verileri görebileceğiniz argümanını duydum. Elbette, REST hizmetiniz basit kimlik doğrulaması kullanıyorsa veya hiç kullanmıyorsa. Örneğin Netflix hizmeti, isteğinizi göndermeden önce bir şeyleri imzalamanızı ve bir şeyleri kodlamanızı gerektiren OAuth kullanır.

  5. Neden her kaynak için "okunabilir" bir URL'ye ihtiyacımız var? Hizmeti uygulamak için bir araç kullanıyor olsaydık, gerçek URL'yi gerçekten önemsiyor muyuz?


5
REST'in "icat edilmediğini", HTTP'nin başlangıcından beri var olduğunu unutmamalısınız.
Dirk Vollmar

5
Roy Fielding ile aranızdaki bir konuşma oldukça eğlenceli olabilir. :)
Gert Grenander

1
Bizi başlatacak birkaç şey. Birincisi, nefret güçlü bir kelimedir. İkincisi, sektörümüz bir şeyler yapmanın birden fazla yolu ile dolu. Dolayısıyla, REST'in varlığına ilişkin felsefi tartışmaya girmeyeceğim . Bir itibariyle iyi bir geliştirici, sen hangisi teknoloji iyi çözer sorun kullanarak açık olmalıdır. Bazı web hizmetleri için bu REST olabilir. Daha fazlasını yazdım ama bu kapandı;)
Jason McCreary

1
@ Joe: Alınan nokta. Ancak REST'in ironisinin bir parçası, "yeni" bir teknoloji olmaması, 90'ların başından beri işe yarayan bir şey için yeni bir moda sözcük olması. Ve @ jsm11482: İşte tam da bu yüzden bu soru "öznel ve tartışmacı" olarak kapatılıyor - çünkü tartışmaları çekiyor!
Daniel Pryden

2
Bu soruya cevabım burada bit.ly/cAdYAr
Darrel Miller

Yanıtlar:


193

Kömür madenindeki bir kanarya.

Yaklaşık bir yıldır böyle bir soru bekliyordum. Bu günün gelmesi kaçınılmazdı ve eminim önümüzdeki aylarda buna benzer daha birçok soru göreceğiz.

Uyarı işaretleri

Kesinlikle haklısınız, RESTful istemcileri oluşturmak SOAP istemcilerinden daha uzun sürer. SOAP araç kitleri, çok sayıda standart kod alır ve istemci proxy nesnelerini neredeyse hiç çaba harcamadan kullanılabilir hale getirir. Visual Studio ve bir sunucu URL'si gibi bir araçla, rastgele karmaşıklıktaki uzak nesnelere yerel olarak beş dakikadan daha kısa sürede erişebiliyorum.

Application / xml ve application / json döndüren hizmetler, istemci geliştiriciler için çok can sıkıcıdır. Bu veri bloğuyla ne yapmamız gerekiyor?

Neyse ki, REST hizmetleri sağlayan pek çok site, aynı zamanda bir dizi istemci kitaplığı da sağlar, böylece bu kitaplıkları, bir dizi güçlü türde nesneye erişim sağlamak için kullanabiliriz. Yine de biraz aptal görünüyor. SOAP kullanmış olsalardı, bu proxy sınıflarını kendimiz kod üretebilirdik.

SABUN tepegöz, ha. Öldüren gecikmedir. İnsanlar kablo üzerinden geçen fazla bayt sayısı konusunda gerçekten endişeliyse, o zaman HTTP doğru seçim olmayabilir. Kullanıcı aracısı başlığı tarafından kaç bayt kullanıldığını gördünüz mü?

Evet, HTML ve javascript dışında herhangi bir şey için hata ayıklama aracı olarak bir web tarayıcısı kullanmayı hiç denediniz mi? Güven bana berbat. Fiillerden yalnızca ikisini kullanabilirsiniz, önbelleğe alma sürekli olarak araya giriyor, hata işleme o kadar çok bilgiyi yutuyor ki, sürekli olarak lanet bir favicon.ico arıyor. Sadece bana ateş et.

Okunabilir URL. Sadece isimler, fiiller yok. Evet, sadece CRUD işlemlerini yaptığımız ve nesnelerin hiyerarşisine yalnızca tek bir yoldan erişmemiz gerektiği sürece bu kolay. Ne yazık ki çoğu uygulama bundan biraz daha fazla işlevselliğe ihtiyaç duyar.

Yaklaşan felaket

Şu anda sahip olduğunuz aynı sonuçlara varma sürecinde olan REST hizmetleriyle entegre olan uygulamalar geliştiren geliştiricilerin bir metrik yükü var. Basitlik, esneklik, ölçeklenebilirlik, evrim geçirebilirlik ve şans eseri yeniden kullanımın kutsal kasesi vaat edildi. Web'in kendisinin özellikleri, işler nasıl ters gidebilir.

Ancak, sürüm oluşturmanın da bir sorun olduğunu anlıyorlar, ancak derleyici sorunları tespit etmeye yardımcı olmuyor. El ile yazılmış istemci kodu, veri yapıları geliştikçe ve URL'ler yeniden düzenlenirken sürdürülmesi gereken bir sıkıntıdır. API'leri sadece isimler ve dört fiil etrafında tasarlamak gerçekten zor olabilir, özellikle RESTful Url zealotları sorgu dizelerini ne zaman kullanıp kullanamayacağınızı size söyler.

Geliştiriciler, hem Json formatlarını hem de Xml formatlarını desteklemek için neden çabalarımızı boşa harcadığımızı sormaya başlayacaklar, neden çabalarımızı sadece birine odaklanıp bunu iyi yapmayalım?

İşler nasıl bu kadar yanlış gitti

Sana neyin yanlış gittiğini söyleyeceğim. Biz geliştiriciler olarak pazarlama departmanlarının birincil zayıflığımızdan yararlanmasına izin veriyoruz. Gümüş kurşun için sonsuz arayışımız bizi REST'in gerçekte ne olduğu gerçeğine kör etti. Yüzeyde REST çok kolay ve basit görünüyor. Kaynaklarınızı URL'lerle adlandırın ve GET, PUT, POST ve DELETE'i kullanın. Cehennem, biz geliştiriciler bunu nasıl yapacağımızı zaten biliyoruz, yıllardır tabloları, sütunları ve SELECT, INSERT, UPDATE ve DELETE içeren SQL ifadeleri olan veritabanları ile uğraşıyoruz. Bir parça kek olmalıydı.

Kendini tanımlayabilme ve hiper ortam kısıtlaması gibi bazı kişilerin tartıştığı REST'in başka bölümleri de vardır, ancak bu kısıtlamalar kaynak tanımlama ve tek tip arayüz kadar basit değildir. Görünüşe göre, istenen hedef basitliktir.

REST'in bu sulandırılmış sürümü, geliştirici kültüründe birçok yönden doğrulanmıştır. Kaynak Tanımlamayı ve tek tip arabirimi teşvik eden ancak diğer kısıtlamaları desteklemek için hiçbir şey yapmayan sunucu çerçeveleri oluşturuldu. Yaklaşımlar, (HI-REST vs LO-REST, Corporate REST vs Academic REST, REST vs RESTful) farklılaşan terimler etrafında dalgalanmaya başladı.

Birkaç kişi, tüm kısıtlamaları uygulamazsanız, bunun REST olmadığını haykırıyor. Faydaları alamayacaksın. Yarı DİNLENME yok. Ancak bu sesler, kıymetli terimlerinin bilinmezlikten çalınması ve ana akım haline getirilmesi nedeniyle üzülen dini fanatikler olarak etiketlendi. REST'i olduğundan daha zor hale getirmeye çalışan kıskanç insanlar.

REST terimi, kesinlikle ana akım haline geldi. Bir API'ye sahip hemen hemen her büyük web mülkü "REST" i destekler. Twitter ve Netflix çok yüksek profilli iki tanesidir. Korkunç olan şey, yalnızca kendi kendini tanımlayan bir genel API düşünebiliyorum ve hiper ortam kısıtlamasını gerçekten uygulayan bir avuç var. StackOverflow ve Gowalla gibi bazı sitelerin yanıtlarında bağlantıları desteklediğinden emin olun, ancak bağlantılarında büyük boşluklar var. StackOverflow API'nin kök sayfası yoktur. Web sitesi için bir ana sayfa olmasaydı web sitesinin ne kadar başarılı olacağını bir düşünün!

Kandırıldın korkarım

Şimdiye kadar yaptıysanız, sorunuzun kısa cevabı şu API'lerin (Netflix ve Twitter) tüm kısıtlamalara uymamasıdır ve bu nedenle REST apis'in getirmesi gereken faydaları elde edemezsiniz.

REST istemcilerinin oluşturulması SOAP istemcilerinden daha uzun sürer, ancak bunlar belirli bir hizmete bağlı değildir, bu nedenle bunları hizmetlerde yeniden kullanabilmeniz gerekir. Bir web tarayıcısının klasik örneğini ele alalım. Bir web tarayıcısı kaç hizmete erişebilir? Peki ya Feed Okuyucu? Şimdi ortalama Twitter istemcisi kaç farklı hizmete erişebilir? Evet, sadece bir.

REST istemcilerinin tek bir hizmetle arabirim oluşturacak şekilde oluşturulmaması gerekir, herhangi bir hizmet tarafından sunulabilecek belirli ortam türlerini işlemek için oluşturulmaları gerekir. Buradaki açık soru, application / json veya application / xml sağlayan bir hizmet için bir REST istemcisini nasıl oluşturabileceğinizdir. Yapamazsın. Bunun nedeni, bu formatların bir REST istemcisi için tamamen yararsız olmasıdır. Kendin söyledin,

gerçek bir şema veya referans belgesi olmadığı için borudan neyin geri geleceği konusunda "tahminler" yapmanız gerekir

Twitter gibi hizmetler için kesinlikle haklısınız. Bununla birlikte, REST'teki kendi kendini tanımlayan kısıtlama, HTTP içerik türü başlığının kablo üzerinden iletilen içeriği tam olarak tanımlaması gerektiğini söyler. Application / json ve application / xml'yi sunmak size içerik hakkında hiçbir şey söylemez.

REST tabanlı sistemlerin performansı düşünüldüğünde, büyük resme bakmak gerekir. Zarf baytları hakkında konuşmak, hızlı sıralamayı kabuk sıralamasıyla karşılaştırırken döngü çözülmesinden bahsetmek gibidir. SOAP'ın daha iyi performans gösterebileceği senaryolar vardır ve REST'in daha iyi performans gösterebileceği senaryolar vardır. Bağlam her şeydir.

REST, hangi medya türlerini desteklediği konusunda çok esnek davranarak ve önbelleğe alma için gelişmiş desteğe sahip olarak performans avantajının çoğunu kazanır. Önbelleğe almanın iyi çalışması için neredeyse tüm kısıtlamalara uyulması gerekir.

Okunabilir url'ler hakkındaki son noktanız, en ironik olanıdır. Hiper ortam kısıtlamasına gerçekten bağlı kalırsanız, her URL bir GUID olabilir ve istemci geliştiricisi okunabilirlikte hiçbir şey kaybetmez.

URI'lerin istemciye opak olması gerektiği gerçeği, REST sistemlerini geliştirirken en önemli şeylerden biridir. Okunabilir URL'ler sunucu geliştiricisi için uygundur ve iyi yapılandırılmış URL'ler, sunucu çerçevesinin istekleri göndermesini kolaylaştırır, ancak bunlar API'yi tüketen geliştiriciler üzerinde hiçbir etkisi olmaması gereken uygulama ayrıntılarıdır.

Twitter API RESTful olmaya yakın bile değil ve bu yüzden SABUN üzerinden kullanmanın herhangi bir yararı göremiyorsunuz. Netflix API çok daha yakındır, ancak genel medya türlerinin kullanılması, tek bir kısıtlamaya bile uyulmamasının hizmetten elde edilen faydalar üzerinde derin bir etkisi olabileceğini göstermektedir.

Hepsi onların suçu olmayabilir

Hizmet sağlayıcılara bir sürü damping yaptım, ancak DİNLENMEK için dans etmek iki kişi alır. Bir hizmet, tüm kısıtlamaları dini olarak takip edebilir ve bir müşteri yine de tüm faydaları kolayca geri alabilir.

Bir istemci belirli kaynak türlerine erişmek için URL'leri sabit kodluyorsa, sunucunun bu URL'leri değiştirmesini engelliyor demektir. Hizmetin url'lerini nasıl yapılandırdığına dair örtük bilgiye dayalı her türlü URL yapısı bir ihlaldir.

Bir bağlantıdan ne tür bir temsilin döndürüleceğine ilişkin varsayımlarda bulunmak sorunlara yol açabilir. HTTP başlıklarında açıkça belirtilmeyen bilgiye dayalı olarak temsilin içeriği hakkında varsayımlar yapmak, kesinlikle ileride acıya neden olacak bir bağlantı oluşturacaktır.

SABUN kullanmalı mıydı?

Şahsen ben öyle düşünmüyorum. Doğru yapılan REST, dağıtılmış bir sistemin uzun vadede gelişmesine izin verir. Farklı insanlar tarafından geliştirilen ve uzun yıllar dayanması gereken bileşenlere sahip dağıtılmış sistemler kuruyorsanız, REST oldukça iyi bir seçenektir.


4
Bunların hepsi doğru olmayabilir. Amazon, web hizmetleri için hem SOAP hem de REST arayüzlerine sahiptir ve kullanımlarının% 85'i REST arayüzüne aittir. SOAP yığını üzerindeki tüm kurumsal yutturmaca rağmen, bu, geliştiricilerin daha basit REST yaklaşımını sevdiklerini oldukça ikna edici bir kanıt. KAYNAK: oreillynet.com/pub/wlg/3005
Suraj Chandran

3
Hayır, bu sadece web geliştiricilerinin daha basit olarak algıladıkları şeyi sevdiklerine dair ikna edici bir kanıt, aslında herhangi bir uzun vadede veya performans odaklı bir şekilde daha üstün olduğuna dair değil. Gerçek şu ki, belirli bir iş için doğru araç gerekli olan şeydir, "Bu aracı biliyorum, bu nedenle tüm işler ona uymalıdır."
Kevin Williams

61

SOAP, nesne yönelimli , uzaktan yordam çağrısı teknolojisi yığınıdır. Mevcut bir protokolün (HTTP) üzerine yeni bir soyutlama oluşturarak çalışır.

REST, yalnızca mevcut bir protokolün (HTTP) özelliklerini kullanan, belge odaklı bir yaklaşımdır. "DİNLENME" sadece moda bir kelimedir - kavram şudur: Web'i çalışmak için tasarlandığı şekilde kullanın!

Soruda yapılacak düzenlemelere yanıt olarak:

  1. "Bir REST hizmetinin uygulanması, bir SOAP hizmetinin uygulanmasından çok daha uzun sürer."

    Hayır, sonsuza kadar olamaz . Ve almaya çalıştığınız şeyin zaten bir belge veya dosya olduğu durumlarda , aslında çok daha hızlıdır . Örneğin, WMS (Web Haritalama Hizmeti) için OGC spesifikasyonu protokolün hem SOAP hem de REST versiyonunu tanımlar ve hemen hemen hiç kimsenin SOAP versiyonunu uygulamamasının bir nedeni vardır - çünkü bir harita almaya çalışıyorsanız, Sadece bir URL oluşturmak ve bu URL'den görüntü baytlarını almak, onu bir SOAP mesajına kapsüllemekle uğraşmaktan çok daha kolaydır. Ancak evet, web hizmetinin amacı bir etki alanı nesne modelinde güçlü yazılmış bir nesneyi aktarmaksa, SOAP'ın bu kullanım için daha uygun olduğunu kabul ediyorum.

  2. "Neden yine de XML döndüren bir REST hizmeti yazasınız?"

    Evet, bu aptalca olabilir. Ancak XML'in ne olduğuna bağlı. Bir yerde bunun için açıkça tanımlanmış bir şema varsa, o zaman belirsizlik yoktur. Örneğin, WSDL URL'lerini bir web hizmeti hakkında bilgi almak için bir tür RESTful web hizmeti olarak düşünebilirsiniz. Bu durumda, başka bir SOAP isteğinin ek yükünü eklemek anlamsız olacaktır.

    Genel olarak, REST, aktarılan içerik tek bir birim olarak bir dosya olarak düşünülebildiğinde kazanır . SOAP, içeriğin üyelerle birlikte bir nesne olarak ele alınması gerektiğinde kazanır .

  3. "SOAP ile SOAP Zarfının" ek yüküne "sahip olduğunuz şikayetini duydum. Bu çağda, gerçekten bir avuç bayt için endişelenmemiz gerekiyor mu?"

    Evet. Her durumda değil, ancak fark yaratan çok fazla trafiğe sahip siteler var. REST yerine SOAP kullanmanın anlamsal farklılıklarından daha ağır basmak yeterli mi? Şüpheliyim. Bir nesne uzaktan kumanda protokolü yapıyorsanız ve bayt sayısı bir fark yaratıyorsa, SOAP muhtemelen sizin için bir araç değildir - belki bunun yerine CORBA veya DCOM kullanmalısınız.

  4. "REST ile URL'yi tarayıcıya açıp verileri görebileceğiniz argümanını duydum."

    Evet ve verileri bir tarayıcıda görüntülemek mantıklıysa, bu REST lehine büyük bir argümandır . Örneğin, resim verileriyle, hizmette hata ayıklamanın kolay bir yoludur - URL'yi tarayıcınızın adres çubuğuna yapıştırmanız ve resmin nasıl göründüğüne bakmanız yeterlidir. Veya döndürülen veriler XML ise ve tarayıcıda okunabilir HTML olarak işlenen referanslı bir XML stil sayfanız varsa, tek bir pakette semantik işaretleme ve kolay görselleştirme avantajlarından yararlanabilirsiniz. Ancak haklısınız, bu fayda daha karmaşık kimlik doğrulama düzenleriyle çalışırken çoğunlukla ortadan kalkıyor. Eğer yapamıyorsanız her HTTP isteğinde içine tüm kimlik doğrulama bilgilerini kodlamak , o zaman ben bunu hiç DİNLENME olarak sayılmaz iddia ediyorum.

  5. "Neden her kaynak için" okunabilir "bir URL'ye ihtiyacımız var? Hizmeti uygulamak için bir araç kullanıyor olsaydık, gerçek URL'yi gerçekten önemsiyor muyuz?"

    Duruma göre değişir. Web'deki herhangi bir kaynak için neden okunabilir URL'lere ihtiyacımız var? Gerekçe için Tim Berners-Lee'nin Soğuk URI'leri Değişmez adlı makalesini okuyabilirsiniz , ancak temelde, kaynak gelecekte hala yararlı olabildiği sürece, o kaynağın URI'si aynı kalmalıdır.

    Açıktır ki, geçici kaynaklar için (makaledeki "bugünün Parası" bağlantısı gibi) buna gerek yoktur, çünkü ilgili kaynak ortadan kalktığında kaynağa başvurma ihtiyacı ortadan kalkar. Ancak daha kalıcı kaynaklar için (örneğin StackOverflow soruları veya IMDB'deki filmler gibi), sonsuza kadar çalışacak bir URL'ye sahip olmak istersiniz. Bir web hizmeti tasarlarken, kaynakların hizmetinizden daha uzun yaşayıp yaşamayacağına karar vermeniz gerekir ve eğer öyleyse, o zaman REST muhtemelen doğru yoldur.

Kayıt için, evet, NetFlix veya Twitter'ın varlığından çok önce web sayfaları geliştiriyorum. Ve hayır, henüz NetFlix veya Twitter'ın hizmetlerine bir istemciyi uygulama ihtiyacım veya fırsatım olmadı. Ancak hizmetleriyle çalışmak acımasızca zor olsa bile, bu, hizmetlerini uyguladıkları teknolojinin kötü olduğu anlamına gelmez - yalnızca bu iki uygulamanın kötü olduğu anlamına gelir.

Uzun lafın kısası: REST ve SABUN sadece araçlardır . Her birinin güçlü ve zayıf yönleri vardır. Elinizdeki tek alet bir çekiçse, o zaman her sorun bir çivi gibi görünür. Bu nedenle, her iki aracı da tanıyın ve bunları nasıl doğru şekilde kullanacağınızı öğrenin ve ardından her iş için doğru aracı seçin.


11
SOAP'un HTTP ile sınırlı olmadığını, dolayısıyla ek soyutlamanın olduğunu unutmayın. SOAP tarzı mesajlaşma, çok sayıda protokolde kullanılabilir ve bu nedenle REST'ten daha geniş bir erişime sahiptir. Bence bu, çoğu katı REST destekçisinin bazen fark edemediği basit bir gerçek. REST'in yeri var, ama SABUN da.
jrista

4
@jrista: İyi nokta. Sorunun gerçekten bir çivi olduğu sürece, tıpkı bir çekiçle ilgili bir sorun olmadığı gibi, SABUN'da da bir sorun yok değil. Aksine, bu soru şöyle diyor: "Tornavidalardan nefret ediyorum! Bir çekiç neden herkes için yeterince iyi değil? Tornavidaların var olması gerektiğine beni ikna edin!" - ki bu bağlamda ortaya konulduğunda saçma olduğu ortaya çıkar.
Daniel Pryden

2
REST, mimari bir tarzdır. Eğer gerçekten isterseniz SOAP ile RESTful servisler yapabilirsiniz. Bence REST topluluğunun SOAP wrt HTTP'ye karşı sahip olduğu ana suçlama, SOAP'un HTTP'yi bir aktarım protokolü, oysa bir aktarım protokolü olarak düşünmesidir.
Bruno

@Daniel: Yukarıdaki soruya tamamen katılıyorum ... korkunç soru ve olabildiğince ideal bir "öznel ve tartışmacı" örneği ve kesinlikle daha saçma olamazdı. : PI, SABUN hakkında bir ayrım yapardı ancak ... Bence "İsviçre çakısı" faturasına "çekiç" ten çok daha iyi uyuyor. ; P
jrista

3
@Daniel Sheesh! Kimseyi gücendirmek istemedim. Bu dürüst bir soruşturma çünkü REST'in bu hizmetler ve onlar gibi hizmetler için doğru yaklaşım olduğunu düşünmüyorum. Lütfen ilk bakışta sorumu yazmayın. Sanırım "tartışmacı" olmasının bir sakıncası yok çünkü gerçekte bir argüman oluşturuyorum. Ben sadece bir çürütme istiyorum. REST'in "web'i çalışmak için tasarlandığı gibi kullandığını" söyleyerek, "bana" tüm Twitters ve Facebook'lardan önceki günümde "gibi geliyor ..." REST'in neden bu türler için uygun olduğunu açıklayan herhangi bir bilgi vermediniz hizmetlerin. Detaylandırmak ister misin?
Josh M.

17

Dürüst bir soru, dürüst bir cevabı hak eder. Ama önce, doğası gereği retorik olduğunu düşünmediyseniz , neden bu sorunun metnini başka bir soruya yanıt olarak kullandınız ?

Her neyse:

  1. " Araçlar WSDL ve çıkış vekil sınıfları ve müşteriler bir okumak için tüm modern dilleri / çerçeveler / platformları için mevcuttur. REST hizmetini gerçekleştirme belgeleri okuyarak elle yapılır. "

    Tıpkı tarayıcı satıcılarının tutarlı bir göz atma deneyimi uygulamaya çalışmak için HTML 4.01 spesifikasyonunu yukarı ve aşağı okudukları gibi. Tarayıcıların internet bankacılığı ve yığın aşımından çok önce icat edildiği gerçeğini düşündünüz mü ve yine de bunları yapmak için bir tarayıcı kullanabilirsiniz. Bu, herkesin HTML'yi (ve CSS, JS, JPEG vb. İlgili formatları) kullanmayı kabul etmesi nedeniyle mümkün olmuştur.

    Bloglama aslında o kadar da yeni değil ve birisi AtomPub ile geldi; bu, herhangi bir web tarayıcısının herhangi bir web sayfasına erişebilmesi gibi, herhangi bir blog yazılımının bir blogdaki yayınlara erişmesine ve bunları güncellemesine izin verir. Bu oldukça temiz ve protokolün getirdiği RESTful kısıtlamaları nedeniyle çalışıyor.

    Ancak Twitter ve Netflix için, temel olarak mikroblog çok yeni olduğu için, "var olan tüm mikro blogların medya türü uygulamasını / tweet'i kullanacağına" dair evrensel bir anlaşma yoktur. Belki birkaç yıl içinde birkaç mikroblog hizmeti aynı API'ye yerleşir, böylece Twitter, Facebook, Identica ve birlikte çalışabilir. Mevcut API'lerinin hiçbiri RESTful'a yakın değil, iddia ettikleri kadarıyla, bu yüzden bunun çok yakında olmasını beklemiyorum.

    " Dahası, bu iki hizmeti uygularken, gerçek bir şema veya referans belgesi olmadığı için borudan neyin geri geleceği konusunda" tahminler "yapmanız gerekir. "

    Çiviyi kafasına çarptın. REST tamamen dağıtılmış ve hiper medya ile ilgilidir ve bu hemen hemen özetliyor. Bir tarayıcı, bir istekten ne aldığına bakar ve bunu kullanıcıya gösterir. Bir HTML sayfası genellikle çok daha fazla GET isteği oluşturur, örneğin CSS, komut dosyaları ve resimler. Bir görüntü tipik olarak yalnızca ekranda oluşturulur, JavaScript çalıştırılır, vb. Her seferinde tarayıcı, bağlantıyı bir <img>veya <style>etiketinde bulması ve yanıt ortam türü image/jpegveya idi text/css.

    Twitter, hiper medya tabanlı bir API oluşturuyorsa, application/tweetbir tweet'e giden bir bağlantıyı her takip ettiğinizde muhtemelen her zaman bir geri dönecektir , ancak müşteri bunu asla varsaymamalı ve üzerinde hareket etmeden önce her zaman ne aldığını kontrol etmemelidir.

  2. " Neden yine de XML döndüren bir REST hizmeti yazasınız? "

    Bunların hepsi medya türlerine indirgeniyor. HTML gibi, gerçekte ne anlama geldiğine dair hiçbir fikriniz olmayan bir öğe görürseniz, HTML spesifikasyonu bunları yok saymanızı ve varsa etiketin "gövdesini" işlemenizi ister. Benzer şekilde, atom spektrumu (farklı ad gelen) bilinmeyen elemanları ve dış biçimlendirme göz ardı ve talimat olmayan gövde (IIRC) işlem.

    Genel sorunlu etki alanları için ortam türlerini tasarlamak ( zengin metin sorun etki alanı için HTML ortam türünde olduğu gibi) çok zordur. Çok dar sorunlu alanlar için ortam türleri yapmak muhtemelen çok daha kolaydır (tweet gibi). Ancak, genişletilebilirlik için tasarım yapmak ve istemcilerin (ve sunucuların) spesifikasyonla eşleşmeyen öğeleri veya veri öğelerini gördüklerinde nasıl tepki vereceğini belirlemek her zaman iyi bir fikirdir. Örneğin JPEG, her türden meta veriyi içermek için kullanılan, Uygulamaya özel bir kayıt türüne (örn. APP1) sahiptir.

  3. " SOAP ile SOAP Zarfının" ek yüküne "sahip olduğunuz şikayetini duydum. Bu çağda, gerçekten bir avuç bayt için endişelenmemiz gerekiyor mu? "

    Hayır yapmayız. REST kesinlikle kablo üzerinden verimli olmakla ilgili değildir, aslında tel verimliliğinin ticaretini yapmaktır. REST'in verimliliği, diğer tüm kısıtlamaların sağladığı önbelleğe alma olasılıklarından gelir: Fielding'in tez notları: Takas , yine de, tek tip bir arayüzün bozulmasıdır. Verimlilik, çünkü bilgi, bir uygulamanın ihtiyaçlarına özgü bir formda değil, standart bir biçimde aktarılır. REST arabirimi, büyük taneli hiper ortam veri aktarımı için verimli olacak şekilde tasarlanmıştır, Web'in genel durumu için optimize eder, ancak diğer mimari etkileşim biçimleri için en uygun olmayan bir arabirimle sonuçlanır. SOAP Envelope bayt sayısı ek yükünün geçerli bir endişe olduğunu düşünmüyorum.

  4. " REST ile URL'yi tarayıcıya açıp verileri görebileceğiniz argümanını duydum. "

    Evet, bu da geçersiz bir argüman. O şekilde çalışmıyor. İşe yarasa bile, oradaki çoğu dar REST API, tarayıcıların hakkında hiçbir fikri olmayan medya türlerini kullanır ve yine de çalışmaz.

    Ancak, bir HTTP isteğinin hemen hemen her yönünü kontrol etmenize, yanıt başlıklarını incelemenize ve izleyebileceğiniz bağlantıları keşfetmenize olanak tanıyan komut satırı yardımcı programları veya tarayıcı uzantıları gibi HTTP tabanlı bir API'yi test etmek için bir tarayıcıdan çok daha fazla olasılık vardır. Ancak öyle bile olsa, bu WSDL saplamaları oluşturmak ve yine de işlevi çağırmak için üç satırlık bir program yapmak kadar kolay değildir.

  5. " Neden her kaynak için" okunabilir "bir URL'ye ihtiyacımız var? Hizmeti uygulamak için bir araç kullanıyor olsaydık, gerçek URL'yi gerçekten önemsiyor muyuz? "

    Web'in nasıl çalıştığına bakarsanız, eminim ki insanlar genel olarak bir wikipedia sayfasının URI'sinin http://en.wikipedia.org/wiki/Stack_overflowbunun yerine böyle görünmesinden çok memnun http://en.wikipedia.org/wiki/?oldid=376349090. Ama REST için aslında önemli değil. Doğru yapmaya çalışmak için önemli olan şey, URI'ye muhtemelen değişmeyecek olan ilgili verileri yerleştirmeyi seçmektir. Veritabanı kimliğinin asla değişmeyeceğini düşünebilirsiniz, ancak iki veri kümesinin birleştirilmesi gerektiğinde ne olur? Tüm birincil anahtarlarınız değişir. Sayfa başlığı (Stack_overflow) değişmeyecek.

Uzun yanıt için özür dilerim, ancak bu sorunun geçerli olduğuna ve burada daha önce SO'da ele alınmadığına inanıyorum. Eminim Darrel Miller da döndüğünde cevabını ekleyecektir.

Düzenleme: formatlama



3

WSDL ve diğer belge düzeyi protokolleri gereksizdir. HTTP protokolü, yalnızca belgeleri sunmanın ve form göndermenin yanı sıra çok daha zengin bir işlem grubunu destekler.

REST destekçileri bu fazlalıktan rahatsız.


Bu bana REST'i neden bu tür hizmetler için kullanmam gerektiğini söylemiyor. Bana göre bu "uymuyor". "HTTP protokolünün sadece belgeleri sunmanın ve formları göndermenin yanı sıra çok daha zengin bir işlem setini desteklediğini" söylemek, daha iyi bir şey varsa onları gerçekten KULLANMAMIZ gerektiği anlamına gelmez!
Josh M.

Yaptığım üstü kapalı nokta, REST'in zayıf olmasıdır. Protokol (HTTP) seviyesinde çalışır.
BC.
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.