Neden SOAP tabanlı hizmetler yerine REST kullanılır? [kapalı]


153

Bugün REST ile ilgili ilginç bir demoya katıldım, ancak REST'in neden bir SOAP tabanlı Hizmetler yığınından daha iyi veya daha basit olduğunu ve uygulanmasının tek bir nedeni (ne de sunuldu) düşünemedim.

"Gerçek dünyada" bir kimse neden SOAP tabanlı Hizmetler yerine REST kullanıyor nedenlerinden bazıları nelerdir?


37
Web servisleri ile SOAP tarzı web servislerinden bahsediyor musunuz? Çünkü bildiğim kadarıyla RESTful web servislerine de sahip olabilirsiniz.
James McMahon

Yanıtlar:


160

Daha az ek yük (her çağrıyı sarmak için SOAP zarfı yok)

Daha az çoğaltma (HTTP, zaten bir SOAP zarfında temsil edilmesi gereken DELETE, PUT, GET vb. İşlemleri zaten temsil eder).

Daha standartlaştırılmış - HTTP işlemleri iyi anlaşılmıştır ve tutarlı bir şekilde çalışır. Bazı SOAP uygulamaları titiz olabilir.

Daha fazla insan tarafından okunabilir ve test edilebilir (SOAP'ı sadece bir tarayıcıyla test etmek daha zor).

XML kullanmanıza gerek yok (iyi bir şekilde SOAP için de gerek yok, ancak zaten zarfı ayrıştırdığınız için pek mantıklı değil).

Kütüphaneler SOAP'ı (bir çeşit) kolaylaştırdı. Ama not ettiğim gibi altında çok fazla işten çıkarıyorsunuz. evet teoride SOAP, benzer şeyler yapan bir katmanın üstüne binmekten kaçınmak için diğer taşımacılıkların üzerinden geçebilir, ancak gerçekte yapabileceğiniz hemen hemen tüm SOAP çalışmaları HTTP'nin üzerindedir.


1
Platformlar arası SOAP iletişiminin de bir PITA olabileceğini eklemek istiyorum (SOAP'ın noktasının bir parçası değil miydi?!?).
Justin Bozonier

7
HTTP altyapısı ile de harika çalışıyor - örneğin GET'ler, son değiştirilen ve etags kullanımı ile birlikte agresif bir şekilde önbelleğe alındı
James Strachan

Hizmetlerinize evrensel bir istemci sağlamak için web tarayıcılarıyla harika çalışmak da yardımcı olur :)
James Strachan

2
SOAP'ın iyi standardize edildiğini iddia ediyorum. Uygulamaların olgunlaşmamış olduğunu kastediyorsanız, bunu daha açık hale getirmek iyi olabilir. Bunu önerebilirseniz, bu görüş için bazı kanıtlara değer veririm. Ayrıca REST'in daha insan tarafından okunabilir olup olmadığını da sorgulayacağım, bu tamamen içeriğinizi nasıl biçimlendirmeyi seçtiğinize bağlıdır. Ayrıca XML'in insan tarafından okunabilir olarak tasarlandığını, ancak hepimizin bildiği gibi ayrıntılı olduğunu unutmayın.
Howard Mayıs

6
HTTP, SOAP kadar standartlaştırılmıştır ve yaklaşık olarak daha uzun süredir kullanılmaktadır, bu nedenle uygulamalar tümüyle gerçekten istikrarlıdır ve gerçekten birlikte çalışabilir. SOAP, aynı içeriğe rağmen bile doğal olarak daha az okunabilir olacak, çünkü içeriğin sarıldığı zarf. Son birkaç yıldır pratikte, HTTP üzerinden JSON'un en iyi kombinasyon olduğunu gördüm, daha da kompakt.
Kendall Helmstetter Gelner

36

RESTful hizmetleri tüketmek SOAP tabanlı (normal) hizmetlerden çok daha basittir . Bunun nedeni, REST'in, yapılan istek türünden (GET = retrive, POST = write, DELETE = remove, vb ...) niyetinin çıkarılmasını sağlayan normal HTTP isteklerini temel alması ve tamamen vatansız olmasıdır. Öte yandan, istek bağlamını içeren bir mesaj zarfı kavramıyla ortadan kalktığı için daha az esnek olduğunu iddia edebilirsiniz.

Deneyimlerime göre, kurum içindeki hizmetler için SOAP, genel API'ler olarak maruz kalan hizmetler için REST tercih edilmiştir.

.NET çerçevesindeki WCF gibi araçlarla, bir hizmeti REST veya SOAP olarak uygulamak çok önemlidir.

İlgili bazı okumalar:


9
Benim anlayışım WSDL dosyalarının web hizmeti yöntemlerini ortaya çıkarmak için sınıflar oluşturmak için kullanılabileceğidir. Şüphesiz bu, hizmetlerin tüketimini bir işlevi çağırmak kadar kolay hale getirir mi? Görüşünüzü biraz daha açıklayabilir misiniz lütfen.
Howard Mayıs

1
Howard May: Fonksiyonları sadece ilkel veri tipleri kullanarak çağırdığınızı varsayarsak, bu kesinlikle doğrudur. Ancak bu durumda SOAP'ın dinlenmeden daha kolay olduğunu iddia edemezsiniz. Karmaşık veri türleriniz varsa, WSDL işleme, aynı WS yığınlarına sahip iki makine arasında düzgün çalışabilir. Ancak yığınları karıştırır karıştırmaz kaçınılmaz olarak sorunlarınız olacak. Uyumsuzlukları gidermek için WSDL'yi elle kazmanız gerektiğinde bu kadar kolay olmuyor.
Joseph Holsten

1
2014 yılında, neredeyse her platform, hatta eski platformlar WSDL'yi destekliyor. Proxy sınıfları API kullanımını son derece basit hale getirir. Bir push hizmeti uyguluyoruz ve REST'i düşünüyorum, ancak herhangi bir fayda görmekte gerçekten zorlanıyorum.
JohnOpincar

13

"Web servisleri" dediğinizde SOAP ve WS- * standartlar kümesi demek istediğinizi varsayacağım. (Aksi takdirde, DİNLENME hizmetler iddia olabilir vardır "web hizmetleri".)

Kurallı argüman, REST hizmetlerinin web tasarımıyla, yani HTTP ve ilgili altyapının tasarımı ile daha yakın eşleşmeleridir. Bu nedenle, bir REST hizmetinin kullanılması mevcut web araçları ve teknikleriyle daha uyumlu olacaktır.

Elbette, ayrıntılara girdiğinizde, her iki yaklaşımın da farklı senaryolarda güçlü yanları olduğunu görürsünüz. İlgilendiğiniz detaylar bu mu?


10

Tepegöz, iyi mimari kadar önemli değildir.

REST bir protokol değil, iyi ölçeklenebilir tasarımı teşvik eden bir mimaridir. Genellikle seçilir, çünkü RPC'de çok fazla özgürlük kolayca zayıf bir tasarıma yol açabilir.

Diğer neden, mevcut teknolojilerden (esas olarak proxy'ler) yararlanabileceği için HTTP üzerinden RESTful protokollerinin öngörülebilir maliyetidir. RPC başlangıç ​​maliyeti oldukça düşüktür, ancak yük yoğunlaşması ile önemli ölçüde artma eğilimindedir.


7

REST, uygulamaya yönelik agnostik ve çok daha şeffaftır ve bu, API'larını pazarlama araçları olarak kullanan ve insanların verilerini gerçekten tüketmelerini isteyen Flickr, Amazon veya Digg gibi büyük web siteleri için genel API'lar için harika kılar. Onlar yok Seçim'ın arabası SABUN kütüphanesinin onların kodlama dilini hata ayıklamak için çalışıyoruz acemi geliştiricilerin el tutan 1000s olmak istiyorum.

Her iki uçta kitaplıkların ve bilinen ipuçlarının bulunduğu dahili uygulamalar için daha iyi olan SOAP ve WSDL'ye karşı. (Ve belki de İnternet ölçeğinde yük dengeleme, HTTP önbellekleme vb. Gibi şeyleri önemsemeniz gerekmez.) Daha sonra kendi kendine belgelenen API'leri alırsınız, sıfır çalışma ile türleri korur vb.


İyi bir cevap, ama SOAP'ın internet ölçeğinde yük dengeleyemeyeceğiniz anlamına geldiğini kabul etmiyorum.
HDave

7

Roy Fielding'in konuyla ilgili en mükemmel tezini okumalıyım . Mükemmel bir dava açar ve yazdığı zamandan kesinlikle ilerideydi (2000).



5

REST, mutasyona uğramayan işlemlerinizin (genellikle GET fiilini kullanan) önbelleğe alınmasını sağlar . Yani, müşteri tarafından önbelleğe alınır ve / veya vekil sunucuları tarafından önbelleğe alınır. Bu büyük bir kazanç olabilir!


8
Bu sadece 'HTTP'yi doğru kullanmak' ve REST değil.
aehlke


0

Süper basit ve incedir. Http verb: GET üzerinden tarayıcı ile yapabilirsiniz. Bir tarayıcının genel http POST isteğini elle kolayca yapabildiğini bulamadım


1
Ödeme Kemancı. Bir tarayıcı değil, kod olmadan HTTP POST'ları oluşturmanın harika bir yoludur. fiddler2.com/fiddler2
Eric Schoonover

Normalde Charles ile olan mevcut talebi değiştirerek yaparım. Benim de Fiddler'im var.
Ray Lu

0

İşte bir veri noktası: Amazon API'lerini hem REST hem de SOAP formatlarında sunuyor ve kullanımın% 85'i REST.

REST'in uygulanması daha kolay, anlaşılması daha kolay ve daha yüksek performans.


7
"Daha yüksek performans" ifadeniz için referansınız var mı?
James McMahon

3
% 85 kullanımını nereden aldınız? Bu bilmek çok iyi (eğer kanıt görebiliyorsam)
schmoopy

3
Manuel olarak bir API spesifikasyonu okumak, sayfa yazdırmak vb. Uygulamak "Sağ Tıklama, Hizmet Referansı Ekleme" den daha mı kolay? (VS2010)
BlueChippy

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.