Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Routes with name #10

Open
emilgpa opened this issue Jun 13, 2014 · 12 comments
Open

Routes with name #10

emilgpa opened this issue Jun 13, 2014 · 12 comments
Labels
Projects
Milestone

Comments

@emilgpa
Copy link

emilgpa commented Jun 13, 2014

Hello!
I would like know if is possible put a name to routes like as:

router := httprouter.New()
    router.GET("/hello/:name", Hello).Name("hello")
    ....
    routeHello := router.GetRoute("hello").Params("name", "Emilio")

If this is not possible, Do you plan add this feature?

P.D.: Very nice perfomance 👍

Best,
Emilio

@emilgpa emilgpa changed the title Routes with a name Routes with name Jun 13, 2014
@julienschmidt
Copy link
Owner

Currently not implemented or planned, but I leave this open as a feature request.

@steeve
Copy link

steeve commented Jul 28, 2014

👍 on this too
great job

@alehano
Copy link

alehano commented Aug 1, 2014

+1. It's useful when you can build url string by url name and parameters. Like in http://www.gorillatoolkit.org/pkg/mux

Registered URLs can be built, or "reversed", which helps maintaining
  references to resources.

@james-lawrence
Copy link

+1 very useful feature.

@alehano
Copy link

alehano commented Jan 25, 2015

I solve it like this https://github.com/alehano/reverse

@fnkr
Copy link

fnkr commented Mar 7, 2015

+1

I solved it like this, with a proxy function:

func alternativeHandler(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
    ps = append(ps, httprouter.Param {
        Key: "extraParameter",
        Value: "someValue",
    })
    defaultHandler(w, r, ps)
}

Szenario: I have a second route and that route has 1 parameter less then the default route and I want that parameter to have the value someValue if the alternative route is used.

@digitalcraftsman
Copy link

digitalcraftsman commented May 18, 2015

This feature would be nice, because you can store all routes, handler names and parameters in a map.

I planned for incoming GET requests at example.com/api/v1 to respond with JSON that maps all available routes and methods of the API. Or is their already a way to do this without the help of named routes?

@julienschmidt julienschmidt added this to the v2 milestone May 27, 2015
@rickb777
Copy link

rickb777 commented Aug 20, 2016

+1 for the need for reverse routing.

Using named routes is one way to achieve reverse routing, but there might be other ways too. For example, the leaf nodes of the tree might be wrapped into some exported type that allows a full string route URL to be reconstructed, given a list of path parameter values.

The GET method would need to be changed to return the leaf node. e.g.

router := httprouter.New()
router.GET("/", Index)
helloRoute := router.GET("/hello/:name:/role/:role", Hello)
...
helloRoute.reverse("Fred",  "Staff")

to give the path /hello/Fred/role/Staff.

@nikgalushko
Copy link

I think this issue similar to #167.

@bentcoder
Copy link

Lack of this feature forced me to dump this library because it is also very important when it comes to collecting application metrics. For instance, when we store metrics, we use "labels" to fine tune/visualise reports. If you are to store request/response metrics, you want to know which route the collected metric is associated with. Having a middleware where the http.Request allows us to extract route name with for example httprouter.RouteNameFromContext(r.Context()) would make life very easy otherwise things get very complex/messy.

The client_create below is the name of the route for Prometheus.

# HELP http_request_counter Number of HTTP requests
http_response_counter{size="20",route="client_create"} 40

@julienschmidt
Copy link
Owner

julienschmidt commented Sep 21, 2020

@bentcoder https://github.com/julienschmidt/httprouter/blob/master/router.go#L132
(not yet in a tagged release, use go get github.com/julienschmidt/httprouter@master)

@bentcoder
Copy link

@bentcoder https://github.com/julienschmidt/httprouter/blob/master/router.go#L132
(not yet in a tagged release, use go get github.com/julienschmidt/httprouter@master)

Not sure if it does what I mean which is same as this. I hope I made it clearer now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
v2
Subrouter
Development

No branches or pull requests

10 participants