krakend: github.com/devopsfaith/krakend/transport/http/server/plugin Index | Files

package plugin

import "github.com/devopsfaith/krakend/transport/http/server/plugin"

Package plugin provides plugin register interfaces for building http handler plugins.

Usage example:

package main

import (
	"context"
	"errors"
	"fmt"
	"html"
	"net/http"
)

// HandlerRegisterer is the symbol the plugin loader will try to load. It must implement the Registerer interface
var HandlerRegisterer = registerer("krakend-example")

type registerer string

func (r registerer) RegisterHandlers(f func(
	name string,
	handler func(context.Context, map[string]interface{}, http.Handler) (http.Handler, error),
)) {
	f(string(r), r.registerHandlers)
}

func (r registerer) registerHandlers(ctx context.Context, extra map[string]interface{}, _ http.Handler) (http.Handler, error) {
	// check the passed configuration and initialize the plugin
	name, ok := extra["name"].(string)
	if !ok {
		return nil, errors.New("wrong config")
	}
	if name != string(r) {
		return nil, fmt.Errorf("unknown register %s", name)
	}
	// return the actual handler wrapping or your custom logic so it can be used as a replacement for the default http handler
	return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
		fmt.Fprintf(w, "Hello, %q", html.EscapeString(req.URL.Path))
	}), nil
}

func init() {
	fmt.Println("krakend-example handler plugin loaded!!!")
}

func main() {}

Index

Package Files

doc.go plugin.go server.go

Constants

const Namespace = "github_com/devopsfaith/krakend/transport/http/server/handler"

func Load Uses

func Load(path, pattern string, rcf RegisterHandlerFunc) (int, error)

func RegisterHandler Uses

func RegisterHandler(
    name string,
    handler func(context.Context, map[string]interface{}, http.Handler) (http.Handler, error),
)

type Plugin Uses

type Plugin interface {
    Lookup(name string) (plugin.Symbol, error)
}

Plugin is the interface of the loaded plugins

type RegisterHandlerFunc Uses

type RegisterHandlerFunc func(
    name string,
    handler func(context.Context, map[string]interface{}, http.Handler) (http.Handler, error),
)

type Registerer Uses

type Registerer interface {
    RegisterHandlers(func(
        name string,
        handler func(context.Context, map[string]interface{}, http.Handler) (http.Handler, error),
    ))
}

type RunServer Uses

type RunServer func(context.Context, config.ServiceConfig, http.Handler) error

func New Uses

func New(logger logging.Logger, next RunServer) RunServer

Package plugin imports 9 packages (graph) and is imported by 1 packages. Updated 2019-11-20. Refresh now. Tools for package owners.