Związane z:
Dlaczego miałoby się używać REST zamiast usług internetowych?
Podejmując decyzję, czy zaimplementować usługę sieciową za pomocą protokołu SOAP lub REST (przez co rozumiem HTTP / XML w sposób RESTful), o czym powinienem wiedzieć i o czym myśleć? Zakładam, że to nie jest jeden rozmiar dla wszystkich, więc jak wybrać, który z nich użyć.
web-services
rest
wsdl
Howard May
źródło
źródło
Odpowiedzi:
Te dwa protokoły mają bardzo różne zastosowania w świecie rzeczywistym.
SOAP (używający WSDL) to ciężki standard XML, który koncentruje się na przekazywaniu dokumentów. Zaletą tego rozwiązania jest to, że Twoje żądania i odpowiedzi mogą mieć bardzo dobrą strukturę i mogą nawet korzystać z DTD. Wadą jest to, że jest to XML i jest bardzo rozwlekły. Jest to jednak dobre, jeśli dwie strony muszą mieć ścisłą umowę (np. W przypadku komunikacji międzybankowej). SOAP umożliwia także nakładanie na dokumenty warstw takich elementów, jak WS-Security. SOAP jest generalnie niezależny od transportu, co oznacza, że niekoniecznie musisz używać protokołu HTTP.
REST jest bardzo lekki i opiera się na standardzie HTTP. Dobrze jest szybko skonfigurować i uruchomić użyteczną usługę internetową. Jeśli nie potrzebujesz ścisłej definicji API, to jest droga. Większość usług internetowych należy do tej kategorii. Możesz wersjonować swój interfejs API, aby aktualizacje API nie powodowały uszkodzenia go dla osób używających starych wersji (o ile określą wersję). REST zasadniczo wymaga protokołu HTTP i jest niezależny od formatu (co oznacza, że możesz używać XML, JSON, HTML, cokolwiek).
Generalnie używam REST, ponieważ nie potrzebuję wyszukanych funkcji WS- *. SOAP jest jednak dobry, jeśli chcesz, aby komputery rozumiały Twoją usługę sieciową za pomocą WSDL. Specyfikacje REST są generalnie czytelne tylko dla człowieka.
źródło
Poniższe łącza zawierają przydatne informacje na temat WSDL vs REST, w tym zalety i wady
Oto kilka kluczowych punktów
1) SOAP został zaprojektowany dla rozproszonego środowiska obliczeniowego, w którym REST został zaprojektowany dla środowiska punkt-punkt.
2) WADL można wykorzystać do zdefiniowania interfejsu dla usług REST.
http://www.ajaxonomy.com/2008/xml/web-services-part-1-soap-vs-rest
http://ajaxonomy.com/2008/xml/web-services-part-2-wsdl-and -wadl
źródło
Traktowanie WSDL (co oznacza „SOAP”) jako „ciężkiego”. Ciężki ma znaczenie jak? Jeśli zestaw narzędzi wykonuje za Ciebie wszystkie „podnoszenie ciężarów”, dlaczego ma to znaczenie?
Jeszcze nigdy nie potrzebowałem używać skomplikowanego interfejsu API REST. Kiedy to zrobię, spodziewam się, że będę życzył sobie WSDL, który moje narzędzia chętnie przekonwertują na zestaw klas proxy, więc mogę po prostu wywołać coś, co wygląda na metody. Zamiast tego podejrzewam, że aby korzystać z nietrywialnego API opartego na REST, konieczne będzie ręczne napisanie znacznej ilości „lekkiego” kodu.
Nawet jeśli to wszystko zostanie zrobione, nadal będziesz przetłumaczyć dokumentację czytelną dla człowieka na kod, z całym ryzykiem, że ludzie odczytają ją źle. Ponieważ WSDL jest opisem usługi w postaci czytelnej dla komputera, znacznie trudniej jest go „źle odczytać”.
Tylko uwaga: od tego postu, ja już miałem okazję pracować z umiarkowanie skomplikowany usługi REST. Rzeczywiście, marzyłem o WSDL lub jego odpowiedniku i rzeczywiście musiałem napisać ręcznie dużo kodu. W rzeczywistości znaczną część czasu poświęcono na usuwanie powielania kodu całego kodu, który wywoływał różne operacje usługowe „ręcznie”.
źródło
To prawdopodobnie naprawdę należy do komentarzy w kilku z powyższych postów, ale nie mam jeszcze przedstawiciela, który mógłby to zrobić, więc proszę.
Myślę, że to interesujące, że wiele zalet i wad często przytaczanych w przypadku SOAP i REST ma niewiele wspólnego z rzeczywistymi wartościami lub ograniczeniami tych dwóch technologii. Prawdopodobnie najczęściej cytowaną zaletą REST jest to, że jest „lekki” lub bardziej „czytelny dla człowieka”. Na pewnym poziomie jest to z pewnością prawda, REST ma niższą barierę wejścia - jest mniej wymagana struktura niż SOAP (chociaż zgadzam się z tymi, którzy powiedzieli, że dobre oprzyrządowanie jest tutaj w dużej mierze odpowiedzią - szkoda, że większość narzędzi SOAP jest dość okropne).
Poza tym początkowym kosztem wejścia myślę, że wrażenie REST pochodzi z połączenia postaci adresów URL żądań i złożoności danych wymienianych przez większość usług REST. REST ma tendencję do zachęcania do prostszych, bardziej czytelnych dla człowieka adresów URL żądań, a dane są również łatwiejsze do strawienia. W jakim jednak stopniu są one nieodłączne dla REST, a do jakiego stopnia są one tylko przypadkowe. Prostsza struktura adresu URL jest bezpośrednim wynikiem architektury - ale można ją równie dobrze zastosować do usług opartych na protokole SOAP. Bardziej strawne dane są prawdopodobnie wynikiem braku określonej struktury. Oznacza to, że lepiej utrzymuj proste formaty danych, w przeciwnym razie będziesz mieć dużo pracy. Więc tutaj dodatkowa struktura SOAP,
Tak więc, jeśli chodzi o wymianę ustrukturyzowanych danych między systemami komputerowymi, nie jestem pewien, czy REST jest z natury lepszy niż SOAP (lub odwrotnie), są po prostu inne. Myślę, że powyższe porównanie REST vs SOAP z dynamicznym vs statycznym typowaniem jest dobre. Tam, gdzie języki dynamiczne mają tendencję do wpadania w kłopoty, jest długoterminowe utrzymanie i utrzymanie systemu (a na dłuższą metę nie mówię o roku lub 2, mówię o 5 lub 10). Ciekawie będzie zobaczyć, czy REST napotyka z czasem te same wyzwania. Wydaje mi się, że tak będzie, więc gdybym budował rozproszony system przetwarzania informacji, skłoniłbym się do SOAP jako mechanizmu komunikacji (również ze względu na transmisję i warstwowość protokołu aplikacji oraz elastyczność, którą zapewnia, jak wspomniano powyżej).
W innych miejscach REST wydaje się bardziej odpowiedni. AJAX między klientem a jego serwerem (niezależnie od ładunku) jest jednym z głównych przykładów. Nie przejmuję się długowiecznością tego typu połączeń, a łatwość obsługi i elastyczność są na najwyższym poziomie. Podobnie, gdybym potrzebował szybkiego dostępu do jakiejś usługi zewnętrznej i nie sądziłem, że będę się przejmował utrzymywalnością interakcji w czasie (ponownie zakładam, że to jest miejsce, w którym REST będzie mnie kosztować więcej, w jedną stronę lub inny), wtedy mógłbym wybrać REST, aby móc szybko wchodzić i wychodzić.
W każdym razie obie są realnymi technologiami iw zależności od tego, jakie kompromisy chcesz osiągnąć dla danej aplikacji, mogą Ci służyć dobrze (lub słabo).
źródło
REST nie jest protokołem; To styl architektoniczny. Albo paradygmat, jeśli chcesz. Oznacza to, że jest dużo luźniej zdefiniowane, że SOAP jest. W przypadku podstawowego CRUD możesz polegać na standardowych protokołach, takich jak Atompub, ale w przypadku większości usług będziesz mieć więcej poleceń niż tylko to.
Jako konsument, SOAP może być błogosławieństwem lub przekleństwem, w zależności od obsługiwanego języka. Ponieważ SOAP jest w dużej mierze wzorowany na systemie ściśle wpisywanym, najlepiej działa z językami z typami statycznymi. Dla dynamicznego języka łatwo może stać się okrucieństwem i zbytecznym. Ponadto obsługa bibliotek klienta nie jest tak dobra poza światem Java i .NET
źródło
Według mnie powinniśmy być ostrożni, kiedy używamy słowa usługa internetowa. Powinniśmy cały czas określać, czy mówimy o usłudze sieciowej SOAP, usłudze sieciowej REST lub innym rodzaju usługach internetowych, ponieważ mówimy tutaj o różnych rzeczach, a ludzie nie rozumieją już, jeśli nazwaliśmy je wszystkie usługami sieciowymi.
Zasadniczo usługi sieciowe SOAP są bardzo dobrze znane od lat i podlegają ścisłej specyfikacji, która opisuje, jak komunikować się z nimi w oparciu o specyfikację SOAP. Teraz usługi internetowe REST są nieco nowsze i zasadniczo wyglądają na prostsze, ponieważ nie używają żadnego protokołu komunikacyjnego. Zasadniczo to, co wysyłasz i otrzymujesz podczas korzystania z usługi internetowej REST, to zwykły XML. Ludziom się to podoba, ponieważ mogą analizować XML tak, jak chcą, bez konieczności korzystania z bardziej wyrafinowanego protokołu komunikacyjnego, takiego jak SOAP.
Dla mnie usługi REST są prawie takie, jak gdybyś utworzył serwlet zamiast usługi sieciowej SOAP. Aplet pobiera i zwraca dane. Dane mają format XML. Możemy również wyobrazić sobie użycie czegoś innego niż XML, jeśli chcemy. Na przykład tagi mogą być używane zamiast xml i nie byłoby to już REST, ale coś innego (mogłoby być jeszcze lżejsze pod względem wagi, ponieważ xml nie jest z natury lekki). Czy nazwalibyśmy to nadal usługą internetową? Tak, moglibyśmy, ale to nie będzie zgodne z żadnym obecnym standardem i jest to główny problem, jeśli zaczniemy nazywać wszystkie usługi internetowe, ale możemy to zrobić tak, jak chcemy, wtedy tracimy na interoperacyjności. Oznacza to, że format danych wymienianych z usługą sieciową nie jest już ustandaryzowany.
To, co ludziom nie podoba się w SOAP, to to, że mają trudności z jego zrozumieniem i nie mogą ręcznie generować zapytań. Komputery potrafią to jednak zrobić bardzo dobrze, więc musimy to wyjaśnić: czy zapytania i odpowiedzi usług internetowych mają być używane bezpośrednio przez użytkowników końcowych, czy też zgadzamy się, że usługi internetowe są pod interfejsem API wywoływanym przez systemy komputerowe oparte na pewnych znormalizowanych standardy?
źródło
SOAP : Może być również przesyłany przez SMTP, co oznacza, że możemy wywołać usługę za pomocą prostego formatu tekstowego poczty e-mail
Potrzebuje dodatkowej struktury / silnika, który powinien znajdować się na maszynie konsumenckiej usługi internetowej, aby konwertować wiadomość SOAP na odpowiednią strukturę obiektów w różnych językach.
REST : teraz WSDL2.0 obsługuje również opisywanie usługi WWW REST
Możemy użyć, gdy chcesz, aby Twoja usługa była lekka, na przykład dzwonienie z urządzeń mobilnych, takich jak telefon komórkowy, PDA itp.
źródło
w przypadku systemów korporacyjnych, w których Twój system jest ograniczony do korporacji, jego użycie jest łatwiejsze i właściwe, ponieważ masz prawie kontrolę nad klientami. jest to łatwiejsze, ponieważ istnieje wiele narzędzi, które tworzą klasy (proxy) i wyglądają tak, jakbyś robił swoje zwykłe OOP, które pasuje do twojego środowiska java lub .net (z którego korzysta większość firm).
Używałbym REST do aplikacji internetowych do ujawniania interfejsów (takich jak Twitter api), ponieważ klienci mogą używać javascripts, html lub innych, w których pisanie nie jest ścisłe. Bardziej liberalny REST ma większy sens.
Również dla klientów z dostępem do Internetu (WWW), łatwiej jest przeanalizować json lub xml wychodzące z interfejsu REST zamiast czysto XML pochodzącego z interfejsu mydła. Trudno jest używać proxy w javascript, a javascript nie obsługuje naturalnie obiektów. Jeśli używasz REST z javascript, zwykle parsujesz ciąg json i jesteś wyłączony. Interfejsy internetowe są zwykle bardzo proste (więc w większości przypadków jest to proste parsowanie) i zwykle nie wymagają spójności, dlatego REST jest wystarczający.
W przypadku aplikacji korporacyjnych nie sądzę, aby REST był odpowiedni, ponieważ transakcje, bezpieczeństwo, ścisłe pisanie, schematy odgrywają bardzo ważną rolę w tworzeniu aplikacji korporacyjnych, dlatego SOAP jest dla nich bardziej odpowiedni.
Mój wniosek jest taki, że SOAP jest przeznaczony dla systemów korporacyjnych, REST jest dla Internetu lub WWW. Możesz go używać zamiennie, ale możesz mieć trudności z użyciem odpowiedniego narzędzia do pracy.
Przepraszam za mój zły angielski.
źródło
W obronie REST ściśle przestrzega zasad HTTP i adresowalności, np. Operacje odczytu używają GET, operacje aktualizacji używają POST itp. Uważam, że jest to znacznie czystsze podejście. Książka Oreilly RESTful Web Services wyjaśnia to znacznie lepiej niż ja, jeśli ją czytasz, myślę, że wolałbyś podejście REST
źródło
Zestaw narzędzi po stronie klienta byłby jednym. A znajomość usług SOAP druga. Obecnie coraz więcej usług korzysta z protokołu RESTful, a testowanie takich usług można przeprowadzić na prostych przykładach cURL. Chociaż nie jest wcale takie trudne, aby wdrożyć obie metody i pozwolić na jak najszersze wykorzystanie przez klientów.
Jeśli chcesz wybrać jeden, proponuję REST, jest łatwiej.
źródło
Poprzednie odpowiedzi zawierają wiele informacji, ale myślę, że istnieje różnica filozoficzna, na którą nie zwrócono uwagi. SOAP był odpowiedzią na pytanie „jak stworzyć nowoczesnego, zorientowanego obiektowo, niezależnego od platformy i protokołu następcę RPC?”. REST powstał na podstawie pytania „jak wykorzystać spostrzeżenia, które sprawiły, że protokół HTTP odniósł tak duży sukces w sieci Web i wykorzystać je do przetwarzania rozproszonego”?
SOAP polega na dostarczeniu narzędzi, dzięki którym programowanie rozproszone będzie wyglądać jak ... programowanie. REST próbuje narzucić styl upraszczający rozproszone interfejsy, tak aby rozproszone zasoby mogły odnosić się do siebie tak, jak rozproszone strony HTML mogą odnosić się do siebie nawzajem. Jednym ze sposobów jest próba (głównie) ograniczenia operacji do „CRUD” na zasobach (tworzenie, odczytywanie, aktualizowanie, usuwanie).
REST jest wciąż młody - chociaż jest zorientowany na usługi „czytelne dla człowieka”, nie wyklucza usług introspekcji itp. Ani automatycznego tworzenia serwerów proxy. Jednak te nie zostały ustandaryzowane (jak piszę). SOAP daje ci te rzeczy, ale (IMHO) daje ci "tylko" te rzeczy, podczas gdy styl narzucony przez REST już zachęca do rozpowszechniania usług internetowych ze względu na jego prostotę. Sam bym zachęcał początkujących dostawców usług do wyboru REST, chyba że istnieją określone funkcje dostarczane przez SOAP, z których muszą korzystać.
Moim zdaniem więc, jeśli wdrażasz API "od podstaw" i nie wiesz zbyt wiele o potencjalnych klientach, wybrałbym REST, ponieważ styl, który zachęca, ma na celu uczynienie interfejsów zrozumiałymi i łatwymi do rozwijania. Jeśli wiesz dużo o kliencie i serwerze, a istnieją konkretne narzędzia SOAP, które ułatwią życie obu, to nie byłbym religijny w kwestii REST.
źródło
Możesz łatwo przenieść składniki sieci Web WCF z wypluwaniem WSDL do innych zastosowań, po prostu zmieniając ustawienia konfiguracji. Możesz przejść przez HTTP, a następnie nazwać potoki, tcp, niestandardowe protokoły itp. Bez konieczności zmiany kodu. Uważam, że komponenty WCF mogą być również łatwiejsze do skonfigurowania dla rzeczy takich jak bezpieczeństwo, połączenia dwukierunkowe, transakcje, współbieżność itp.
REST prawie ogranicza cię do HTTP (co w wielu przypadkach jest w porządku).
źródło
Wiem, że ta dyskusja jest stara, ale po przeczytaniu wszystkich odpowiedzi i skomentowaniu uważam, że wszyscy przegapili najważniejszy punkt dotyczący różnicy między dwoma systemami: SOAP używa złożonych typów, aby nie tylko podać dane, ale także zweryfikować go i zachowaj w ścisłym oznaczeniu typu, dla którego został zdefiniowany. WSDL informuje, jaki jest format danych, jaki jest typ danych, umożliwia dodawanie reguł w stylu wzorca reg-ex i określa, ile razy dane muszą być i mogą być dozwolone w żądaniu / odpowiedzi . Reszta z drugiej strony nie ma żadnego z tych mechanizmów.
SOAP jest złożony i ciężki, ponieważ umożliwia wysyłanie złożonych ciężkich danych hierarchicznych. REST to zwykły tekst, z punktem początkowym i końcowym porządkującym reguły.
SOAP jest niezależny od biznesu, ponieważ ma wszystkie reguły danych osadzone w dokumencie.
Różnica między SOAP i REST polega na tym, że SOAP jest samodzielnym schematem biznesowym. REST to dokument tekstowy.
źródło