Index Plugin
The index plugin is a micro toolkit plugin which enables the HTTP index to be routed to a service or respond with static content.
Usage
Register the plugin before building Micro
package main
import (
"github.com/micro/micro/plugin"
"github.com/geiqin/go-plugins/micro/index"
)
func init() {
plugin.Register(index.NewPlugin())
}
It can then be applied on the command line like so. This will route to the greeter service.
micro --index_service=greeter
Route to Service
Specifying --index_service=
flag will route to a particular service
Below routes to go.micro.api.greeter given the default API namespace of go.micro.api. In the web case it will route to go.micro.web.greeter.
micro --index_service=greeter
Alternatively specify the service when registering the plugin
func init() {
plugin.Register(index.WithService("greeter"))
}
Note: You can specify just the service if using the "proxy" handler. Any other requires service and method e.g --index_service=greeter/say/hello
Static Content
Instead of routing to a service you may want to serve static content
Do so in the following way
micro --index_status=200 --index_header=Content-Type:text/plain --index_body="hello world"
The same can be achieved when registering the plugin
func init() {
plugin.Register(index.WithResponse(
200,
http.Header{"Content-Type": []string{"text/plain"}},
[]byte(`hello world`),
))
}
Scoped to API
If you like to only apply the plugin for a specific component you can register it with that specifically.
For example, below you'll see the plugin registered with the API.
package main
import (
"github.com/micro/micro/api"
"github.com/geiqin/go-plugins/micro/index"
)
func init() {
api.Register(index.NewPlugin())
}
Here's what the help displays when you do that.
$ go run main.go plugin.go api --help
NAME:
main api - Run the micro API
USAGE:
main api [command options] [arguments...]
OPTIONS:
--address Set the api address e.g 0.0.0.0:8080 [$MICRO_API_ADDRESS]
--handler Specify the request handler to be used for mapping HTTP requests to services; {api, proxy, rpc} [$MICRO_API_HANDLER]
--namespace Set the namespace used by the API e.g. com.example.api [$MICRO_API_NAMESPACE]
--cors Comma separated whitelist of allowed origins for CORS [$MICRO_API_CORS]
--index_service Service name to route index to. Specified without namespace e.g greeter [$INDEX_SERVICE]
--index_status "0" HTTP status code for response [$INDEX_STATUS]
--index_header Comma separated list of key-value pairs for response header [$INDEX_HEADER]
--index_body Body of the response [$INDEX_BODY]
In this case the usage would be
micro api --index_service=greeter