XML-RPC - XML-RPC

XML-RPC to protokół zdalnego wywoływania procedur (RPC) , który wykorzystuje XML do kodowania wywołań i HTTP jako mechanizm transportowy.

Historia

Protokół XML-RPC został stworzony w 1998 roku przez Dave'a Winera z UserLand Software i Microsoft , przy czym Microsoft postrzega go jako zasadniczy element zwiększania wysiłków w handlu elektronicznym między przedsiębiorstwami. Wraz z wprowadzeniem nowej funkcjonalności standard ewoluował do tego, co jest teraz SOAP .

UserLand obsługiwał XML-RPC od wersji 5.1 swojego systemu zarządzania treścią WWW Frontier, wydanego w czerwcu 1998 r.

Pomysł XML-RPC na czytelny i zapisywalny przez człowieka, analizowalny skrypt dla żądań i odpowiedzi opartych na HTTP został również wdrożony w konkurencyjnych specyfikacjach, takich jak Allaire's Web Distributed Data Exchange (WDDX) i WebMethod's Web Interface Definition Language (WIDL) ). Wcześniejsze zawijanie obiektów COM , CORBA i Java RMI w składnię XML i transportowanie ich przez HTTP również istniało w technologii WebBroker firmy DataChannel.

Ogólne użycie XML do zdalnego wywoływania procedur (RPC) zostało opatentowane przez Phillipa Merricka, Stewarta Allena i Josepha Lappa w kwietniu 2006 r., W związku z czym domagali się korzyści z tymczasowego wniosku złożonego w marcu 1998 r. Patent został przypisany firmie webMethods , zlokalizowanej w Fairfax, VA . Patent wygasł 23 marca 2019 r

Stosowanie

W XML-RPC klient wykonuje RPC, wysyłając żądanie HTTP do serwera, który implementuje XML-RPC i otrzymuje odpowiedź HTTP. Wywołanie może mieć wiele parametrów i jeden wynik. Protokół definiuje kilka typów danych dla parametrów i wyniku. Niektóre z tych typów danych są złożone, tj. Zagnieżdżone. Na przykład możesz mieć parametr będący tablicą pięciu liczb całkowitych.

Parametry / struktura wyników oraz zestaw typów danych mają odzwierciedlać te używane w popularnych językach programowania.

Identyfikację klientów na potrzeby autoryzacji można osiągnąć za pomocą popularnych metod zabezpieczeń HTTP. Do identyfikacji i uwierzytelniania można użyć podstawowego uwierzytelniania dostępu .

W porównaniu z protokołami RESTful, w których są przesyłane reprezentacje zasobów (dokumenty), XML-RPC jest przeznaczony do wywoływania metod . Praktyczna różnica polega na tym, że XML-RPC jest znacznie bardziej ustrukturyzowany, co oznacza, że ​​wspólny kod biblioteki może być używany do implementacji klientów i serwerów, a projekt i dokumentacja wymagają mniej pracy związanej z określonym protokołem aplikacji. Istotną różnicą techniczną między typowymi protokołami RESTful a XML-RPC jest to, że protokół RESTful używa identyfikatora HTTP URI do informacji o parametrach, podczas gdy w przypadku XML-RPC identyfikator URI tylko identyfikuje serwer.

JSON-RPC jest podobny do XML-RPC.

Typy danych

Typowe typy danych są konwertowane na ich odpowiedniki XML z przykładowymi wartościami pokazanymi poniżej:

Nazwa Przykład tagu Opis
szyk
<array>
  <data>
    <value><i4>1404</i4></value>
    <value><string>Something here</string></value>
    <value><i4>1</i4></value>
  </data>
</array>
Tablica wartości, bez kluczy
base64
<base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64>
Dane binarne zakodowane w Base64
boolean
<boolean>1</boolean>
Wartość logiczna Boolean (0 lub 1)
data / godzina
<dateTime.iso8601>19980717T14:08:55Z</dateTime.iso8601>
Data i czas w ISO 8601 formacie
podwójnie
<double>-12.53</double>
Liczba zmiennoprzecinkowa podwójnej precyzji
liczba całkowita
<int>42</int>

lub

<i4>42</i4>
Liczba całkowita , liczba całkowita
strunowy
<string>Hello world!</string>

lub

Hello world!
Ciąg znaków. Musi być zgodne z kodowaniem XML .
struct
<struct>
  <member>
    <name>foo</name>
    <value><i4>1</i4></value>
  </member>
  <member>
    <name>bar</name>
    <value><i4>2</i4></value>
  </member>
</struct>
Tablica asocjacyjna
zero
<nil/>
Rozróżniana wartość zerowa ; XML-RPC rozszerzenie

Przykłady

Przykład typowego żądania XML-RPC:

<?xml version="1.0"?>
<methodCall>
  <methodName>examples.getStateName</methodName>
  <params>
    <param>
        <value><i4>40</i4></value>
    </param>
  </params>
</methodCall>

Przykład typowej odpowiedzi XML-RPC to:

<?xml version="1.0"?>
<methodResponse>
  <params>
    <param>
        <value><string>South Dakota</string></value>
    </param>
  </params>
</methodResponse>

Typowy błąd XML-RPC to:

<?xml version="1.0"?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>4</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string>Too many parameters.</string></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>

Krytyka

Niedawni krytycy (od 2010 r. I później) XML-RPC twierdzą, że wywołania RPC można wykonywać za pomocą zwykłego XML, a XML-RPC nie dodaje żadnej wartości do XML. Zarówno XML-RPC, jak i XML wymagają modelu danych na poziomie aplikacji, na przykład nazw pól zdefiniowanych w schemacie XML lub nazw parametrów w języku XML-RPC. Co więcej, XML-RPC wykorzystuje około 4 razy więcej bajtów w porównaniu do zwykłego XML do kodowania tych samych obiektów, co samo w sobie jest gadatliwe w porównaniu z JSON .

Zobacz też

Bibliografia

Zewnętrzne linki