Ri­chia­ma­re funzioni a distanza su computer remoti della rete o su sistemi di­stri­bui­ti (in­ter­con­nes­sio­ne di computer in­di­pen­den­ti) è ormai una pratica comune da decenni. L’idea di base per la tec­no­lo­gia RPC (Remote Procedure Call) sot­to­stan­te è stata descritta già nel 1976 da James E. White nel RFC 707, il che la rende an­te­ce­den­te anche alla nascita del World Wide Web.

Fatto

Per rendere il pro­to­col­lo RPC all’altezza dei requisiti dei sistemi in­for­ma­ti­ci attuali, nel 2015 Google ha svi­lup­pa­to il framework gRPC.

Una delle soluzioni più popolari per uti­liz­za­re questa tec­no­lo­gia è il pro­to­col­lo XML-RPC. Le chiamate vengono rea­liz­za­te tramite il pro­to­col­lo HTTP(S) e il lin­guag­gio XML (Ex­ten­si­ble Markup Language). Cosa si cela dietro questa specifica, dove viene uti­liz­za­ta e come funziona esat­ta­men­te?

Che cos’è l’XML-RPC?

L’XML-RPC (ab­bre­via­zio­ne di Extensible Markup Language Remote Procedure Call) è una specifica di pro­to­col­lo per l’ese­cu­zio­ne di chiamate RPC (chiamate remote in reti in­for­ma­ti­che) che sfrutta il pro­to­col­lo stateless HTTP e il lin­guag­gio XML, da cui deriva anche il nome. Mentre l’HTTP regola il trasporto dei dati, la vi­sua­liz­za­zio­ne di questi ultimi avviene mediante l’XML. Nel definire lo standard XML-RPC, è stata posta par­ti­co­la­re at­ten­zio­ne alla sua com­pa­ti­bi­li­tà con vari linguaggi di pro­gram­ma­zio­ne e piat­ta­for­me di sistema.

N.B.

Sebbene la specifica XML-RPC preveda uni­ca­men­te il pro­to­col­lo HTTP non protetto per la tra­smis­sio­ne dei dati, ci sono ormai diverse va­ria­zio­ni diffuse e accettate dello standard che sup­por­ta­no la crit­to­gra­fia più sicura HTTPS, che utilizza anche la crit­to­gra­fia SSL/TLS.

Il pro­to­col­lo XML-RPC è stato svi­lup­pa­to nel 1998, quando lo svi­lup­pa­to­re di software Dave Winer e la sua azienda UserLand Software col­la­bo­ra­va­no a stretto contatto con Microsoft. Il gigante tec­no­lo­gi­co aveva infatti ri­co­no­sciu­to il grande po­ten­zia­le del nuovo standard per raf­for­za­re le proprie relazioni com­mer­cia­li B2B. Dotandolo di funzioni più moderne, l’XML-RPC si è affermato anche come pro­to­col­lo di in­ter­fac­cia per servizi web, ma con un nome diverso: SOAP (Simple Object Access Protocol).

Come funziona XML-RPC?

I client che de­si­de­ra­no uti­liz­za­re XML-RPC ricorrono al pro­to­col­lo di tra­smis­sio­ne HTTP, più pre­ci­sa­men­te 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 suc­ces­si­va­men­te il parametro o i parametri per la funzione de­si­de­ra­ta e li esegue. Il server comprime il risultato nuo­va­men­te 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 tra­sfe­ri­men­to dei parametri, ovvero nella risposta inviata a un client:

Tipo di dato Esempio di tag De­scri­zio­ne
array <array><data>…</data></array> Sequenza che può contenere più valori o tipi di dati
base64 <base64>SGFsbG8gV2VsdA==</base64> Dati binari co­di­fi­ca­ti in base64
boolean <boolean>1</boolean> Variabile booleana (vero = 1 vs. falso = 0)
dateTime.iso8601 <dateTime.iso8601>20200414T16:23:55</dateTime.iso8601> Data e ora in formato ISO 8601
double <double>-0.32653</double> Numero a virgola mobile in doppia pre­ci­sio­ne (64 bit)
integer <int>32</int> o <i4>32</i4> Integer (numero intero)
string <string>Ciao, mondo!</string> Stringa di caratteri; può contenere byte nulli
struct <struct><data>…</data></struct> Insieme di membri ognuno dei quali ha un nome e un valore (in questo caso i nomi cor­ri­spon­do­no a stringhe, mentre i valori possono essere di qualsiasi tipo)

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 de­si­de­ra­ti possono essere elencati uno dopo l’altro in qualsiasi ordine; con “struct” invece al server vengono trasmessi membri di nomi e valori pre-strut­tu­ra­ti, come potete vedere nel seguente esempio:

<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 im­ple­men­ta­zio­ni XML-RPC, come Java, offrono anche la pos­si­bi­li­tà di spe­ci­fi­ca­re valori nulli. Per farlo è ne­ces­sa­rio uti­liz­za­re nel documento XML il tipo di dati “nil”, che tuttavia non forma parte ufficiale della specifica XML-RPC e non è sup­por­ta­to da tutti i server.

In quali contesti si usa XML-RPC?

Nella co­mu­ni­ca­zio­ne di rete di oggi, il pro­to­col­lo XML-RPC ha ormai perso terreno. Dopo la sua pub­bli­ca­zio­ne nel 1998, il formato di scambio si è ra­pi­da­men­te rivelato poco fles­si­bi­le, in parte a causa della limitata esten­si­bi­li­tà e del fatto che non può tra­sfe­ri­re strutture XML proprie. La difficile con­ver­sio­ne che ne deriva ha reso vir­tual­men­te in­di­spen­sa­bi­le lo sviluppo di una soluzione nuova, ovvero SOAP (anch’esso svi­lup­pa­to dal team di Winer in col­la­bo­ra­zio­ne con Microsoft).

Tuttavia, ci sono ancora oggi ap­pli­ca­zio­ni web che uti­liz­za­no un’in­ter­fac­cia XML-RPC al fine, ad esempio, di con­sen­ti­re un semplice scambio di dati con servizi esterni. Un esempio è l’Agenzia delle entrate tedesca, che fornisce un’in­ter­fac­cia XML-RPC per la verifica au­to­ma­ti­ca delle partite IVA estere (dal 2019 tramite richiesta HTTPS). Anche i sistemi di gestione dei contenuti, come WordPress, uti­liz­za­no spesso un’in­ter­fac­cia XML-RPC per lo scambio con altri servizi web. Il formato di scambio co­sti­tui­sce, inoltre, la base per la co­sid­det­ta tecnica pingback, che è stato per diversi anni uno strumento im­por­tan­te per la creazione di link uti­liz­za­to dai blogger (trovate un ap­pro­fon­di­men­to nell’articolo “Cosa sono i pingback e i trackback?”.

Esempio di una richiesta semplice al server con XML-RPC

Infine vi pre­sen­tia­mo un semplice esempio per il­lu­stra­re la co­mu­ni­ca­zio­ne tra client e server tramite un’in­ter­fac­cia XML-RPC. La richiesta HTTP del client è la seguente:

<?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 con­te­ni­to­re “me­tho­d­Call”, che a sua volta viene definito nel con­te­ni­to­re “me­thod­Na­me”. Come parametro, la funzione trasmette il valore intero “10”.

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

<?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”.

Vai al menu prin­ci­pa­le