2010-05-01 9 views
10

Nie jestem zadowolony z odpowiedzi udzielonych przez SOAP vs pytania REST zwłaszcza tutaj: Performance of SOAP vs. XML-RPC or RESTSOAP a REST: pragmatyczne studia przypadków?

bo to tylko ogólne odpowiedzi filozoficznych i nie pragmatyczne odpowiedzi z niektórych przypadkach badania.

Nikt nie jest w stanie podać dokładnych przypadków, w których mydło byłoby bardziej odpowiednie niż wypoczynek, zwłaszcza pod względem wydajności?

Aktualizacja: Myślę, że REST wygrywa wojnę.

Odpowiedz

11

można znaleźć artykuł porównujący REST i SOAP tutaj: http://www.jopera.org/files/www2008-restws-pautasso-zimmermann-leymann.pdf

Autorzy wnioski wydawało się być:

  • Użyj usługi REST dla taktycznych, integracji ad hoc przez internet
  • wolą WS - * Usługi internetowe w profesjonalnych scenariuszach integracji aplikacji biznesowych o dłuższej żywotności i zaawansowanych wymaganiach dotyczących QoS

Osobiście nie lubię terminologii takiej jak "przedsiębiorstwo zawodowe", ponieważ jest luźna i nieformalna. Jednak moim zdaniem autorzy napisali kilka dobrych punktów w artykule. Może zakończyć i dać własne myśli:

  • Jeśli chcesz uczynić API publicznym - rób to w sposób RESTOWNOWY. Czemu? Jest prosty w użyciu dla aplikacji klienckiej, dzięki czemu twoja usługa będzie bardziej popularna. Na przykład Amazon ujawnia oba interfejsy API REST i SOAP, ale 85% ich użytkowników wybrało wersję REST Amazon API - SOAP vs. REST

  • Użyj stosu SOAP i WS- *, jeśli utworzysz (lub będziesz mieć kontrolę nad procesem tworzenia) zarówno konsumenci, jak i producenci twoich usług i potrzebujesz zaawansowanych funkcji WS- *. Prawdopodobnie będzie to wymagało więcej zasobów, ponieważ aplikacje SOAP są zwykle "cięższe" (więcej funkcji, ale więcej wyrafinowania).

Również rozważenie REST wydajności może być szybsze (wiadomości są zdecydowanie krótsze i nie trzeba analizować xml).

Mam nadzieję, że to pomoże.

W twoim przykładzie klienta flash - naprawdę trudno powiedzieć, nie znając szczegółów, jednak jeśli nie potrzebujemy wszystkich zabezpieczeń i funkcji transakcyjnych WS- * myślę, że budowanie aplikacji REST byłoby prostsze i szybsze.


Odpowiadając komentować

należy używać mydła, bo jestem w takim nazwie „profesjonalne przedsiębiorstwo”

I zakładając oczywiście, że wybór nie jest tak naprawdę podyktowane przez dużych dostawców oprogramowania.

SOAP nadaje się do większych przedsiębiorstw, ponieważ zachęca do bardziej formalnego podejścia. Oferuje on specyfikacje, które są ogromne, więc twoi programiści mogą potrzebować czasu, aby się ich nauczyć, a może nawet trochę szkoleń zawodowych -> więc zasoby firmy wydającej. Oferuje również narzędzia - i nie wszystkie z nich są open source, więc może to również oznaczać dodatkowe zasoby. Ale jeśli twój zespół nauczy się tego sposobu integracji usług, prawdopodobnie będzie sprawny, a wynikowy kod będzie wysokiej jakości.

Restrukturyzacja w przeciwieństwie to bardziej filozofia tworzenia aplikacji. Nie ma więc wielkich specyfikacji, żadnych wyspecjalizowanych narzędzi. Brak wydatków na zasoby. Może to działać dobrze, jeśli masz mały zespół dobrych programistów - nie będą potrzebować tylu wytycznych, jeśli znają podstawowe zasady. Niestety łatwiej jest robić rzeczy źle.

Kolejną rzeczą do rozważenia jest wielkość aplikacji - im bogatszy interfejs API, tym więcej usług chcesz zintegrować, tym trudniej będzie to zrobić REST. Również budowa małej aplikacji SOAP nie byłaby prawdopodobnie dobrym pomysłem - całkowite koszty ogólne i koszty wejścia są po prostu zbyt wysokie.

Musisz ocenić zalety i wady projektu. Niemożliwe jest wydawanie rekomendacji bez znajomości wszystkich szczegółów, które myślę.

I na koniec - nie ma to nic wspólnego z rozsądnymi argumentami, ale bardziej z polityką. Wydaje mi się, że ludzie na poziomie zarządzania wolą stos WS-* i SOAP (ma on wsparcie dla "dużych przedsiębiorstw", więc łatwiej im usprawiedliwić wybór). Z drugiej strony osoby z wykształcenia akademickiego [1] preferują REST - ponieważ wciąż istnieje wiele badań, które można przeprowadzić w tym obszarze.

[1] Jestem gdzieś pomiędzy, więc mogę obserwować zarówno zachowań ;-)

+0

Dobra odpowiedź, ale należy uważać na użycie terminu "klient". Masz rację, jeśli masz na myśli "klienta JavaScript używającego XmlHttp do bezpośredniej rozmowy z usługą", ale nie tak bardzo, jeśli twój klient używa narzędzi do tworzenia klas proxy JavaScript, za pomocą których można rozmawiać z usługą. –

+0

Dzięki za twoją myśl. Zgodnie z powyższymi pismami powinienem używać mydła, ponieważ jestem w tzw. "Przedsiębiorstwie zawodowym". Ale zdaję sobie sprawę z tego, że tak zwany fachowiec czasami oznacza "dostawcy celują w przedsiębiorstwo", gdzie wybory technologiczne są bardziej podyktowane interesem komercyjnym niż czysto technicznym powodem, dlatego zadaję to pytanie :) – user310291

13

Wydajność nie jest czynnikiem decydującym.

Po pierwsze, powinienem powiedzieć, że pytanie SOAP-a-REST jest trochę przestraszone, ponieważ SOAP jest formatem koperty XML, a REST jest architekturą. Podejdę więc trochę i zakładam, że naprawdę rozważasz SOAP-vs-POX lub SOAP-vs-JSON lub SOAP-vs-inne podejście do formatowania danych:.

Czynnik decydujący powinien być następujący:
Czy potrzebujesz, czy będziesz potrzebować w przyszłości koperty SOAP?

Koperta SOAP umożliwia między innymi takie rzeczy jak szyfrowanie, digsig, routing i sprawdzanie autoryzacji. Możesz oczywiście robić te rzeczy z REST (lub dokładniej, z prostym-starym XML-em lub JSON-em itp.), Ale musisz zrobić więcej pracy samodzielnie, aby to się stało.

Jeśli wydajność - cokolwiek rozumiesz przez to rozumiem - naprawdę jest twoim kryterium nr 1, powinieneś prawdopodobnie zrezygnować z SOAP i POX i przejść do protobufs lub czegoś innego zoptymalizowanego pod kątem wydajności. Mogą one być szybsze do serializowania i szybsze w przesyłaniu.


Jeśli uważasz, że ta odpowiedź jest „zbyt filozoficzny” i naprawdę chcesz twarde dane, dobrze, to chyba trzeba przeprowadzić kilka testów. Rzeczywisty przepływ będzie się znacznie różnić w zależności od wybranych zestawów narzędzi, kształtu wiadomości i dodatkowych usług danych (takich jak szyfrowanie itd.), Z których korzystasz. Ale w końcu, perf nie będzie, albo nie będzie, decydujący w obu kierunkach.

Jeśli Twój zestaw narzędzi SOAP jest o 20% łatwiejszy w użyciu. debugowania i utrzymania jako zestaw narzędzi POX, powinieneś używać SOAP, niezależnie od wydajności. Ludzie (kodery, architekci, testerzy) są obecnie drożej niż jednostki centralne i sieci. Zawsze możesz kupić kolejne 2 cpusy lub większą sieć, jeśli to konieczne, i jeśli Twój projekt jest poprawny. Ale nie można kupić o 20% mniej czasu na tworzenie, za wszelką cenę, jeśli twoja struktura jest trudna w użyciu lub jeśli odstrasza twoich ludzi. Jeśli nie korzystasz z sieci o skali geograficznej, lepiej zoptymalizować ją dla ludzi, a nie dla sieci.

+0

Lubię to i po prostu dodać, że wszystkie sieci geo skalę rozpoczęła mała. Jeśli przeprowadzisz się do skali geograficznej, będziesz mieć zasoby do zatrudniania ludzi, którzy mogą pomóc specjalizować się w ruchu sieciowym. Myślę, że najlepszą linią jest "nie można kupić 20% mniej czasu na rozwój" – jcolebrand

+0

Nie zgadzam się z "Ludzie są znacznie drożsi" lub przynajmniej zależy to od środowiska i projektu w przedsiębiorstwie. Jeśli jest to duża firma z milionami użytkowników na stronie, nie będzie to wielka sprawa. Najważniejsze jest to, czy wydajność naprawdę się poprawi. Jeśli tak, spróbujmy go wdrożyć. Co do wdrożenia, to kolejna historia z powodu wielu zaangażowanych działów, ale to nie jest kwestia ceny :) Przy okazji, dziękuję za odpowiedź. – user310291

+1

Myślę, że wydajność jest decydującym czynnikiem - tylko wtedy, gdy jest to rząd wielkości inny, co nie ma miejsca w tym przypadku. Mówimy o trochę więcej narzut lub trochę mniej narzut, nic, co wpłynie na skalowalność w sposób na tyle znaczący, aby uzasadnić obsesję na punkcie wydajności kosztem wszystkiego innego. –

Powiązane problemy