I'm writing a handler that can take either POST or GET. As such, I want the option of being able to say:
http://host/query?parm1=value&parm2=value
I was assuming that Gorilla mux would then give me:
{
"parm1": "value",
"parm2": "value
}
but mux.Vars(r)
is empty. I'm aware that using .Query("key", "value"
will make the parameters mandatory, which isn't what I want. What am I missing?
As query parameters are not a fixed part of a path, they can be optional and can have default values.
POST should not have query param. You can implement the service to honor the query param, but this is against REST spec.
Package gorilla/mux implements a request router and dispatcher for matching incoming requests to their respective handler. The name mux stands for "HTTP request multiplexer". Like the standard http.
The name mux stands for "HTTP request multiplexer". Like the standard http. ServeMux, mux. Router matches incoming requests against a list of registered routes and calls a handler for the route that matches the URL or other conditions.
As reflected in a comment, the basic answer is "that's not what mux is for". mux
is great at picking apart the path portion of a URL, and turning the components into variables. To give a hypothetical example, a call that gives information about a country might have a spec that looks like this:
country/{code}
and accept calls that look like this:
http://myhost/country/DE
You'd get the value of the code
parameter like this:
code := mux.Vars(r)["code"]
If you want to pass query variables, you don't do that with mux. Just grab them straight from the request. So given the alternative query syntax:
http://myhost/country?code=DE
you'd do:
code := r.URL.Query().Get("code")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With