package json

import "github.com/gorilla/rpc/json"

Installation | Overview | API | Files

Installation

$ go get github.com/gorilla/rpc/json

Overview

Package gorilla/rpc/json provides a codec for JSON-RPC over HTTP services.

To register the codec in a RPC server:

import (
    "http"
    "github.com/gorilla/rpc"
    "github.com/gorilla/rpc/json"
)

func init() {
    s := rpc.NewServer()
    s.RegisterCodec(json.NewCodec(), "application/json")
    // [...]
    http.Handle("/rpc", s)
}

A codec is tied to a content type. In the example above, the server will use the JSON codec for requests with "application/json" as the value for the "Content-Type" header.

This package follows the JSON-RPC 1.0 specification:

http://json-rpc.org/wiki/specification

Request format is:

method:
    The name of the method to be invoked, as a string in dotted notation
    as in "Service.Method".
params:
    An array with a single object to pass as argument to the method.
id:
    The request id, a uint. It is used to match the response with the
    request that it is replying to.

Response format is:

result:
    The Object that was returned by the invoked method,
    or null in case there was an error invoking the method.
error:
    An Error object if there was an error invoking the method,
    or null if there was no error.
id:
    The same id as the request it is responding to.

Check the gorilla/rpc documentation for more details:

http://gorilla-web.appspot.com/pkg/rpc

API

Package Files

func DecodeClientResponse

func DecodeClientResponse(r io.Reader, reply interface{}) error

DecodeClientResponse decodes the response body of a client request into the interface reply.

func EncodeClientRequest

func EncodeClientRequest(method string, args interface{}) ([]byte, error)

EncodeClientRequest encodes parameters for a JSON-RPC client request.

type Codec

type Codec struct {
}

Codec creates a CodecRequest to process each request.

func NewCodec

func NewCodec() *Codec

NewCodec returns a new JSON Codec.

func (*Codec) NewRequest

func (c *Codec) NewRequest(r *http.Request) rpc.CodecRequest

NewRequest returns a CodecRequest.

type CodecRequest

type CodecRequest struct {
    // contains filtered or unexported fields
}

CodecRequest decodes and encodes a single request.

func (*CodecRequest) Method

func (c *CodecRequest) Method() (string, error)

Method returns the RPC method for the current request.

The method uses a dotted notation as in "Service.Method".

func (*CodecRequest) ReadRequest

func (c *CodecRequest) ReadRequest(args interface{}) error

ReadRequest fills the request object for the RPC method.

func (*CodecRequest) WriteResponse

func (c *CodecRequest) WriteResponse(w http.ResponseWriter, reply interface{}, methodErr error) error

WriteResponse encodes the response and writes it to the ResponseWriter.

The err parameter is the error resulted from calling the RPC method, or nil if there was no error.