Il protocollo XML-RPC (XML Remote Procedure Call) è utilizzato per eseguire delle procedure remote attraverso la Rete. Come per il protocollo SOAP anch'esso è basato su un client che effettua una richiesta ad un server, il server la processa per poi inviare una risposta al client.
La richiesta da parte del client viene effettuata tramite protocollo HTTP/HTTPS ed utilizza come formato di interscambio lo standard XML. La richiesta contiene al suo interno il nome della funzione da eseguire nel server remoto ed eventuali parametri. La risposta del server utilizza anch'essa XML come formato di output.
XML-RPC è quindi composto principalmente da tre elementi:
Elemento | Descrizione |
---|---|
XML-RPC data model | L'insieme di tipi di dato permessi per il passaggio dei parametri, per i valori di ritorno e per gli errori. |
XML-RPC request | Una richiesta HTTP in POST contenente il metodo da richiamare ed eventuali parametri. |
XML-RPC response | La risposta del server contenente un valore di ritorno o un errore. |
XML-RPC data model
La specifica XML-RPC definisce 6 tipi di dato primitivo:
Tipo di dato | Descrizione | Esempi |
---|---|---|
int o i4 | intero di 32-bit compreso tra 2,147,483,648 e 2,147,483,647. | <int>32</int> <i4>32</i4> |
double | decimale a 64-bit | <double>12.213123</double> <double>-2.432</double> |
Boolean | true (1) o false (0) | <boolean>1</boolean> <boolean>0</boolean> |
string | stringa di testo | <string>The quick brown fox jumps over the lazy dog</string> |
dateTime.iso8601 | Data in formato ISO8601: CCYYMMDDTHH:MM:SS | <dateTime.iso8601> 20190115T12:11:14 </dateTime.iso8601> |
base64 | Binario codificato in Base 64 | <base64>VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZw==</base64> |
Alcuni esempi di incapsulamento dei tipo di dato primitivo:
<value>
<i4>100</i4>
</value>
<value>
<double>21.2131</double>
</value>
<value>
<dateTime.iso8601>20190115T12:11:14</dateTime.iso8601>
</value>
Tali dati vengono incapsulati sempre all'interno di un tag XML <value>
. I dati primitivi possono essere combinati all'interno di altri due tipi di dato complessi:
Tipo di dato | Descrizione |
---|---|
array |
Contiene un insieme di dati primitivi in maniera sequenziale. |
struct |
Rappresenta un insieme di dati primitivi composti da una coppia chiave/valore. |
Vediamo ora un po' di esempi di come rappresentare gli array e le strutture:
<value>
<array>
<data>
<value><string>Un</string></value>
<value><string>array</string></value>
<value><string>di</string></value>
<value><string>stringhe</string></value>
</data>
</array>
</value>
<value>
<array>
<data>
<value><double>12.4312</double></value>
<value><i4>2</i4></value>
<value><string>stringhe</string></value>
<value><boolean>1</boolean></value>
</data>
</array>
</value>
<value>
<struct>
<member>
<name>keyName</name>
<value><string>value</string></value>
</member>
<member>
<name>keyName2</name>
<value><i4>12</i4></value>
</member>
</struct>
</value>
Ora che abbiamo visto come rappresentare i tipi di dato supportati da XML-RPC, nel prossimo capitolo vedremo come costruire una richiesta da inviare ad un server che supporta tale protocollo.