|
Packit Service |
4d2de5 |
[![GoDoc](https://godoc.org/github.com/kolo/xmlrpc?status.svg)](https://godoc.org/github.com/kolo/xmlrpc)
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
## Overview
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
xmlrpc is an implementation of client side part of XMLRPC protocol in Go language.
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
## Status
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
This project is in minimal maintenance mode with no further development. Bug fixes
|
|
Packit Service |
4d2de5 |
are accepted, but it might take some time until they will be merged.
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
## Installation
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
To install xmlrpc package run `go get github.com/kolo/xmlrpc`. To use
|
|
Packit Service |
4d2de5 |
it in application add `"github.com/kolo/xmlrpc"` string to `import`
|
|
Packit Service |
4d2de5 |
statement.
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
## Usage
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
client, _ := xmlrpc.NewClient("https://bugzilla.mozilla.org/xmlrpc.cgi", nil)
|
|
Packit Service |
4d2de5 |
result := struct{
|
|
Packit Service |
4d2de5 |
Version string `xmlrpc:"version"`
|
|
Packit Service |
4d2de5 |
}{}
|
|
Packit Service |
4d2de5 |
client.Call("Bugzilla.version", nil, &result)
|
|
Packit Service |
4d2de5 |
fmt.Printf("Version: %s\n", result.Version) // Version: 4.2.7+
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
Second argument of NewClient function is an object that implements
|
|
Packit Service |
4d2de5 |
[http.RoundTripper](http://golang.org/pkg/net/http/#RoundTripper)
|
|
Packit Service |
4d2de5 |
interface, it can be used to get more control over connection options.
|
|
Packit Service |
4d2de5 |
By default it initialized by http.DefaultTransport object.
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
### Arguments encoding
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
xmlrpc package supports encoding of native Go data types to method
|
|
Packit Service |
4d2de5 |
arguments.
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
Data types encoding rules:
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
* int, int8, int16, int32, int64 encoded to int;
|
|
Packit Service |
4d2de5 |
* float32, float64 encoded to double;
|
|
Packit Service |
4d2de5 |
* bool encoded to boolean;
|
|
Packit Service |
4d2de5 |
* string encoded to string;
|
|
Packit Service |
4d2de5 |
* time.Time encoded to datetime.iso8601;
|
|
Packit Service |
4d2de5 |
* xmlrpc.Base64 encoded to base64;
|
|
Packit Service |
4d2de5 |
* slice encoded to array;
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
Structs decoded to struct by following rules:
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
* all public field become struct members;
|
|
Packit Service |
4d2de5 |
* field name become member name;
|
|
Packit Service |
4d2de5 |
* if field has xmlrpc tag, its value become member name.
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
Server method can accept few arguments, to handle this case there is
|
|
Packit Service |
4d2de5 |
special approach to handle slice of empty interfaces (`[]interface{}`).
|
|
Packit Service |
4d2de5 |
Each value of such slice encoded as separate argument.
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
### Result decoding
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
Result of remote function is decoded to native Go data type.
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
Data types decoding rules:
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
* int, i4 decoded to int, int8, int16, int32, int64;
|
|
Packit Service |
4d2de5 |
* double decoded to float32, float64;
|
|
Packit Service |
4d2de5 |
* boolean decoded to bool;
|
|
Packit Service |
4d2de5 |
* string decoded to string;
|
|
Packit Service |
4d2de5 |
* array decoded to slice;
|
|
Packit Service |
4d2de5 |
* structs decoded following the rules described in previous section;
|
|
Packit Service |
4d2de5 |
* datetime.iso8601 decoded as time.Time data type;
|
|
Packit Service |
4d2de5 |
* base64 decoded to string.
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
## Implementation details
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
xmlrpc package contains clientCodec type, that implements [rpc.ClientCodec](http://golang.org/pkg/net/rpc/#ClientCodec)
|
|
Packit Service |
4d2de5 |
interface of [net/rpc](http://golang.org/pkg/net/rpc) package.
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
xmlrpc package works over HTTP protocol, but some internal functions
|
|
Packit Service |
4d2de5 |
and data type were made public to make it easier to create another
|
|
Packit Service |
4d2de5 |
implementation of xmlrpc that works over another protocol. To encode
|
|
Packit Service |
4d2de5 |
request body there is EncodeMethodCall function. To decode server
|
|
Packit Service |
4d2de5 |
response Response data type can be used.
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
## Contribution
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
See [project status](#status).
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
## Authors
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
Dmitry Maksimov (dmtmax@gmail.com)
|