# XML-RPC: Remote Procedure Call in formato XML

Richiamare funzioni **a distanza** su computer remoti della rete o su sistemi distribuiti (interconnessione di computer indipendenti) è ormai una pratica comune da decenni. L’idea di base per la tecnologia [RPC (Remote Procedure Call)](https://www.ionos.it/digitalguide/server/know-how/che-cose-il-remote-procedure-call/ "Che cos’è il Remote Procedure Call?") sottostante è stata descritta già nel 1976 da James E. White nel [RFC 707](https://tools.ietf.org/html/rfc707 "RFC 707: RFC 707 -Quadro di alto livello per la condivisione delle risorse in rete"), il che la rende antecedente anche alla nascita del World Wide Web.

Fatto Per rendere il protocollo RPC all’altezza dei requisiti dei sistemi informatici attuali, nel 2015 Google ha sviluppato il framework [gRPC](https://www.ionos.it/digitalguide/server/know-how/introduzione-al-grpc/ "Introduzione al gRPC").

Una delle soluzioni più popolari per utilizzare questa tecnologia è il protocollo XML-RPC. Le chiamate vengono realizzate tramite il protocollo HTTP(S) e il linguaggio [XML](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/cose-xml/ "Cos’è XML?") (Extensible Markup Language). Cosa si cela dietro questa **specifica**, dove viene utilizzata e come funziona esattamente?

## Che cos’è l’XML-RPC?

L’XML-RPC (abbreviazione di **Ex**tensible **M**arkup **L**anguage **R**emote **P**rocedure **C**all) è una specifica di protocollo per l’esecuzione di chiamate RPC (chiamate remote in reti informatiche) che sfrutta il protocollo stateless [HTTP](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/protocollo-http/ "Protocollo HTTP") e il linguaggio XML, da cui deriva anche il nome. Mentre l’HTTP regola il trasporto dei dati, la visualizzazione di questi ultimi avviene mediante l’XML. Nel definire lo standard XML-RPC, è stata posta particolare attenzione alla sua compatibilità con vari linguaggi di programmazione e piattaforme di sistema.

N.B. Sebbene la specifica XML-RPC preveda unicamente il protocollo HTTP non protetto per la trasmissione dei dati, ci sono **ormai diverse variazioni diffuse e accettate dello standard** che supportano la crittografia più sicura [HTTPS](https://www.ionos.it/digitalguide/siti-web/creare-siti/come-si-migra-una-pagina-da-http-a-ssl-e-https/ "Come si migra una pagina da HTTP a SSL e HTTPS?"), che utilizza anche la crittografia **SSL/TLS**.

Il protocollo XML-RPC è stato sviluppato nel **1998**, quando lo sviluppatore di software Dave Winer e la sua azienda UserLand Software collaboravano **a stretto contatto con Microsoft**. Il gigante tecnologico aveva infatti riconosciuto il grande potenziale del nuovo standard per rafforzare le proprie relazioni commerciali [B2B](https://www.ionos.it/digitalguide/online-marketing/vendere-online/b2b-business-to-business/ "B2B: Business-to-Business"). Dotandolo di funzioni più moderne, l’XML-RPC si è affermato anche come **protocollo di interfaccia per servizi web**, ma con un nome diverso: [SOAP (Simple Object Access Protocol)](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/soap-simple-object-access-protocol/ "SOAP - Simple Object Access Protocol").

## Come funziona XML-RPC?

I client che desiderano utilizzare XML-RPC ricorrono al protocollo di trasmissione **[HTTP](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/richiesta-http/ "Richiesta HTTP")**, più precisamente al relativo metodo di richiesta POST. Dopo aver ricevuto la richiesta HTTP, il **server valuta il documento XML** che si trova nel corpo della richiesta. Dal suo contenuto genera successivamente il parametro o i parametri per la **funzione desiderata** e li esegue. Il server comprime il risultato nuovamente in un documento XML, che viene ora rinviato al client come parte di una risposta HTTP. XML-RPC **supporta** i seguenti **tipi di dati** per il trasferimento dei parametri, ovvero nella risposta inviata a un client:

<table>
  <thead>
    <tr>
      <th>Tipo di dato</th>
      <th>Esempio di tag</th>
      <th>Descrizione</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>array</td>
      <td>&lt;array&gt;&lt;data&gt;…&lt;/data&gt;&lt;/array&gt;</td>
      <td>Sequenza che può contenere più valori o tipi di dati</td>
    </tr>
    <tr>
      <td>base64</td>
      <td>&lt;base64&gt;SGFsbG8gV2VsdA==&lt;/base64&gt;</td>
      <td>Dati binari codificati in base64</td>
    </tr>
    <tr>
      <td>boolean</td>
      <td>&lt;boolean&gt;1&lt;/boolean&gt;</td>
      <td>Variabile booleana (vero = 1 vs. falso = 0)</td>
    </tr>
    <tr>
      <td>dateTime.iso8601</td>
      <td>&lt;dateTime.iso8601&gt;20200414T16:23:55&lt;/dateTime.iso8601&gt;</td>
      <td>Data e ora in formato ISO 8601</td>
    </tr>
    <tr>
      <td>double</td>
      <td>&lt;double&gt;-0.32653&lt;/double&gt;</td>
      <td>Numero a virgola mobile in doppia precisione (64 bit)</td>
    </tr>
    <tr>
      <td>integer</td>
      <td>&lt;int&gt;32&lt;/int&gt; o &lt;i4&gt;32&lt;/i4&gt;</td>
      <td>Integer (numero intero)</td>
    </tr>
    <tr>
      <td>string</td>
      <td>&lt;string&gt;Ciao, mondo!&lt;/string&gt;</td>
      <td>Stringa di caratteri; può contenere byte nulli</td>
    </tr>
    <tr>
      <td>struct</td>
      <td>&lt;struct&gt;&lt;data&gt;…&lt;/data&gt;&lt;/struct&gt;</td>
      <td>Insieme di membri ognuno dei quali ha un nome e un valore (in questo caso i nomi corrispondono a stringhe, mentre i valori possono essere di qualsiasi tipo)</td>
    </tr>
  </tbody>
</table>

Se si **devono combinare** più valori o tipi di dati, potete scegliere tra due opzioni nella notazione XML-RPC, “**array**” e “**struct**”. Con la prima opzione, i dati desiderati possono essere elencati uno dopo l’altro in qualsiasi ordine; con “struct” invece al server vengono trasmessi membri di nomi e valori pre-strutturati, come potete vedere nel seguente esempio:

```none
<struct>
    <member>
        <name>Voce 1</name>
        <value><int>1</int></value>
    </member>
    <member>
        <name>Voce 2</name>
        <value><int>2</int></value>
    </member>
</struct>
```

N.B. Alcuni linguaggi con implementazioni XML-RPC, come Java, offrono anche la possibilità di **specificare valori nulli**. Per farlo è necessario utilizzare nel documento XML il tipo di dati “**nil**”, che tuttavia non forma parte ufficiale della specifica XML-RPC e non è supportato da tutti i server.

## In quali contesti si usa XML-RPC?

Nella comunicazione di rete di oggi, il protocollo XML-RPC ha ormai perso terreno. Dopo la sua pubblicazione nel 1998, il formato di scambio si è rapidamente rivelato **poco flessibile**, in parte **a causa della limitata estensibilità** e del fatto che non può trasferire strutture XML proprie. La **difficile conversione** che ne deriva ha reso virtualmente indispensabile lo sviluppo di una soluzione nuova, ovvero SOAP (anch’esso sviluppato dal team di Winer in collaborazione con Microsoft).

Tuttavia, ci sono ancora oggi applicazioni web che utilizzano un’**interfaccia XML-RPC** al fine, ad esempio, di consentire un semplice scambio di dati con servizi esterni. Un esempio è l’**Agenzia delle entrate tedesca**, che fornisce un’interfaccia XML-RPC per la **verifica automatica delle [partite IVA](https://www.ionos.it/digitalguide/startup/gestione/aprire-la-partita-iva-come-si-fa-e-in-quali-casi/ "Aprire la partita IVA: come si fa e in quali casi?") estere** (dal 2019 tramite richiesta HTTPS). Anche i [sistemi di gestione dei contenuti](https://www.ionos.it/digitalguide/hosting/cms/cms-a-confronto/ "CMS a confronto"), come [WordPress](https://www.ionos.it/digitalguide/hosting/cms/wordpress-il-cms-piu-conosciuto/ "WordPress: il CMS più conosciuto"), utilizzano spesso un’interfaccia XML-RPC per **lo scambio con altri servizi web**. Il formato di scambio costituisce, inoltre, la base per la cosiddetta **tecnica pingback**, che è stato per diversi anni uno strumento importante per la creazione di link utilizzato dai blogger (trovate un approfondimento nell’articolo [“Cosa sono i pingback e i trackback?”](https://www.ionos.it/digitalguide/hosting/blog/cosa-sono-i-pingback-e-i-trackback/ "Cosa sono i pingback e i trackback").

## Esempio di una richiesta semplice al server con XML-RPC

Infine vi presentiamo un semplice esempio per illustrare la comunicazione tra client e server tramite un’interfaccia XML-RPC. La **richiesta HTTP del client** è la seguente:

```none
<?xml version="1.0"?>
    <methodCall>
        <methodName>Test di stato</methodName>
        <params>
        <param>
            <value><i4>10</i4></value>
        </param>
        </params>
    </methodCall>
```

In questo caso, la **funzione** “Test di stato” viene chiamata nel **contenitore** “methodCall”, che a sua volta viene definito nel contenitore “methodName”. Come **parametro**, la funzione trasmette il valore intero “10”.

Una possibile **risposta del server** a questo “**Test di stato**” potrebbe apparire così:

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

La risposta semplice del server in questo esempio è “**Stato: OK**”.


This is a markdown version of: [https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/xml-rpc/](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/xml-rpc/) for AI/LLM consumption.