guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

xmlrpc module


From: Aleix Conchillo Flaqué
Subject: xmlrpc module
Date: Fri, 14 Jan 2011 00:19:59 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.16) Gecko/20101227 Iceowl/1.0b1 Icedove/3.0.11

Hi,

two weeks ago I decided to start my path to practical Scheme by adding
new features to an existing project. This would help me seeing how
experimented Scheme programmers work and also safe me from finding a new
idea and start from scratch, which sometimes is a bit discouraging.

I took tekuti, Andy Wingo's blog software, and I'm having lots of fun
with it. One of the features I added was the support of the Movable
Type XMLRPC API, so I could post and edit articles from a desktop
client.

After a few tries I thought I could create a generic XMLRPC library for
Guile, and this is what's this post about, the (tekuti xmlrpc) module.

I would be very happy to receive your inputs so I can improve it in all
senses. Note that the library does not support error handling yet.

(tekuti xmlrpc) attached and basic documentation below.

Best regards and thanks in advance.

Aleix

---------

*** XMLRPC requests ***

- xml->sxmlrpc-request str

  Given an XML string return an association list representing an
  XMLRPC request with two pairs:

    '((method . methodName)
      (params . (param1 param2 ... paramN)))

  param is the ordered list of the XMLRPC function call
  parameters. XMLRPC parameters are mapped to Scheme types as follows:

      boolean          -> boolean
      i4 / int         -> number
      double           -> number
      string           -> string
      base64           -> string (base64 kept)
      structure        -> association list
      array            -> list
      dateTime.iso8601 -> date

- sxmlrpc-request-method req

  Return the method of an XMLRPC request.

- sxmlrpc-request-params req

  Return the parameters of an XMLRPC request.


*** XMLRPC responses ***

- sxmlrpc-integer v

  Create an XMLRPC integer.

  (sxmlrpc-integer 34) -> <int>34</int>

- sxmlrpc-boolean b

  Create an XMLRPC boolean.

  (sxmlrpc-boolean #t) -> <boolean>1</boolean>

- sxmlrpc-string s

  Create an XMLRPC string.

  (sxmlrpc-string "Hello!") -> <string>Hello!</string>

- sxmlrpc-base64 b64

  Create an XMLRPC Base64 string.

(sxmlrpc-base64 "eWHJlYWQgdGhpcyE=") -> <base64>eWHJlYWQgdGhpcyE=</base64>

- sxmlrpc-date d

  Create an XMLRPC date.

  (sxmlrpc-date (current-date)) ->
           <dateTime.iso8601>20100114T00:01:02</dateTime.iso8601>

- sxmlrpc-array data f-type

  Create an XMLRPC array for the given data list. Each item in the list
  will be of the XMLRPC type obtained from the f-type procedure.

  (sxmlrpc-array '(1 2 3) sxmlrpc-integer)

    ->
           <array>
             <data>
                <value><int>1</int></value>
                <value><int>2</int></value>
                <value><int>3</int></value>
             </data>
           </array>

- sxmlrpc-struct members

  Create an XMLRPC structure where each entry is a pair from the given
  members.

  (sxmlrpc-struct `((blogId . ,(sxmlrpc-integer 14))
                    (blogName . ,(sxmlrpc-string "Just another blog")))

    ->
           <struct>
             <member>
                <name>blogId</name>
                <value><int>14</int></value>
             </member>
             <member>
                <name>blogName</name>
                <value><string>Just another blog</string></value>
             </member>
           </struct>

- sxmlrpc-fault code message

  Create an XMLRPC fault message.

  (sxmlrpc-fault 23 "Authorization required")

    ->
           <fault>
             <value>
               <struct>
                 <member>
                   <name>faultCode</name>
                   <value>23</value>
                 </member>
                 <member>
                   <name>faultString</name>
                   <value>Authorization required</value>
                 </member>
               </struct
             </value>

- sxmlrpc-fault->xml fault port

  Create an XMLRPC response fault string with the given fault (obtained
  with sxmlrpc-fault) and write it to the given port.

- sxmlrpc-response->xml param port

  Create an XMLRPC response string with the given XMLRPC parameter and
  write it to the specified port.

  XMLRPC parameter is one obtained from: sxmlrpc-string, sxmlrpc-struct,
  sxmlrpc-array...

Attachment: xmlrpc.scm
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]