Funk­tio­nen per Remote-Zugriff auf ent­fern­ten Computern im Netzwerk bzw. auf ver­teil­ten Systemen (Verbund un­ab­hän­gi­ger Computer) auf­zu­ru­fen, zählt seit Jahr­zehn­ten zur gängigen Praxis. Der Grund­ge­dan­ke für die zu­grun­de­lie­gen­de Tech­no­lo­gie RPC (Remote Procedure Calls) wurde bereits 1976 von James E. White in RFC 707 for­mu­liert, womit das Prinzip bei­spiels­wei­se älter als das World Wide Web ist.

Fakt

Damit RPC den An­for­de­run­gen heutiger Com­pu­ter­sys­tem-Struk­tu­ren gerecht werden kann, ent­wi­ckel­te Google 2015 das Framework gRPC.

Eine der be­lieb­tes­ten Lösungen, die prak­ti­schen RPC-Anfragen für die eigenen Zwecke zu nutzen, ist XML-RPC. Dabei werden die Calls mithilfe des Pro­to­kolls HTTP(S) und der Ex­ten­si­ble Markup Language (XML) rea­li­siert. Was genau steckt hinter dieser Spe­zi­fi­ka­ti­on, wo kommt sie zum Einsatz und wie funk­tio­niert sie genau?

Was ist XML-RPC?

XML-RPC (Kurzform für: Extensible Markup Language Remote Procedure Call) ist eine Pro­to­koll­spe­zi­fi­ka­ti­on für die Aus­füh­rung von RPC-Calls (Remote-Aufrufe in Computer-Netz­wer­ken) unter Zu­hil­fe­nah­me des zu­stands­lo­sen Netz­werk­pro­to­kolls HTTP und der – in diesem Fall auch na­mens­ge­ben­den – Aus­zeich­nungs­spra­che XML. Während HTTP dabei den Transport der Daten regelt, wird XML für die Dar­stel­lung dieser Daten verwendet. Bei der Fest­le­gung des XML-RPC-Standards wurde ins­be­son­de­re darauf Wert gelegt, dass er ohne großen Aufwand in ver­schie­de­ne Pro­gram­mier­spra­chen und Sys­tem­platt­for­men im­ple­men­tier­bar ist.

Hinweis

Die XML-RPC-Spe­zi­fi­ka­ti­on sieht zwar aus­schließ­lich das un­ge­si­cher­te HTTP-Protokoll für die Da­ten­über­tra­gung vor – mitt­ler­wei­le exis­tie­ren aber weit ver­brei­te­te und ak­zep­tier­te Va­ria­tio­nen des Standards, die das we­sent­lich sicherere HTTPS un­ter­stüt­zen, das zu­sätz­lich auf eine SSL/TLS-Ver­schlüs­se­lung zu­rück­greift.

Ent­wi­ckelt wurde XML-RPC im Jahr 1998, wobei der haupt­ver­ant­wort­li­che Software-Ent­wick­ler Dave Winer und seine Firma UserLand Software in engem Austausch mit Microsoft standen. Der Groß­kon­zern sah nämlich das große Potenzial des neuen Standards für die An­kur­be­lung der eigenen B2B-Ge­schäfts­be­zie­hun­gen. Durch Hin­zu­fü­gen weiterer, neuerer Funk­tio­nen hat sich XML-RPC zudem als Schnitt­stel­len-Protokoll für Web­ser­vices etabliert, wobei diese wei­ter­ent­wi­ckel­te Form von XML-RPC in diesem Fall als SOAP (Simple Object Access Protocol) bekannt wurde.

Wie funk­tio­niert XML-RPC?

Clients, die auf XML-RPC zu­rück­grei­fen möchten, nutzen das Über­tra­gungs­pro­to­koll HTTP, genauer gesagt die HTTP-Request-Methode POST (siehe hierzu auch GET vs. POST). Nach Erhalt der HTTP-Anfrage wertet der Server das XML-Dokument aus, das sich im Body dieser Anfrage befindet. Aus dessen Inhalt generiert er in der Folge den bzw. die Parameter für die ge­wünsch­te Funktion und führt diese aus. Das Ergebnis packt der Server erneut in ein XML-Dokument, das nun im Rahmen einer HTTP-Antwort zurück an den Client gesendet wird. XML-RPC un­ter­stützt dabei folgende Da­ten­ty­pen für die Parameter-Übergabe bzw. in der Antwort, die ein Client erhält:

Datentyp Tag-Beispiel Be­schrei­bung
array <array><data>…</data></array> Liste, die mehrere Werte oder Da­ten­ty­pen enthalten kann
base64 <base64>SGFsbG8gV2VsdA==</base64> Binäre Daten, die nach dem Base64-Verfahren kodiert sind
boolean <boolean>1</boolean> Boolesche Variable (wahr = 1 vs. falsch = 0)
dateTime.iso8601 <dateTime.iso8601>20200414T16:23:55</dateTime.iso8601> Datum und Uhrzeit im ISO-8601-Format
double <double>-0.32653</double> Gleit­kom­ma­zahl mit doppelter Ge­nau­ig­keit (64 Bit)
integer <int>32</int> oder <i4>32</i4> Integer (ganz­zah­li­ger Wert)
string <string>Hallo Welt!</string> Zei­chen­ket­te; kann Null-Bytes enthalten
struct <struct><data>…</data></struct> Verbund von Schlüssel-Wert-Paaren (Schlüssel sind in diesem Fall Zei­chen­ket­ten, Werte können von be­lie­bi­gem Typ sein)

Sollen mehrere Werte oder Da­ten­ty­pen zu­sam­men­ge­fasst werden, stehen bei der XML-RPC-Notation also mit „array“ und „struct“ gleich zwei Optionen zur Verfügung. Mit ersterer Option lassen sich die ge­wünsch­ten Daten in be­lie­bi­ger Rei­hen­fol­ge nach­ein­an­der auflisten, per „struct“ werden dem Server bereits vor­struk­tu­rier­te Schlüssel-Wert-Paare über­mit­telt wie in nach­fol­gen­dem Beispiel zu sehen:

<struct>
    <member>
        <name>Eintrag 1</name>
        <value><int>1</int></value>
    </member>
    <member>
        <name>Eintrag 2</name>
        <value><int>2</int></value>
    </member>
</struct>
Hinweis

Einige Sprachen wie Java, die über XML-RPC-Im­ple­men­ta­tio­nen verfügen, bieten außerdem die Mög­lich­keit, Nullwerte anzugeben. Hierfür ist im XML-Dokument immer der Datentyp „nil“ zu verwenden, der al­ler­dings kein of­fi­zi­el­ler Be­stand­teil der XML-RPC-Spe­zi­fi­ka­ti­on ist und nicht von allen Servern un­ter­stützt wird.

Wo kommt XML-RPC zum Einsatz?

XML-RPC spielt in der heutigen Netz­werk­kom­mu­ni­ka­ti­on keine große Rolle mehr. Das Aus­tausch­for­mat hat sich nach seiner Ver­öf­fent­li­chung 1998 schnell als zu un­fle­xi­bel erwiesen, u. a. aufgrund der ein­ge­schränk­ten Er­wei­ter­bar­keit und der Tatsache, dass es keine eigenen XML-Struk­tu­ren über­tra­gen kann. Der daraus re­sul­tie­ren­de hohe Aufwand für die Um­wand­lung machte eine neue Lösung quasi un­ver­zicht­bar, die schnell mit dem bereits erwähnten SOAP (ebenfalls von Winer’s Team in Ko­ope­ra­ti­on mit Microsoft ent­wi­ckelt) geliefert wurde.

Dennoch gibt es auch heute noch Web­an­wen­dun­gen, die über eine XML-RPC-Schnitt­stel­le verfügen, um bei­spiels­wei­se den einfachen Da­ten­aus­tausch mit externen Diensten zu er­mög­li­chen. Das Bun­des­zen­tral­amt für Steuern stellt bei­spiels­wei­se eine XML-RPC-Schnitt­stel­le für die au­to­ma­ti­sier­te Über­prü­fung aus­län­di­scher Um­satz­steu­er-IDs zur Verfügung (seit 2019 via HTTPS-Abfrage). Auch Content-Ma­nage­ment-Systeme wie WordPress besitzen häufig eine XML-RPC-Schnitt­stel­le für den Austausch mit anderen Web­ser­vices. Zudem bildet das Aus­tausch­for­mat die Basis für die so­ge­nann­te Pingback-Technik, die Bloggern viele Jahre lang als wichtiges In­stru­ment für den Link-Aufbau gedient hat (im Artikel „Pingbacks und Track­backs Grund­la­gen“ erfahren Sie mehr zu diesem Thema).

Beispiel für eine einfache Ser­ver­ab­fra­ge via XML-RPC

Ab­schlie­ßend soll ein einfaches Beispiel die Client-Server-Kom­mu­ni­ka­ti­on über eine XML-RPC-Schnitt­stel­le ver­deut­li­chen. Dabei sieht die HTTP-Request des Clients wie folgt aus:

<?xml version="1.0"?>
    <methodCall>
        <methodName>statustest</methodName>
        <params>
        <param>
            <value><i4>10</i4></value>
        </param>
        </params>
    </methodCall>

In dem Container „me­thod­Call“ wird in diesem Fall die Funktion „sta­tus­test“ auf­ge­ru­fen, die ih­rer­seits in dem Container „me­thod­Na­me“ definiert ist. Als Parameter übergibt die Funktion den ganz­zah­li­gen Wert „10“.

Eine mögliche Antwort des Servers auf diesen „sta­tus­test“ könnte fol­gen­der­ma­ßen aussehen:

<?xml version="1.0"?>
    <methodResponse>
        <params>
        <param>
            <value><string>Status: OK</string></value>
        </param>
        </params>
    </methodResponse>

Die einfache Antwort des Servers lautet in diesem Bei­spiel­fall also „Status: OK“.

Zum Hauptmenü