package protorpc

import "github.com/gorilla/rpc/v2/protorpc"

Installation | Overview | API | Files

Installation

$ go get github.com/gorilla/rpc/v2/protorpc

Overview

Package gorilla/rpc/protorpc provides a codec for ProtoRPC over HTTP services.

To register the codec in a RPC server:

import (
    "http"
    "github.com/gorilla/rpc/v2"
    "github.com/gorilla/rpc/v2/protorpc"
)

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

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

This package implement ProtoRPC, based on the JSON-RPC transport, it differs in that it uses HTTP as its envelope.

Example: POST /Service.Method Request: {

"requestField1": "value1",
"requestField2": "value2",

} Response: {

"responseField1": "value1",
"responseField2": "value2",

}

Check the gorilla/rpc documentation for more details:

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

API

Package Files

type Codec

type Codec struct {
}

Codec creates a CodecRequest to process each request.

func NewCodec

func NewCodec() *Codec

NewCodec returns a new ProtoRPC 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) WriteError

func (c *CodecRequest) WriteError(w http.ResponseWriter, status int, err error)

func (*CodecRequest) WriteResponse

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

WriteResponse encodes the response and writes it to the ResponseWriter.