README
¶
Router Plugin
The router plugin is a HTTP handler plugin for the Micro API which enables you to define routes via go-os/config. This is dynamic configuration that can then be leveraged via anything that implements the go-os/config interface e.g file, etcd, consul or the config service.
Features
- Request Matching
- Weighted Routing
- Reverse Proxying
- Priority Rules
- Configurable via go-os/Config
- Pluggable via micro/plugins
TODO
- Regex Matching Host/Path
Usage
Register the plugin before building Micro
package main
import (
"github.com/micro/micro/plugin"
"github.com/micro/go-plugins/micro/router"
)
func init() {
plugin.Register(router.NewRouter())
}
Config
Configuring the router is done via a go-os/Config source. Here's an example using the File source.
// Create Config Source
f := file.NewSource(
// Use routes.json file
config.SourceName("routes.json"),
)
// Create Config
c := config.NewConfig(
// With Source
config.WithSource(f),
)
// Create Router
r := router.NewRouter(
// With Config
router.Config(c),
)
Routes
Routes are used to config request to match and the response to return. Here's an example.
{
"api": {
"routes": [
{
"request": {
"method": "GET",
"host": "127.0.0.1:10001",
"path": "/"
},
"response": {
"status_code": 302,
"header": {
"location": "http://example.com"
}
},
"weight": 1.0
},
{
"request": {
"method": "POST",
"host": "127.0.0.1:10001",
"path": "/foo"
},
"response": {
"status_code": 301,
"header": {
"location": "http://foo.bar.com"
}
},
"weight": 1.0
}
]
}
}
Documentation
¶
Overview ¶
Package router is a micro plugin for defining HTTP routes
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // Default config source file DefaultFile = "routes.json" DefaultPath = []string{"api"} DefaultLogger = logrus.New() )
Functions ¶
Types ¶
type Request ¶
type Request struct { Method string `json:"method"` Header map[string]string `json:"header"` Host string `json:"host"` Path string `json:"path"` Query map[string]string `json:"query"` }
Request describes the expected request and will attempt to match all fields specified
type Response ¶
type Response struct { Status string `json:"status"` StatusCode int `json:"status_code"` Header map[string]string `json:"header"` Body []byte `json:"body"` }
Response is put into the http.Response for a Request
type Route ¶
type Route struct { Request Request `json:"request"` Response Response `json:"response"` ProxyURL URL `json:"proxy_url"` Priority int `json:"priority"` // 0 is highest. Used for ordering routes Weight float64 `json:"weight"` // percentage weight between 0 and 1.0 Type string `json:"type"` // proxy or response. Response is default }
Route describes a single route which is matched on Request and if so, will return the Response