[s-xml-rpc-devel] Defining remote functions
Frédéric Brunel
frederic.brunel at free.fr
Thu Jun 17 18:20:51 UTC 2004
Hi,
By googling the Web for an XML-RPC implementation in Common Lisp, I
found S-XML-RPC and other one for Corman Lisp. I'm glad that S-XML-RPC
is now part of Common-Lisp.net.
By the way, looking at the Corman Lisp API for XML-RPC, I found
interesting that it have the ability to define a standard function
embedding an XML-RPC call. How about implementing this kind of thing
in S-XML-RPC? I wrote the following lines of code:
(defmacro define-xmlrpc-method (name args &key url method)
`(defun ,name ,args
(xml-rpc-call (encode-xml-rpc-call ,method , at args)
:url ,(puri:uri-path url)
:host ,(puri:uri-host url)
:port ,(cond ((puri:uri-port url)) (t 80)))))
(define-xmlrpc-method get-state-name (state)
:url #u"http://betty.userland.com/RPC2"
:method "examples.getStateName")
(define-xmlrpc-method get-time ()
:url #u"http://time.xmlrpc.com/RPC2"
:method "currentTime.getCurrentTime")
? (get-state-name 41)
"South Dakota"
? (get-time)
#<XML-RPC-TIME 20040617T10:47:31>
I rely on the great PURI package to parse URL. Quite straightforward.
Of course, we should also wrap and unwrap some type convertions not to
see anything about the XML-RPC types. I guess the function should also
accept HASHTABLEs to be converted in XML-RPC structs.
What do you think?
--
Frederic Brunel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 155 bytes
Desc: Ceci est une signature ?lectronique PGP
URL: <https://mailman.common-lisp.net/pipermail/s-xml-rpc-devel/attachments/20040617/e99b6dfc/attachment.sig>
More information about the S-xml-rpc-devel
mailing list