WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-api

[Xen-API] Typing in XML-RPC

To: Xen-API <xen-api@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-API] Typing in XML-RPC
From: Anthony Liguori <aliguori@xxxxxxxxxx>
Date: Fri, 23 Jun 2006 14:13:11 -0500
Delivery-date: Fri, 23 Jun 2006 12:13:27 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-api-request@lists.xensource.com?subject=help>
List-id: Discussion of API issues surrounding Xen <xen-api.lists.xensource.com>
List-post: <mailto:xen-api@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-api-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 1.5.0.4 (X11/20060615)
One of the first things I noticed is that the spec defines some extended types. This is a bit challenging in XML-RPC. It's unclear to me how 64 bit integer is represented (since XML-RPC only defines 32 bit integers). Also, defining void to an empty string is understandable but requires some special casing that really shouldn't be necessary.

Here's what I propose:

As a convention, we never use <struct>'s on the wire to directly represent structures. By convention, structs always appear as:

<struct>
<member><name>kind</name><value><string>[typename]</string></value></member>
 <member><name>value</name><value>[typevalue]</value></member>
</struct>

Where typename is the string representation of the type and typevalue is the type-specific value.

Some common types would be:

struct - use this to represent actual structs. typevalue is the normal encoding of a struct long - 64 bit representation of struct. typevalue is the string representation
void - use to represent None.  typevalue is ignored.

What's nice about this sort of consistent approach is that we can write a marshalling/unmarshalling wrapper for Python that automagically does this conversion. Furthermore, if we did decide to support objects (as the current spec does), we could automagically marshal/unmarshal these over the wire.

The general idea here is that this is an extensible typing system for XML-RPC.

Another thing to consider is having a type of exception. I like exception based APIs (i'll say that for another email) however the format of the standard XML-RPC exception leaves a lot to be desired.

Thoughts?

Regards,

Anthony Liguori

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-api

<Prev in Thread] Current Thread [Next in Thread>