Skip to content

Latest commit

 

History

History
68 lines (50 loc) · 2.63 KB

README.md

File metadata and controls

68 lines (50 loc) · 2.63 KB

Coprocess (gRPC)

This feature makes it possible to write Tyk middleware using a gRPC backend. gRPC is a very interesting framework that has official support for many languages: C++, Java, Python, Go, Ruby, C#, Node.JS, Java, Objective C & PHP.

The Tyk Coprocess feature uses Protocol Buffers for dispatching messages (mostly requests and events), this makes it easier to connect Tyk to a gRPC server (which is based on Protocol Buffers too), it works by specifying a gRPC service definition that covers the dispatcher logic:

service Dispatcher {
  rpc Dispatch (Object) returns (Object) {}
  rpc DispatchEvent (Event) returns (EventReply) {}
}

gRPC backend

A very simple use case is as follows: you write a gRPC server in a language of your choice, using the Tyk's Protocol Buffer definitions.

When Tyk starts it performs a connection to your gRPC server (this is specified as a global setting in tyk.conf, you could use a UNIX socket -local- or even a TCP connection -over the network-).

When Tyk receives a request, it performs a call to your gRPC server, which is responsible for doing the actual tasks (middleware tasks like transformations or even authentication)

Global settings

This is a section of tyk.conf that will:

  • Enable the Coprocess feature.
  • Indicate your gRPC server address.
"coprocess_options": {
  "enable_coprocess": true,
  "coprocess_grpc_server": "tcp://127.0.0.1:5555"
},
"enable_bundle_downloader": true,
"bundle_base_url": "http://my-bundle-server.com/bundles/",
"public_key_path": "/path/to/my/pubkey",
  • enable_coprocess: Enables the rich plugins feature.
  • coprocess_grpc_server: Sets the gRPC server host address. This is only required for gRPC plugins.
  • enable_bundle_downloader: Enables the bundle downloader.
  • bundle_base_url: A base URL that will be used to download the bundle, in this example we have "test-bundle" specified in the API settings, Tyk will fetch the following URL: "http://my-bundle-server.com/bundles/test-bundle".
  • public_key_path: Sets a public key, this is used for verifying signed bundles, you may omit this if unsigned bundles are used.

API settings

This is a sample configuration that will authenticate your API through a Coprocess (gRPC in this case, see driver), and a hook a "pre" middleware.

"enable_coprocess_auth": true,
"custom_middleware": {
  "pre": [
    {
      "name": "MyPreMiddleware",
      "require_session": false
    }
  ],
  "auth_check": {
    "name": "MyAuthCheck"
  },
  "driver": "grpc"
},

Examples (Ruby)

You may find a Ruby sample here.