Krótka odpowiedź: Oba protokoły mogą być używane do wykonywania zdalnych wywołań procedur (RPC). Oba protokoły wymagają zdefiniowania schematu na poziomie aplikacji, a mówiąc ogólnie, żaden z protokołów nie wymaga żadnego dodatkowego schematu do zdefiniowania serializacji obiektów na poziomie języka (zobacz szczegóły poniżej).
Jednak XmlRpc korzysta z większego wsparcia z bibliotek, które używają funkcji meta-programowania (odbicia) języka do mapowania wywołań XmlRpc, bezpośrednio (no, nigdy w 100% bezpośrednio) do wywołań funkcji poziomu językowego. Przyczyną lepszej obsługi XmlRpc niż zwykły XML jest (a) historyczny wypadek/wynik marketingu ze strony zwolenników XmlRpc, lub (b) suma mniejszych problemów z tłumaczeniem wymienionych poniżej przesądza o skali na korzyść XmlRpc. Z drugiej strony, XmlRpc ma dwie główne wady: (1) wymaga około 4 razy większej przepustowości i (2) podważa zamiar narzędzi do walidacji schematu XML: każdy pakiet będzie po prostu stemplowany jako "tak, to jest poprawny XmlRpc", niezależnie od błędów ortograficznych i zaniedbań w polach poziomu aplikacji.
Długa odpowiedź:
Wbrew powszechnemu przekonaniu, nie trzeba standard do zdefiniowania jak kodować obiektów w zwykłym poziomie języka XML - jest zazwyczaj tylko jedno „rozsądny” sposób (pod warunkiem poziomu aplikacji schemat określa, czy używać atrybutów XML lub nie), np:
class Room {
int id=1;
String code="MR-101";
String name="Maths room";
int capacity=30;
};
zakodowane jako:
<Room>
<id>1</id>
<code>MR-101</code>
<name>Maths room</name>
<capacity>30</capacity>
</Room>
xmlrpc został specjalnie zaprojektowany, aby facilitat e tworzenie bibliotek, które automatycznie serialise/unserialise obiektów język poziomu w wywołań RPC, i jako takie ma pewne drobne zalety, gdy stosuje się w ten sposób:
zwykły XML, jest to możliwe dla struct z pojedynczy element, którego należy pomylić z tablicą z pojedynczym elementem.
XmlRpc definiuje standardowy format godziny/daty. {Chociaż traktowanie stref czasowych i czystego czasu lub czystych datowników jest zdefiniowane na poziomie aplikacji.}
XmlRpc pozwala przekazywać argumenty do funkcji bez nazywania ich; Zwykłe wywołania RPC XML wymagają podania każdego argumentu.
XmlRpc definiuje standardowy sposób nazywania wywoływanej metody: "methodName". W przypadku zwykłego kodu XML zwykle użyty zostałby znacznik węzła głównego, chociaż możliwe są rozwiązania alternatywne.
XmlRpc definiuje prosty system typu: liczby całkowite, ciągi i tak dalej.{Zauważ, że w statycznie napisanych językach, typy muszą być w każdym razie kompilowane do obiektu docelowego, a zatem są znane, a przy dynamicznych typach języków często int i float i stringi mogą być używane zamiennie; zauważmy również, że system typu XmlRpc byłby zwykle kiepskim wyborem dla systemu typów języka docelowego, który może mieć wiele typów liczb całkowitych, i tak dalej.}
Biblioteki XmlRpc zazwyczaj integrują się bezpośrednio z biblioteką Http, a Xml biblioteki serializacji all (?) wymagają od programisty aplikacji przekazania tekstu XML do wywołania HTTP. W bardziej nowoczesnych językach, takich jak Java/Python/C#, jest to sprawa trywialna, ale nie na przykład dla C++.
Istnieje "percepcja marketingowa", którą XML opisuje "dokumenty", a XmlRpc służy do wywoływania procedur. Percepcja polega na tym, że wysłanie wiadomości XmlRpc zobowiązuje serwer do wykonania pewnej akcji, podczas gdy ta percepcja nie jest tak silna w przypadku zwykłego XML.
Niektórzy ludzie powiedzą „kogo to obchodzi - analizowania danych XML za pomocą zejście rekurencyjne/DOM/SAX jest całkiem proste mimo to”, w którym to przypadku większości z powyższych zarzutów są nieistotne.
Dla tych, którzy nadal preferują łatwość użycia coraz rodzimych obiektów języka stworzonego automatycznie, wiele główne języki mają biblioteki, które automatycznie serialise obiektów język poziomie do XML bez uciekania się do xmlrpc, np:
.NET - Java - Python
być może sukces xmlrpc, jak to jest, wynika z dostępności bibliotek, które automatycznie tworzyć obiekty język poziomie, a to z kolei biblioteki te mają przewagę nad ich zwykłych odpowiedników XML należnych do li powyższe problemy.
Wady xmlrpc są:
Jak wspomniano w pytaniu, to jest strasznie otyła
Wsparcie dla zwykłego XML jest wszechobecne i zwykle nie wymaga integracji z dużymi bibliotekami 3rd party. Wiele aplikacji wymaga konwersji automatycznie tworzonych obiektów do własnych obiektów aplikacji.
Wiele implementacji XmlRpc nie potrafi wygenerować prawdziwych obiektów o poziomie języka, których programiści sortowania oczekują, a zamiast tego wymagają np. wyliczenia pól w czasie wykonywania lub dodatkowa składnia.
Jeśli do definicji połączeń RPC, takich jak plik DTD, używany jest dokument definicji schematu, utracisz możliwość sprawdzania schematu na poziomie aplikacji - plik DTD po prostu powie Ci, że "to jest poprawna wersja XmlRpc ". Nie ma według mnie żadnego standardowego sposobu definiowania schematu na poziomie aplikacji za pomocą protokołu opartego na XmlRpc.
3) Gdybym miał wykonywać zdalne wywołania procedur za pomocą zwykłych ciągów lub plików binarnych, byłoby to okropne i wymagałoby zaprojektowania formatów dla każdej interakcji. Ale zwykły XML daje dobrze zdefiniowany format przekazywania wartości strukturalnych. Nie sądzę, abyś odpowiedział na pytanie "co XmlRpc ma ponad XML?" 1) W moich przykładach porównaj XmlRpc z XML i udowodnij, że nie musisz być verbose, aby być interoperacyjnym. XML jest uważany za protokół, który jest dobry dla interoperacyjności. –
Mylisz się. Biorąc twój przykład, " " skąd miałbym wiedzieć, jak usunąć to w obiekcie, gdybym otrzymał to przez przewód? Nie różni się to od otrzymywania, powiedzmy, 'room | 1 | MR-101 | Math Room | 30' i polegania na kolejności w terenie. Chodzi o to, że XML-RPC zapewnia ** dobrze zdefiniowany protokół komunikacyjny ** - XML sam w sobie tego nie robi. –
ChssPly76
Nie rozumiem sensu polegającego na poleganiu na zamówieniu w terenie. W takim przypadku atrybuty (lub znaczniki) mają nazwy. Dlaczego nie spojrzałbyś na nazwy pól, a nie na porządek w terenie? –