Jaka jest różnica między XML-RPC a SOAP?

81

Nigdy tak naprawdę nie rozumiem, dlaczego osoba wdrażająca usługi internetowe wybrałaby jedną z nich. Czy XML-RPC ogólnie można znaleźć w starszych systemach? Jakakolwiek pomoc w zrozumieniu tego byłaby bardzo mile widziana.

Scott Saad
źródło

Odpowiedzi:

88

Różnice?

SOAP jest potężniejszy i jest znacznie preferowany przez dostawców oprogramowania (MSFT .NET, Java Enterprise Edition, tego typu rzeczy).

SOAP był przez długi czas (2001-2007ish) postrzegany jako protokół z wyboru dla SOA. xml-rpc nie tak bardzo. REST to nowe ukochane SOA, chociaż nie jest to protokół.

SOAP jest bardziej szczegółowy, ale ma większe możliwości.

SOAP nie jest obsługiwany w niektórych starszych plikach. Na przykład brak bibliotek SOAP dla klasycznej ASP (które mogłem znaleźć).

SOAP nie jest dobrze obsługiwany w Pythonie. XML-RPC ma świetne wsparcie w Pythonie, w standardowej bibliotece.

SOAP obsługuje transfer na poziomie dokumentu, podczas gdy xml-rpc bardziej dotyczy przesyłania wartości, chociaż może przenosić struktury, takie jak struktury, listy itp.

xm-rpc tak naprawdę dotyczy programu do programowania transferu niezależnego od języka. Głównie przechodzi przez http / https. Wiadomości SOAP mogą być również przesyłane pocztą elektroniczną.

xml-rpc jest bardziej unikatowy. Pozwala to robić rzeczy w prosty sposób, a kiedy wiesz, co robisz, wdrażanie wysokiej jakości usług internetowych jest bardzo szybkie, nawet przy użyciu edytorów tekstu terminala. Robienie SOAP w ten sposób to zoo; naprawdę potrzebujesz dobrego IDE, aby było to wykonalne.

Znajomość SOAP będzie jednak wyglądać znacznie lepiej w twoim CV / CV, jeśli ubiegasz się o pracę w IT na liście Fortune 500.

xml-rpc ma pewne problemy z zestawami znaków innych niż ASCII.

XML-RPC nie obsługuje nazwanych parametrów. Muszą być we właściwej kolejności. Nie jestem pewien co do SOAP, ale tak myślę.

Christopher Mahan
źródło
1
Dla SOAP z Pythonem jest pakiet ZSI. Jest całkiem niezły, ale absolutnie potrzebujesz wsdl.
edomaur
2
Wydaje mi się, że stary zestaw SOAP Toolkit obsługiwał „Klasyczne ASP”. Co więcej, można użyć swojego ulubionego języka .NET do stworzenia komponentu COM, który otacza odniesienie do usługi, umożliwiając klasycznej ASP wykorzystanie nawet nowoczesnej usługi internetowej.
John Saunders,
1
@edomaur W rzeczywistości mydliny są lepszym wyborem, ponieważ są bardziej pythonowe, prostsze i łatwiejsze w użyciu pypi.python.org/pypi/suds
ccpizza
14

Aby dodać do innych odpowiedzi, zachęcałbym do przyjrzenia się faktycznym reprezentacjom tekstowym wywołań SOAP i XML-RPC, być może poprzez przechwycenie jednego za pomocą Ethereal. Cały argument „XML-RPC jest prostszy” nie ma większego sensu, dopóki nie zobaczysz, jak niesamowicie rozwlekłe jest wywołanie SOAP. Wiele z dość popularnych witryn internetowych unika SOAP jako swojego interfejsu API tylko ze względu na ilość przepustowości, którą zużywałby, gdyby ludzie zaczęli go intensywnie używać.

bmdhacks
źródło