XML-RPC: Difference between revisions

Content deleted Content added
clarify. Also, XML-RPC cannot use HTTPS
Citation bot (talk | contribs)
Added work. | Use this bot. Report bugs. | Suggested by Dominic3203 | Category:Internet protocols | #UCB_Category 165/248
 
(27 intermediate revisions by 23 users not shown)
Line 1:
{{Short description|Data serialization format}}
{{Refimprove|date=October 2016}}
{{Distinguish|text = the use of XML for RPC, independently of the specific protocol. This article is about the protocol named "XML-RPC"}}
 
{{UseMore dmycitations datesneeded|date=October 20122016}}
{{Use dmy dates|date=December 2021}}
'''XML-RPC''' is a [[remote procedure call]] (RPC) [[Communications protocol|protocol]] which uses [[XML]] to encode its calls and [[HTTP]] as a transport mechanism.<ref name="book1">Simon St. Laurent, Joe Johnston, Edd Dumbill. (June 2001) ''Programming Web Services with XML-RPC.'' O'Reilly. First Edition.</ref> "XML-RPC" also refers generically to the use of XML for remote procedure call, independently of the specific protocol. This article is about the protocol named "XML-RPC".
 
==History==
The XML-RPC protocol was created in 1998 by [[Dave Winer]] of [[UserLand Software]] and [[Microsoft]],<ref>{{cite web|last=Box|first=Don|title=A Brief History of SOAP
|publisher=[[O'Reilly Media|O'Reilly]]|date=1 April 2001|url=http://www.xml.com/pub/a/ws/2001/04/04/soap.html
|last=Box
|accessdateaccess-date=27 October 2010}}</ref> with Microsoft seeing the protocol as an essential part of scaling up its efforts in business-to-business e-commerce.<ref>{{Cite web|last=Rupley |first=Sebastian |title=XML's Next Step |work=PC Magazine |accessdateaccess-date=2015-11-17 |date=1999-06-30 |url=http://www.zdnet.com/pcmag/stories/trends/0,7607,2286488,00.html |deadurlurl-status=yesdead |archiveurlarchive-url=https://web.archive.org/web/20000304215507/http://www.zdnet.com/pcmag/stories/trends/0,7607,2286488,00.html |archivedatearchive-date=4 March 2000 }}</ref> As new functionality was introduced, the standard evolved into what is now [[SOAP (protocol)|SOAP]].<ref name=spearheads>{{Cite news|last=Walsh |first=Jeff |title=Microsoft spearheads protocol push |work=Infoworld |accessdateaccess-date=2015-11-17 |date=1999-07-10 |url=http://www.infoworld.com/cgi-bin/displayStory.pl?980710.whsoap.htm |deadurlurl-status=yesdead |archiveurlarchive-url=https://web.archive.org/web/19990914001234/http://www.infoworld.com/cgi-bin/displayStory.pl?980710.whsoap.htm |archivedatearchive-date=14 September 1999 }}</ref>
|first=Don
|title=A Brief History of SOAP
|publisher=[[O'Reilly]]
|date=1 April 2001
|url=http://www.xml.com/pub/a/ws/2001/04/04/soap.html
|accessdate=27 October 2010}}</ref> with Microsoft seeing the protocol as an essential part of scaling up its efforts in business-to-business e-commerce.<ref>{{Cite web|last=Rupley |first=Sebastian |title=XML's Next Step |work=PC Magazine |accessdate=2015-11-17 |date=1999-06-30 |url=http://www.zdnet.com/pcmag/stories/trends/0,7607,2286488,00.html |deadurl=yes |archiveurl=https://web.archive.org/web/20000304215507/http://www.zdnet.com/pcmag/stories/trends/0,7607,2286488,00.html |archivedate=4 March 2000 }}</ref> As new functionality was introduced, the standard evolved into what is now [[SOAP (protocol)|SOAP]].<ref name=spearheads>{{Cite news|last=Walsh |first=Jeff |title=Microsoft spearheads protocol push |work=Infoworld |accessdate=2015-11-17 |date=1999-07-10 |url=http://www.infoworld.com/cgi-bin/displayStory.pl?980710.whsoap.htm |deadurl=yes |archiveurl=https://web.archive.org/web/19990914001234/http://www.infoworld.com/cgi-bin/displayStory.pl?980710.whsoap.htm |archivedate=14 September 1999 }}</ref>
 
UserLand supported XML-RPC from version 5.1 of its Frontier web content management system,<ref name=spearheads /> released in June 1998.<ref>{{cite web| last = Walsh| first = Jeff| title = UserLand releases Frontier 5.1, drops freeware model | work = InfoWorld| accessdateaccess-date =November 17, November 2015| date = June 29, June 1998| url = http://www.infoworld.com/cgi-bin/displayStory.pl?980629.wifrontier.htm |archiveurlarchive-url = https://web.archive.org/web/19990915175718/http://www.infoworld.com/cgi-bin/displayStory.pl?980629.wifrontier.htm |archivedatearchive-date=15 September 1999 }}</ref>
 
XML-RPC's idea of a human-readable-and-writable, script-parsable standard for HTTP-based requests and responses has also been implemented in competing specifications such as Allaire's [[WDDX|Web Distributed Data Exchange]] (WDDX) and webMethod's [[WIDL (Internet Standard)|Web Interface Definition Language]] (WIDL).<ref>{{Cite news|last=Udell |first=Jon |title=Exploring XML-RPC: DCOM? CORBA? RMI? Why Not Just XML-RPC? |work=Byte |accessdateaccess-date=2015-11-17 |date=1999-06-07 |url=http://www.byte.com/features/1999/06/0607XML_RPC5.html |deadurlurl-status=yesdead |archiveurlarchive-url=https://web.archive.org/web/20000304171225/http://www.byte.com/features/1999/06/0607XML_RPC5.html |archivedatearchive-date=4 March 2000 }}</ref> Prior art wrapping [[Component Object Model|COM]], [[Common Object Request Broker Architecture|CORBA]], and [[Java remote method invocation|Java RMI]] objects in XML syntax and transporting them via HTTP also existed in DataChannel's WebBroker technology.<ref>{{Cite news|volume=20 |issue=21 |last=Walsh |first=Jeff |title=W3C gives a nod to DataChannel's WebBroker |work=Infoworld |accessdateaccess-date=2015-11-17 |date=1998-05-25 |url=http://www.infoworld.com/cgi-bin/displayArchive.pl?/98/21/i06-21.80.htm |deadurlurl-status=yesdead |archiveurlarchive-url=https://web.archive.org/web/19990910213004/http://www.infoworld.com/cgi-bin/displayArchive.pl?/98/21/i06-21.80.htm |archivedatearchive-date=10 September 1999 }}</ref><ref>{{Cite web|last1=Vizard |first1=Michael |last2=Walsh |first2=Jeff |title=DataChannel's Dave Pool talks about shaping the role of XML to suit different needs |work=Infoworld |accessdateaccess-date=2015-12-08 |date=1998-06-29 |url=http://www.infoworld.com/cgi-bin/displayStory.pl?/interviews/980629pool.htm |deadurlurl-status=yesdead |archiveurlarchive-url=https://web.archive.org/web/19990916093829/http://www.infoworld.com/cgi-bin/displayStory.pl?/interviews/980629pool.htm |archivedatearchive-date=16 September 1999 }}</ref>
 
The generic use of XML for [[remote procedure call]] (RPC) was patented by [[Phillip Merrick]], Stewart Allen, and Joseph Lapp in April 2006, claiming benefit to a provisional application filed in March 1998. The patent iswas assigned to [[webMethods]], located in [[Fairfax, VAVirginia]]. The patent expired on March 23, 2019.<ref name= "merrick01">{{cite web |url=http://www.google.com/patents?id=WFV4AAAAEBAJ |archive-url=https://web.archive.org/web/20111203095836/http://www.google.com/patents?id=WFV4AAAAEBAJ |url-status=dead |archive-date=3 December 2011 |title=US Patent 7,028,312 |accessdateaccess-date=18 September 2008 |author=Merrick|date=11 April 2006|display-authors=etal}}</ref>
 
==Usage==
In XML-RPC, a client performs an RPC by sending an HTTP request to a server that implements XML-RPC and receivingreceives the HTTP response. A call can have multiple parameters and one result. The protocol defines a few data types for the parameters and result. Some of these data types are complex, i.e. nested. For example, you can have a parameter that is an array of five integers.
 
The parameters/result structure and the set of data types are meant to mirror those used in common programming languages.
Line 27 ⟶ 23:
''Identification'' of clients for authorization purposes can be achieved using popular HTTP security methods. [[Basic access authentication]] can be used for identification and authentication.
 
In comparison to [[REST]]fulRESTful protocols, where ''resource representations'' (documents) are transferred, XML-RPC is designed to ''call methods''. The practical difference is just that XML-RPC is much more structured, which means common library code can be used to implement clients and servers and there is less design and documentation work for a specific application protocol. {{Citation needed|reason=This is a vague opinion that doesn't reflect commonly accepted views, XML-RPC adoption having been declining for its lack of reuse and common structure by major actors since the last 20 years|date=August 2024}} One salient technical difference between typical RESTful protocols and XML-RPC is that many RESTful protocols use the HTTP URI for parameter information, whereas with XML-RPC, the URI just identifies the server.
The protocol does not allow [[HTTPS]], but it is a common and obvious variation to use HTTPS in place of HTTP.
 
In comparison to [[REST]]ful protocols, where ''resource representations'' (documents) are transferred, XML-RPC is designed to ''call methods''. The practical difference is just that XML-RPC is much more structured, which means common library code can be used to implement clients and servers and there is less design and documentation work for a specific application protocol. One salient technical difference between typical RESTful protocols and
XML-RPC is that the RESTful protocol uses the HTTP URI for parameter information whereas with XML-RPC, the URI just identifies the server.
 
[[JSON-RPC]] is similar to XML-RPC.
Line 43 ⟶ 36:
|array
|
<sourcesyntaxhighlight lang="xml">
<array>
<data>
Line 51 ⟶ 44:
</data>
</array>
</syntaxhighlight>
</source>
|[[Array data structure|Array]] of values, storing no keys
|-
|base64
|
<sourcesyntaxhighlight lang="xml">
<base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64>
</syntaxhighlight>
</source>
|[[Base64]]-encoded binary data
|-
|boolean
|
<sourcesyntaxhighlight lang="xml">
<boolean>1</boolean>
</syntaxhighlight>
</source>
|[[Boolean datatypedata type|Boolean]] logical value (0 or 1)
|-
|date/time
|
<sourcesyntaxhighlight lang="xml">
<dateTime.iso8601>19980717T14:08:5555Z</dateTime.iso8601>
</syntaxhighlight>
</source>
|Date and time in [[ISO 8601]] format
|-
|double
|
<sourcesyntaxhighlight lang="xml">
<double>-12.53</double>
</syntaxhighlight>
</source>
|[[Double precision]] floating point number
|-
|integer
|
<sourcesyntaxhighlight lang="xml">
<int>42</int>
</syntaxhighlight>
</source>
or
<sourcesyntaxhighlight lang="xml">
<i4>42</i4>
</syntaxhighlight>
</source>
|Whole number,Signed [[integer]] coded on 4 bytes
|-
|string
|
<sourcesyntaxhighlight lang="xml">
<string>Hello world!</string>
</syntaxhighlight>
</source>
or
<sourcesyntaxhighlight lang="xml">
Hello world!
</syntaxhighlight>
</source>
|String of characters. Must follow [[XML#Characters and escaping|XML encoding]].
|-
|struct
|
<sourcesyntaxhighlight lang="xml">
<struct>
<member>
Line 117 ⟶ 110:
</member>
</struct>
</syntaxhighlight>
</source>
|[[Associative array]]
|-
|nil
|
<sourcesyntaxhighlight lang="xml">
<nil/>
</syntaxhighlight>
</source>
|[[nullable type|Discriminated null value]]; an XML-RPC [https://web.archive.org/web/20050911054235/http://ontosys.com/xml-rpc/extensions.php extension]
|
|-
|long
|
<syntaxhighlight lang="xml">
<i8>1312</i8>
</syntaxhighlight>
|Signed integer coded on 8 bytes. This is not part of the specification, but it is supported by several XML-RPC implementations<ref>{{cite web |title=RPC::XML - A set of classes for core data, message and XML handling - metacpan.org |work=MetaCPAN |url=https://metacpan.org/pod/RPC::XML |access-date=13 April 2025}}</ref>{{,}}<ref>{{cite web |title=User manual for XML-RPC For C/C++ |url=https://xmlrpc-c.sourceforge.io/doc/libgeneral.html |access-date=13 April 2025}}</ref>
|}
 
==Examples==
An example of a typical XML-RPC request would be:
<sourcesyntaxhighlight lang="xml">
<?xml version="1.0"?>
<methodCall>
Line 140 ⟶ 141:
</params>
</methodCall>
</syntaxhighlight>
</source>
 
An example of a typical XML-RPC response would be:
<sourcesyntaxhighlight lang="xml">
<?xml version="1.0"?>
<methodResponse>
Line 152 ⟶ 153:
</params>
</methodResponse>
</syntaxhighlight>
</source>
 
A typical XML-RPC fault would be:
<sourcesyntaxhighlight lang="xml">
<?xml version="1.0"?>
<methodResponse>
Line 173 ⟶ 174:
</fault>
</methodResponse>
</syntaxhighlight>
</source>
 
== Criticism ==
Line 182 ⟶ 183:
| date = 9 September 2009
| publisher = [[Stack Overflow]]
| accessdateaccess-date = 7 April 2011
}}
</ref><ref>
Line 189 ⟶ 190:
| title = An open poll on the merits of XmlRpc versus alternatives
| date = 22 November 2006
| publisher = www.intertwingly.net
| accessdateaccess-date = 7 April 2011
}}
</ref><ref>
Line 199 ⟶ 200:
|date = 14 January 2010
|publisher = joncanady.com
|accessdateaccess-date = 7 April 2011
|deadurlurl-status = yesdead
|archiveurlarchive-url = https://web.archive.org/web/20130511053512/http://joncanady.com/blog/2010/01/14/if-you-have-rest-why-xml-rpc/
|archivedatearchive-date = 11 May 2013
}}
</ref>
 
==See also==
 
* [[Weblogs.com]]
* [[Pingback]]
*[[Ajax (programming)]]
*[[Software componentry#Technologies for Software Components|Component technologies]]
Line 213 ⟶ 217:
*[[JSON-RPC]]
*[[Web service]]
*[[gRPC]]
 
==References==
{{Reflist}}
{{reflist|colwidth=30em}}
 
==External links==
* {{web archive|url=https://web.archive.org/web/20130113041824/http://xmlrpc.scripting.com/default.html|title=Official website}}
* {{Official| 1=http://www.xmlrpc.com/ }}
 
{{DEFAULTSORT:Xml-Rpc}}