title: XML-RPC
text: # XML-RPC
  
  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.
  
  ## Utilizzo
  
  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 dato
  
  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 |
  
  ## Esempi
  
  Un esempio di richiesta XML-RPC tipica può essere:
  
  Se la richiesta va in porto, XML-RPC produrrà una risposta del tipo:
  
  Altrimenti la risposta sarà del tipo:
  
  