Socket
Socket
Sign inDemoInstall

github.com/drone/routes

Package Overview
Dependencies
0
Maintainers
0
Alerts
File Explorer

Install Socket

Protect your apps from supply chain attacks

Install

github.com/drone/routes

Package routes a simple http routing API for the Go programming language, compatible with the standard http.ListenAndServe function. Create a new route multiplexer: Define a simple route with a given method (ie Get, Put, Post ...), path and http.HandleFunc. Define a route with restful parameters in the path: The parameters are parsed from the URL, and appended to the Request URL's query parameters. More control over the route's parameter matching is possible by providing a custom regular expression: To start the web server, use the standard http.ListenAndServe function, and provide the route multiplexer:

    v0.0.0-20130816182705-853bef2b2311

Version published
Maintainers
0

Readme

# routes.go
a simple http routing API for the Go programming language

    go get github.com/drone/routes

for more information see:
http://gopkgdoc.appspot.com/pkg/github.com/bradrydzewski/routes

[![](https://drone.io/drone/routes/status.png)](https://drone.io/drone/routes/latest)

## Getting Started

    package main

    import (
        "fmt"
        "github.com/drone/routes"
        "net/http"
    )

    func Whoami(w http.ResponseWriter, r *http.Request) {
        params := r.URL.Query()
        lastName := params.Get(":last")
        firstName := params.Get(":first")
        fmt.Fprintf(w, "you are %s %s", firstName, lastName)
    }

    func main() {
        mux := routes.New()
        mux.Get("/:last/:first", Whoami)

        http.Handle("/", mux)
        http.ListenAndServe(":8088", nil)
    }

### Route Examples
You can create routes for all http methods:

    mux.Get("/:param", handler)
    mux.Put("/:param", handler)
    mux.Post("/:param", handler)
    mux.Patch("/:param", handler)
    mux.Del("/:param", handler)

You can specify custom regular expressions for routes:

    mux.Get("/files/:param(.+)", handler)

You can also create routes for static files:

    pwd, _ := os.Getwd()
    mux.Static("/static", pwd)

this will serve any files in `/static`, including files in subdirectories. For example `/static/logo.gif` or `/static/style/main.css`.

## Filters / Middleware
You can apply filters to routes, which is useful for enforcing security,
redirects, etc.

You can, for example, filter all request to enforce some type of security:

    var FilterUser = func(w http.ResponseWriter, r *http.Request) {
    	if r.URL.User == nil || r.URL.User.Username() != "admin" {
    		http.Error(w, "", http.StatusUnauthorized)
    	}
    }

    r.Filter(FilterUser)

You can also apply filters only when certain REST URL Parameters exist:

    r.Get("/:id", handler)
    r.Filter("id", func(rw http.ResponseWriter, r *http.Request) {
		...
	})

## Helper Functions
You can use helper functions for serializing to Json and Xml. I found myself constantly writing code to serialize, set content type, content length, etc. Feel free to use these functions to eliminate redundant code in your app.

Helper function for serving Json, sets content type to `application/json`:

    func handler(w http.ResponseWriter, r *http.Request) {
		mystruct := { ... }
        routes.ServeJson(w, &mystruct)
    }

Helper function for serving Xml, sets content type to `application/xml`:

    func handler(w http.ResponseWriter, r *http.Request) {
		mystruct := { ... }
        routes.ServeXml(w, &mystruct)
    }

Helper function to serve Xml OR Json, depending on the value of the `Accept` header:

    func handler(w http.ResponseWriter, r *http.Request) {
		mystruct := { ... }
        routes.ServeFormatted(w, r, &mystruct)
    }

FAQs

Last updated on 16 Aug 2013

Did you know?

Socket installs a GitHub app to automatically flag issues on every pull request and report the health of your dependencies. Find out what is inside your node modules and prevent malicious activity before you update the dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc