XML-RPC è un protocollo utilizzato in informatica che permette di eseguire delle chiamate a procedure remote (RPC) attraverso la rete Internet.

Questo protocollo si basa sullo standard XML per codificare la richiesta che viene trasportata mediante il protocollo HTTP o HTTPS. Nonostante la sua semplicità, permette di trasmettere strutture dati complesse, chiederne l'esecuzione e averne indietro il risultato.

UtilizzoModifica

XML-RPC funziona inviando una richiesta HTTP al server che implementa il protocollo. Il client in questo caso è tipicamente del software che vuole invocare un singolo metodo su di un sistema remoto. Al metodo remoto possono essere passati parametri di input multipli e viene restituito un solo valore di ritorno. I tipi di parametri permettono di nidificare i parametri stessi in liste e mappe, in modo da poter trasportare strutture di più grandi dimensioni. Quindi XML-RPC può essere utilizzato per trasportare oggetti o strutture sia come parametri di input che per restituire i valori di output.

L'"identificazione" del client per scopi di autorizzazione può essere ottenuta utilizzando i noti metodi di sicurezza di HTTP. Per l'identificazione viene utilizzata la basic access authentication, HTTPS viene invece utilizzato quando si ha necessità di identificazione (attraverso certificati) e messaggi criptati. Entrambi i metodi possono comunque essere combinati. A differenza di REST, in cui vengono trasferite "rappresentazioni di risorse" (documenti) XML-RPC è progettato per "invocare metodi".

XML-RPC è più semplice da utilizzare e da capire rispetto a SOAP perché:

  • Permette un solo modo per serializzare i metodi, invece SOAP definisce molti encodings differenti.
  • Ha un modello di sicurezza più semplice.
  • Non richiede (né supporta) la creazione di descrizioni di servizio WSDL, sebbene XRDL offra un semplice subset delle funzionalità fornite da WSDL.

JSON-RPC è molto simile ad XML-RPC, la differenza sostanziale sta nel fatto che i dati vengono incapsulati in pacchetti JSON anziché XML.

Tipi di datoModifica

I tipi di dato più comuni possono essere convertiti nel loro equivalente XML secondo gli esempi mostrati di seguito:

Nome Esempio Descrizione
array
<array>
  <data>
    <value><i4>1404</i4></value>
    <value><string>Something here</string></value>
    <value><i4>1</i4></value>
  </data>
</array>
Array non associativo (senza chiavi)
base64
<base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64>
Dati binari codificati in Base64
boolean
<boolean>1</boolean>
Booleano (0 or 1)
date/time
<dateTime.iso8601>19980717T14:08:55</dateTime.iso8601>
Data e ora in formato ISO 8601
double
<double>-12.53</double>
Double, numero in virgola mobile
integer
<int>42</int>

o

<i4>42</i4>
Numero intero
string
<string>Hello world!</string>

o

Hello world!
Stringa di caratteri. Deve seguire le regole di codifica di XML.
struct
<struct>
  <member>
    <name>foo</name>
    <value><i4>1</i4></value>
  </member>
  <member>
    <name>bar</name>
    <value><i4>2</i4></value>
  </member>
</struct>
Array associativo
nil
<nil/>
Valore nullo

EsempiModifica

Un esempio di richiesta XML-RPC tipica può essere:

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

Se la richiesta va in porto, XML-RPC produrrà una risposta del tipo:

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

Altrimenti la risposta sarà del tipo:

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

Voci correlateModifica

Collegamenti esterniModifica