# XML/RPC

XML
Copertina Tutti i moduli · Sviluppo
PrefazioneXML/Prefazione
* IntroduzioneXML/Introduzione
* Entità singoleXML/Entità singole
* Strutture dati di baseXML/Strutture dati di base
* Relazione uno-moltiXML/Relazione uno-molti
* Relazione uno-unoXML/Relazione uno-uno
* Relazione molti-moltiXML/Relazione molti-molti
* Relazioni ricorsiveXML/Relazioni ricorsive
* Schemi di datiXML/Schemi di dati
* Document Type Definition (DTD)XML/DTD
* XHTMLXML/XHTML
* XPathXML/XPath
* XLinkXML/XLink
* CSSXML/CSS
* XSLT e fogli di stileXML/XSLT e fogli di stile
* CocoonXML/Cocoon
* Parsing di file XMLXML/Parsing di file XML
* XULXML/XUL
* Asynchronous JavaScript and XML (AJAX)XML/AJAX
* Web serviceXML/Web service
* XMLHttpRequestXML/XMLHttpRequest
* Database e XMLXML/Database e XML
* SVGXML/SVG
* VoiceXMLXML/VoiceXML
* DocBookXML/DocBook
* SMILXML/SMIL
* XBRLXML/XBRL
* WDDX
* RPCXML/RPC
* RDFXML/RDF - Resource Description Framework
* RSSXML/RSS
* NamespaceXML/Namespace
* Gestire XML con MySQL
* XML EncryptionXML/XML Encryption
* XQueryXML/XQuery
* XML e JDBC
* XFormsXML/XForms
* OpenOffice.org e l'OpenDocument FormatXML/OpenOffice.org e l'OpenDocument Format
* KML e Google EarthXML/KML
* Lo standard ACORD - XML nel settore delle assicurazioniXML/ACORD
Modifica il sommario
Obiettivi di apprendimento
* Introdurre XML-RPC
* Scrivere codice XML-RPC a partire da esempi

## Che cos'è RPC

Per comprendere appieno XML-RPC, dobbiamo prima definire RPC. Una Remote Procedure Call (RPC) è un protocollo che consente a un programma in esecuzione su un host di generare codice che sarà eseguito su un altro host senza che il programmatore debba esplicitamente scrivere codice per questo. Un RPC viene avviato dal client che invia un messaggio di richiesta a un sistema remoto (il server) per eseguire una determinata procedura utilizzando gli argomenti forniti. Un messaggio con il risultato verrà restituito al client. Esistono varie implementazioni con molte varianti e finezze, con la conseguenza che esistono vari protocolli RPC diversi (incompatibili tra di loro).
Al fine di consentire l'accesso ai server da parte di client diversi, sono stati creati numerosi sistemi RPC standardizzati. La maggior parte di questi utilizza un IDL (Interface Description Language) per consentire a varie piattaforme di chiamare la RPC. I servizi web sono stati il ​​primo vero tentativo di implementare RPC su diverse piattaforme. Utilizzando i servizi web un client .NET può chiamare una procedura remota implementata in Java su un server Unix (e viceversa).
I servizi web utilizzano XML come IDL e HTTP come protocollo di rete. I vantaggi di questo sistema sono la semplicità e la standardizzazione: l'IDL è un file di testo ampiamente compreso e l'HTTP è integrato in quasi tutti i sistemi operativi moderni. Un esempio di tale sistema RPC è XML-RPC.

## Che cos'è XML-RPC

XML-RPC (Extensible Markup Language Remote Procedure Call) è un protocollo Remote Procedure Call codificato in XML. È un protocollo molto semplice, che definisce solo una manciata di tipi di dati e comandi, e l'intera descrizione può essere stampata su due pagine di carta. Ciò è in netto contrasto con la maggior parte dei sistemi RPC, in cui i documenti standard spesso arrivano a migliaia di pagine e richiedono un notevole supporto software per poter essere utilizzati.
È stato creato da Dave Winer nel 1995 per Microsoft. Tuttavia, Microsoft lo considerò troppo semplice e iniziò ad aggiungere funzionalità. Dopo varie integrazioni, lo standard non fu più così semplice e divenne quello che ora è SOAP.
    « Volevamo un formato pulito ed estensibile che fosse molto semplice. Per un programmatore HTML dovrebbe essere possibile guardare un file contenente una chiamata di procedura XML-RPC, capire cosa sta facendo ed essere in grado di modificarlo e farlo funzionare al primo o al secondo tentativo... Volevamo anche che fosse un protocollo facile da implementare, che potesse essere rapidamente adattato per funzionare in altri ambienti o su altri sistemi operativi. » (xmlrpc.com)

## Tipi di dati

| Nome | Esempio | Descrizione |
| array | <array> <data> <value><i4>1404</i4></value> <value><string>Something Here</string></value> <value><i4>1</i4></value> </data> </array> | Matrice di valori, senza memorizzazione di chiavi |
| base64 | <base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64> | Dati binari codificati a base 64 |
| boolean | <boolean>1</boolean> | Valore logico [booleano] (0 o 1) |
| date/time | <dateTime.iso8601>19980717T14:08:55</dateTime.iso8601> | Data e ora |
| double | <double>-12.53</double> | Doppio numero variabile [precisione] |
| integer | <i4>42</i4> | Numero intero, [intero] |
| string | <string>Hello world!</string> | Stringa di caratteri, deve seguire la codifica XML |
| struct | <struct> <member> <name>foo</name> <value><i4>1</i4></value> </member> <member> <name>bar</name> <value><i4>2</i4></value> </member> </struct> | Matrice di valori, con memorizzazione delle chiavi |
| nil | <nil/> | Discrimina il valore nullo; un'estensione XML-RPC |

### Esempi

Un esempio di una tipica richiesta XML-RPC sarebbe:
Un esempio di una tipica risposta XML-RPC sarebbe:
Un tipico errore XML-RPC sarebbe:
Un ultimo esempio, confrontando un array associativo PHP con un equivalente <struct> XML-RPC. Questo array:
Diventa il seguente XML-RPC:

## Collegamenti esterni

* XML-RPC Homepage
* XML-RPC Specification
* Free Online Dictionary of Computing
* Forum
* Tutorials
* Technology Reports