Comments (11)
Intended.
The router matches prefixes, not the complete route at once. /:some
and /otherthing
conflict obviously. It doesn't matter that no handler is registered for /:some
only.
The intention is, that there is only one or none possible route for any prefix when matching incoming requests. But if someone requests /otherthing
both the variable-length parameter /:some
and the static path /otherthing
would match.
from httprouter.
I have the same issue. Take the following example:
a.mux.POST("users/:id/verify", user.Verify)
a.mux.POST("users/activated", user.GetActivatedUsers)
The first verifies one special user while the second returns a collection of activated users based on the request payload.
This is possible with many modern routers so the decision really surprised me.
from httprouter.
I have the same problem as @CodingRogue. Surprisingly, we're both doing something user-related..
users.GET("/new")
users.GET("/:id/edit")
Something like /users/edit/:id
instead of /users/:id/edit
would work, but I'd really prefer /users/:id/edit
.
from httprouter.
I'm afraid this will happen quite often in more complex rest apis. Is there any solution or workaround except switching routers?
from httprouter.
You could probably embed httprouter in a new struct and refine httprouter's methods to support the routes above. But I ended up just replacing httprouter with gorilla/pat. gorilla/pat also has regex matching so you can match numbers.
from httprouter.
I will check out pat then, thanks.
from httprouter.
the routes /users/:id/verify
and /users/activated
collide. I guess that you have a route like /users/:id
to view the profile of user but, what happen if a username is named "activated"? goes to route /users/activated
or /users/:id
(:id
would be "activated")?
httprouter
encourages the good route design.
For fix your routes, should look like:
a.mux.POST("user/:id", user.Profile)
a.mux.POST("user/:id/verify", user.Verify)
a.mux.POST("users", user.GetAll)
a.mux.POST("users/activated", user.GetActivatedUsers)
from httprouter.
I can see your point but this route design is not REST compatible. I need to have the same resource identifier reachable through all necessary http verbs (GET, POST, PUT, PATCH, DELETE...).
from httprouter.
But each http verb must do things differently from the rest...
from httprouter.
I hit the same issue. I think this is a pretty common use case, and something I would love to see gin accommodate. You can see similar patterns in GitHub, Twitter, Facebook, etc:
github.com/
github.com/issues
github.com/:user
github.com/:user/:repo
twitter.com/mentions
twitter.com/i/notifications
twitter.com/:username
www.facebook.com/events/upcoming
www.facebook.com/messages/
www.facebook.com/:username
from httprouter.
from httprouter.
Related Issues (20)
- How to use this custom middleware HOT 1
- Matching multiple named parameters HOT 1
- ServeFiles not able to serve static files HOT 2
- How can I receive multiple parameters in GET request? HOT 3
- Is it possible to bind one router to some path in another router? HOT 2
- is it possible to get the registered path? HOT 7
- panic: '/hello/:name' in new path '/hello/:name' conflicts with existing wildcar
- Why make catchAll form so special HOT 2
- httprouter.ParamsWithContext(r.Context()) is returning []
- Question: will re-registering a handler work properly?
- Fails with "embed" package HOT 1
- Dump all registered routes HOT 3
- Improve longestCommonPrefix and add unit tests HOT 1
- Question: How can I embed swagger UI? HOT 2
- Feature Request: Support multi-wildcard names for same tree branch HOT 1
- panic: path must begin with '/' in path 'GET'
- List all registered endpoint httprouter
- what is the empty path node used for? HOT 1
- Unable to load jsx files because "file.jsx was blocked because of a disallowed MIME type text/plain" HOT 2
- Plan to Consolidate with net/http @ 1.22?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from httprouter.