routes

package module
v1.0.0-rc.1 Latest Latest
Warning

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

Go to latest
Published: Dec 27, 2017 License: MIT Imports: 6 Imported by: 0

README

gothite/routes

Advanced URL routing for Go

Installation

go get github.com/gothite/routes

Usage

package main

import (
	"log"
	"net/http"

	"github.com/gothite/routes"
)

type handler struct{}

func (h handler) ServeHTTP(response http.ResponseWriter, request *http.Request) {
	path := request.Context().Value(routes.Key("path")).(string)
	response.Write([]byte(path))
}

func main() {
	router := routes.NewRouter(
		"/api", "api",
		nil, // default route
		routes.NewRouter(
			"/v1", "v1",
			nil, // default route
			routes.NewRoute("/(?P<path>.*)", handler{}, "endpoint"),
		),
	)

	path, _ := router.Reverse("v1:endpoint", map[string]string{"path": "test"})
	log.Print(path) // /api/v1/test

	http.Handle("/", router)
	log.Fatal(http.ListenAndServe(":8000", nil))
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Key

type Key string

Key is a type for context keys.

type Resolver

type Resolver interface {
	// Name returns name of resolver.
	// Name uses for resolver identification.
	Name() string

	// Resolve searches and returns route by passed URL path.
	Resolve(string) (*Route, bool)

	// Reverse makes URL path by resolver name and URL parameters (regular expression groups).
	// Name may be nested like "route", "router:route", "api:v1:endpoint".
	Reverse(string, map[string]string) (string, bool)
}

Resolver is a URL routing interface. It's common interface for Route and Router.

type Route

type Route struct {
	// contains filtered or unexported fields
}

Route represents URL pattern -> handler relation. Route implements Resolver interface.

func NewRoute

func NewRoute(pattern string, handler http.Handler, name string) *Route

NewRoute creates new Route instance.

func (*Route) GetGroups

func (route *Route) GetGroups(path string) map[string]string

GetGroups returns map of matched regular expression groups.

func (*Route) Name

func (route *Route) Name() string

Name returns route name.

func (*Route) Resolve

func (route *Route) Resolve(path string) (*Route, bool)

Resolve checks match URL path with pattern.

func (*Route) Reverse

func (route *Route) Reverse(name string, parameters map[string]string) (path string, found bool)

Reverse makes URL path using parameters as values for groups of regular expression.

type Router

type Router struct {
	// contains filtered or unexported fields
}

Router is a group of resolvers. Router implements Resolver and http.Handler interface.

func NewRouter

func NewRouter(prefix string, namespace string, defaultRoute *Route, resolvers ...Resolver) *Router

NewRouter creates new Router instance.

func (*Router) Add

func (router *Router) Add(resolver Resolver)

Add adds new resolver to router. It's may replace existing resolver with same name.

func (*Router) Handle

func (router *Router) Handle(response http.ResponseWriter, request *http.Request)

Handle looking for route by path and delegates request to handler. If route not found, Handle will write header http.StatusNotFound.

func (*Router) Name

func (router *Router) Name() string

Name returns router name (namespace).

func (*Router) Resolve

func (router *Router) Resolve(path string) (*Route, bool)

Resolve looking route by path.

func (*Router) Reverse

func (router *Router) Reverse(name string, parameters map[string]string) (path string, found bool)

Reverse returns URL path from matched resolver.

func (*Router) ServeHTTP

func (router *Router) ServeHTTP(response http.ResponseWriter, request *http.Request)

ServeHTTP impelements http.Handler.ServeHTTP.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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