(翻译:滴水 最后修改时间:2005-3-15 后续完善)
<?xml version='1.0'?><methodCall> <methodName>examples.getStateName</methodName> <params> <param> <value><i4>41</i4></value> </param> </params> </methodCall>
Tag
Type
Example
<i4> or <int>
four-byte signed integer
-12
<boolean>
0 (false) or 1 (true)
1
<string>
string
hello world
<double>
double-precision signed floating point number
-12.214
<dateTime.iso8601>
date/time
19980717T14:08:55
<base64>
base64-encoded binary
eW91IGNhbid0IHJlYWQgdGhpcyE=
<?xml version='1.0'?><methodResponse> <params> <param> <value><string>South Dakota</string></value> </param> </params> </methodResponse>
<?xml version='1.0'?><methodResponse> <fault> <value> <struct> <member> <name>faultCode</name> <value><int>4</int></value> </member> <member> <name>faultString</name> <value><string>Too many parameters.</string></value> </member> </struct> </value> </fault> </methodResponse>
We also wanted it to be an easy to implement protocol that could quickly be adapted to run in other environments or on other operating systems.
can contain a single <params>...' This is confusing. Can we leave out the <params>? No you cannot leave it out if the procedure executed successfully. There are only two options, either a response contains a <params> structure or it contains a <fault> structure. That's why we used the word 'can' in that sentence.
Is 'boolean' a distinct data type, or can boolean values be interchanged with integers (e.g. zero=false, non-zero=true)? Yes, boolean is a distinct data type. Some languages/environments allow for an easy coercion from zero to false and one to true, but if you mean true, send a boolean type with the value true, so your intent can't possibly be misunderstood.
What is the legal syntax (and range) for integers? How to deal with leading zeros? Is a leading plus sign allowed? How to deal with whitespace? An integer is a 32-bit signed number. You can include a plus or minus at the beginning of a string of numeric characters. Leading zeros are collapsed. Whitespace is not permitted. Just numeric characters preceeded by a plus or minus.
What is the legal syntax (and range) for floating point values (doubles)? How is the exponent represented? How to deal with whitespace? Can infinity and 'not a number' be represented? There is no representation for infinity or negative infinity or 'not a number'. At this time, only decimal point notation is allowed, a plus or a minus, followed by any number of numeric characters, followed by a period and any number of numeric characters. Whitespace is not allowed. The range of allowable values is implementation-dependent, is not specified.
What characters are allowed in strings? Non-printable characters? Null characters? Can a 'string' be used to hold an arbitrary chunk of binary data? Any characters are allowed in a string except < and &, which are encoded as < and &. A string can be used to encode binary data.
Does the 'struct' element keep the order of keys. Or in other words, is the struct 'foo=1, bar=2' equivalent to 'bar=2, foo=1' or not? The struct element does not preserve the order of the keys. The two structs are equivalent.
Can the <fault> struct contain other members than <faultCode> and <faultString>? Is there a global list of faultCodes? (so they can be mapped to distinct exceptions for languages like Python and Java)? A <fault> struct may not contain members other than those specified. This is true for all other structures. We believe the specification is flexible enough so that all reasonable data-transfer needs can be accomodated within the specified structures. If you believe strongly that this is not true, please post a message on the discussion group.
There is no global list of fault codes. It is up to the server implementer, or higher-level standards to specify fault codes.
What timezone should be assumed for the dateTime.iso8601 type? UTC? localtime? Don't assume a timezone. It should be specified by the server in its documentation what assumptions it makes about timezones.