grpcjsonproxy

package module
v0.0.0-...-f43884f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 12, 2020 License: MIT Imports: 12 Imported by: 0

README

grpc-json-proxy

GRPC JSON is a proxy which allows HTTP API tools like Postman to interact with gRPC servers.

Requirements

  • grpc+json codec must be enabled on the grpc server
  • Postman must be configured to use the proxy

Configuration of the proxy and its dependencies is a three step process.

  1. Register a JSON codec with the gRPC server. In Go, it can be automatically registered simple by adding the following import:

import _"github.com/jnewmano/grpc-json-proxy/codec"

If you're using gogo/protobuf as your protobuf backend, import the following:

import _"github.com/jnewmano/grpc-json-proxy/gogoprotobuf/codec"

  1. Run the grpc-json-proxy. Download pre-built binaries from https://github.com/jnewmano/grpc-json-proxy/releases/ or build from source:

go get -u github.com/jnewmano/grpc-json-proxy

grpc-json-proxy

Other way, you can simply use grpc-json-proxy docker image out of the box:

docker run -it -p 7001:7001 vincenthcui/grpc-json-proxy
  1. Configure Postman to send requests through the proxy. Postman -> Preferences -> Proxy -> Global Proxy

Proxy Server: localhost 7001

Postman Proxy Configuration

Setup your Postman gRPC request with the following:

  1. Set request method to Post .
  2. Set the URL to http://{{ grpc server address}}/{{proto package}}.{{proto service}}/{{method}} Always use http, proxy will establish a secure connection to the gRPC server.
  3. Set the Content-Type header to application/grpc+json .
  4. Optionally add a Grpc-Insecure header set to true for an insecure connection.
  5. Set the request body to appropriate JSON for the message. For reference, generated Go code includes JSON tags on the generated message structs.

For example:

Postman Example Request

Inspired by Johan Brandhorst's grpc-json

Host accessibility

If you use docker image to run grpc-json-proxy server, and want to access grpc via loopback address 127.0.0.1, you should pay attention to docker network accessibility.

  1. use host.docker.internal instead of 127.0.0.1 in Linux.
  2. use docker.for.mac.host.internal instead of 127.0.0.1 in MacOS and with Docker for Mac 17.12 or above.

See: https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewProxy

func NewProxy() *httputil.ReverseProxy

NewProxy returns a configured reverse proxy to handle grpc+json requests

Types

type Transport

type Transport struct {
	HTTPClient    *http.Client
	H2Client      *http.Client
	H2NoTLSClient *http.Client
}

Transport struct for intercepting grpc+json requests

func (Transport) RoundTrip

func (t Transport) RoundTrip(r *http.Request) (*http.Response, error)

RoundTrip handles processing the incoming request and outgoing response for grpc+json detection

Directories

Path Synopsis
gogoprotobuf

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL