Dlaczego miałoby się używać REST zamiast usług opartych na SOAP? [Zamknięte]

153

Uczestniczyłem dzisiaj w interesującej demonstracji na REST, jednak nie mogłem wymyślić ani jednego powodu (ani nie został on przedstawiony), dla którego REST jest w każdym razie lepszy lub prostszy w użyciu i implementacji niż stos usług oparty na SOAP.

Jakie są niektóre z powodów, dlaczego ktokolwiek w „prawdziwym świecie” używa REST zamiast usług opartych na SOAP?

AngryHacker
źródło
37
Czy przez usługi sieciowe masz na myśli usługi sieciowe w stylu SOAP? O ile wiem, możesz mieć również usługi sieciowe RESTful.
James McMahon

Odpowiedzi:

160

Mniejszy narzut (brak koperty SOAP do zawijania każdego połączenia)

Mniej duplikacji (HTTP już reprezentuje operacje takie jak DELETE, PUT, GET itp., Które w innym przypadku muszą być reprezentowane w kopercie SOAP).

Bardziej ustandaryzowane - operacje HTTP są dobrze zrozumiane i działają konsekwentnie. Niektóre implementacje SOAP mogą być skomplikowane.

Bardziej czytelny dla człowieka i testowalny (trudniejszy do przetestowania SOAP za pomocą samej przeglądarki).

Nie musisz używać XML (cóż, nie musisz też tego robić w przypadku SOAP, ale nie ma to sensu, ponieważ już robisz parsowanie koperty).

Biblioteki uczyniły SOAP (w pewnym sensie) łatwym. Ale jak zauważyłem, usuwasz wiele zbędnych elementów. tak w teorii, SOAP może przejść przez inne transporty, aby uniknąć jazdy po warstwie i robienia podobnych rzeczy, ale w rzeczywistości prawie cała praca SOAP, jaką kiedykolwiek wykonasz, odbywa się przez HTTP.

Kendall Helmstetter Gelner
źródło
1
Chciałbym dodać, że międzyplatformowa komunikacja SOAP również może być PITA (czy nie o to chodziło w SOAP?!?).
Justin Bozonier,
7
Świetnie współpracuje również z infrastrukturą HTTP - np. GET są buforowane agresywnie wraz z użyciem ostatniej modyfikacji i etagów
James Strachan
Świetna praca z przeglądarkami internetowymi w celu zapewnienia uniwersalnego klienta dla Twoich usług również pomaga :)
James Strachan
2
Twierdzę, że SOAP jest dobrze znormalizowany. Jeśli masz na myśli, że implementacje są niedojrzałe, może być dobrze wyjaśnione. Chciałbym docenić pewne dowody tego poglądu, gdybyś to sugerował. Chciałbym również zapytać, czy REST jest bardziej czytelny dla człowieka, zależy to całkowicie od tego, jak zdecydujesz się sformatować swoje treści. Pamiętaj też, że XML został zaprojektowany tak, aby był czytelny dla człowieka, chociaż, jak wszyscy wiemy, jest rozwlekły.
Howard May
6
Protokół HTTP jest tak samo ustandaryzowany jak SOAP i istnieje od dłuższego czasu, więc implementacje są naprawdę stabilne we wszystkich obszarach i prawdziwie interoperacyjne. SOAP będzie również z natury mniej czytelny, nawet przy identycznej treści, ze względu na otoczkę, w którą jest opakowana. W praktyce w ciągu ostatnich kilku lat stwierdziłem, że JSON przez HTTP jest najlepszą kombinacją, po prostu wystarczająco czytelną, gdy jestem jeszcze bardziej kompaktowy.
Kendall Helmstetter Gelner
36

Usługi RESTful są znacznie prostsze w użyciu niż (zwykłe) usługi oparte na SOAP . Powodem tego jest fakt, że REST jest oparty na zwykłych żądaniach HTTP, co umożliwia wywnioskowanie intencji na podstawie typu żądania (GET = retrive, POST = write, DELETE = remove, itd.) I jest całkowicie bezstanowy. Z drugiej strony można argumentować, że jest mniej elastyczny, ponieważ eliminuje koncepcję koperty wiadomości zawierającej kontekst żądania.

Z mojego doświadczenia wynika, że ​​SOAP był preferowany dla usług w przedsiębiorstwie, a REST był preferowany dla usług, które są udostępniane jako publiczne interfejsy API.

Dzięki narzędziom takim jak WCF w środowisku .NET implementacja usługi jako REST lub SOAP jest bardzo prosta.

Kilka istotnych lektur:

Eric Schoonover
źródło
9
Rozumiem, że pliki WSDL mogą służyć do generowania klas w celu uwidocznienia metod usług sieci Web. Z pewnością sprawia to, że korzystanie z usług jest tak łatwe, jak wywołanie funkcji? Czy możesz wyjaśnić swój pogląd?
Howard
1
Howard May: Zakładając, że wywołujesz funkcje używając tylko prymitywnych typów danych, jest to z pewnością prawda. Ale w takim przypadku nie można dokładnie argumentować, że SOAP jest łatwiejsze niż odpoczynek. Jeśli masz złożone typy danych, przetwarzanie WSDL może działać poprawnie między dwoma maszynami z tymi samymi stosami WS. Ale nieuchronnie będziesz mieć problemy, gdy tylko zmieszasz stosy. Przestaje być tak łatwe, gdy trzeba ręcznie zagłębić się w WSDL, aby usunąć błędy w niekompatybilności.
Joseph Holsten
1
W 2014 roku prawie każda platforma, nawet starożytna, obsługuje WSDL. Klasy proxy sprawiają, że korzystanie z API jest niezwykle proste. Wdrażamy usługę push i rozważam REST, ale naprawdę mam problem z dostrzeżeniem jakichkolwiek korzyści.
JohnOpincar
13

Zakładam, że kiedy mówisz „usługi sieciowe”, masz na myśli SOAP i zestaw standardów WS- *. (W przeciwnym razie mógłbym argumentować, że usługi REST to „usługi sieciowe”).

Kanonicznym argumentem jest to, że usługi REST są bliższe projektowi sieci - to znaczy projektowi protokołu HTTP i powiązanej infrastruktury. Dzięki temu korzystanie z usługi REST będzie bardziej zgodne z istniejącymi narzędziami i technikami internetowymi.

Oczywiście, gdy zagłębisz się w szczegóły, okaże się, że oba podejścia mają mocne strony w różnych scenariuszach. Czy interesują Cię te szczegóły?

Bruce
źródło
10

Narzut nie jest tak ważny jak dobra architektura.

REST nie jest protokołem, to architektura, która zachęca do dobrego, skalowalnego projektowania. Jest często wybierany, ponieważ zbyt duża swoboda w RPC może łatwo doprowadzić do złego projektu.

Drugim powodem jest przewidywalny koszt protokołów RESTful przez HTTP, ponieważ może on wykorzystywać istniejące technologie (głównie proxy). Początkowy koszt RPC jest dość niski, ale ma tendencję do znacznego wzrostu wraz ze wzrostem obciążenia.

Piotr Czapla
źródło
7

REST jest niezależny od implementacji i znacznie bardziej przejrzysty, co czyni go doskonałym dla publicznych interfejsów API, zwłaszcza dla dużych witryn internetowych, takich jak Flickr, Amazon lub Digg, które używają swoich interfejsów API jako narzędzi marketingowych i naprawdę chcą, aby ludzie korzystali z ich danych. Oni nie chcą być ręcznie gospodarstwa 1000s początkujących programistów, którzy próbują zdiagnozować języka skryptowego buggy biblioteki SOAP za wybór.

W przeciwieństwie do SOAP i WSDL, które są lepsze dla aplikacji wewnętrznych, w których masz biblioteki typu drop-in i znanych, niewyraźnych ludzi na obu końcach. (I być może nie musisz przejmować się takimi rzeczami, jak równoważenie obciążenia w skali Internetu, buforowanie HTTP itp.) Następnie otrzymujesz interfejsy API, które są samodokumentowane, zachowują typy itp. Przy zerowej pracy.

joelhardi
źródło
Dobra odpowiedź, ale nie zgodziłbym się, że SOAP oznacza, że ​​nie można mieć równoważenia obciążenia w skali internetowej.
HDave
7

Muszę przeczytać najlepszą rozprawę Roya Fieldinga na ten temat. On sprawia, że doskonały przypadek i był zdecydowanie WAY wyprzedzał swoje czasy, kiedy pisał go (2000).

Piko
źródło
5

REST umożliwia buforowanie operacji niemutujących (które zazwyczaj używają czasownika GET) . To znaczy buforowane przez klienta i / lub buforowane przez serwery proxy. To może być ogromna wygrana!

David
źródło
8
Oznacza to po prostu „prawidłowe używanie protokołu HTTP”, a nie REST.
aehlke
3

REST to po prostu sposób implementacji usług internetowych. Jest to tylko sposób na poprawne użycie protokołu HTTP do wysyłania zapytań do usług internetowych, które próbujesz uzyskać.

http://www.xfront.com/REST-Web-Services.html http://en.wikipedia.org/wiki/Representational_State_Transfer

Eric Holscher
źródło
1
REST nie ma nic wspólnego z HTTP i jest całkowicie niezależny od protokołu. Jest jednak dobrze dostosowany do niektórych typów usług internetowych zorientowanych na zasoby.
aehlke
0

Jest super prosty i smukły. Możesz to zrobić za pomocą przeglądarki, używając czasownika http: GET. Nie znalazłem przeglądarki, która może łatwo ręcznie wykonać ogólne żądanie HTTP POST

Ray Lu
źródło
1
Checkout Fiddler. To nie jest przeglądarka, ale to świetny sposób na tworzenie POST HTTP bez kodu. fiddler2.com/fiddler2
Eric
Zwykle robię to, modyfikując istniejące żądanie u Charlesa. Mam też Fiddlera.
Ray Lu
0

Oto jeden punkt danych: Amazon oferuje swoje interfejsy API zarówno w formatach REST, jak i SOAP, a 85% wykorzystania to REST.

REST jest łatwiejszy do wdrożenia, łatwiejszy do zrozumienia i zapewnia wyższą wydajność.

pbreitenbach
źródło
7
Czy masz jakieś odniesienia do swojego stwierdzenia „wyższa wydajność”?
James McMahon
3
Skąd masz 85% wykorzystania? Bardzo dobrze to wiedzieć (jeśli mogę zobaczyć dowód)
schmoopy
3
Ręczne odczytywanie specyfikacji API, drukowanie stron itp. Jest łatwiejsze do zaimplementowania niż „Kliknij prawym przyciskiem myszy, dodaj odwołanie do usługi”? (VS2010)
BlueChippy
@schmoopy Z bloga Amazon: aws.typepad.com/aws/2005/09/rest_vs_soap.html
joerage