mux icon indicating copy to clipboard operation
mux copied to clipboard

[FEATURE] Support multi-value query string parameters

Open silverskater opened this issue 1 year ago • 4 comments

Is there an existing feature request for this?

  • [X] I have searched the existing feature requests

Is your feature request related to a problem? Please describe.

When using a multi-value query string parameter only the first value is checked.

Url ENDPOINT?sections=90&sections=130 with this check:

r.Queries("sections", "130")

It doesn't match, and it should because the only key-value required matches, but as it only checks the first it encounters (sections=90 in this case), it determines it doesn't match. getURLQuery() only looks for the first query key: findFirstQueryKey().

Describe the solution that you would like.

Multi-value query params like sections=90&sections=130 should be matched by both commands from below, regardless of the order in the query string:

r.Queries("sections", "130")
r.Queries("sections", "90", "sections", "130")

Describe alternatives you have considered.

No response

Anything else?

This issue came up here: https://github.com/friendsofgo/killgrave/issues/164

silverskater avatar Mar 29 '24 06:03 silverskater

@silverskater For multi-value query params use r.Queries("sections", "{sections}"). It will allow you to pass any and n number of sections in query.

You can also refer https://github.com/gorilla/mux/blob/de7178dc9dffadc3cf56bece3962737e8b0710b8/route.go#L400 for the usecase of Queries function.

Also, to restrict the value of sections in query params to 130 and 90 use r.Queries("sections", "{sections:(?:90|130)}")

Ranveer777 avatar May 28 '24 21:05 Ranveer777

thank you @Ranveer777 this is exactly what we need!

silverskater avatar May 29 '24 05:05 silverskater

Hey,

I don't think that's the same logic as having support for multi-value queries, @Ranveer777, I think what you're suggesting is just doing the trick with a pattern (regexp).

For instance, how would you define an endpoint that explicitly requires "both" values, not just "any"?

Thanks!

joanlopez avatar Jun 13 '24 18:06 joanlopez