mirror of
https://github.com/labstack/echo.git
synced 2025-12-01 22:51:17 +02:00
Allow parameter routes to end with a dot (/foo/:id.json)
Currently a route in the form of `/foo/:id.json` means echo will detect the parameter name `id.json` instead of the expected `id`. I think this is rather counter-intuitive, as adding an extension to paths is a fairly common use case. With this change both a `/` and a `.` will be treated as the end of a parameter name. Benchmark before this change: $ go test -bench . [..] goos: linux goarch: amd64 pkg: github.com/labstack/echo BenchmarkRouterStaticRoutes-4 100000 17743 ns/op 0 B/op 0 allocs/op BenchmarkRouterGitHubAPI-4 50000 33081 ns/op 1 B/op 0 allocs/op BenchmarkRouterParseAPI-4 300000 5370 ns/op 0 B/op 0 allocs/op BenchmarkRouterGooglePlusAPI-4 200000 9183 ns/op 0 B/op 0 allocs/op PASS ok github.com/labstack/echo 8.565s After this change: goos: linux goarch: amd64 pkg: github.com/labstack/echo BenchmarkRouterStaticRoutes-4 100000 17699 ns/op 0 B/op 0 allocs/op BenchmarkRouterGitHubAPI-4 50000 32962 ns/op 1 B/op 0 allocs/op BenchmarkRouterParseAPI-4 300000 5450 ns/op 0 B/op 0 allocs/op BenchmarkRouterGooglePlusAPI-4 200000 9205 ns/op 0 B/op 0 allocs/op PASS ok github.com/labstack/echo 8.590s Fixes #599
This commit is contained in:
committed by
Vishal Rana
parent
37f1a470ef
commit
bfa14633f3
@@ -784,6 +784,9 @@ func TestRouterParamNames(t *testing.T) {
|
||||
r.Add(GET, "/users/:id", func(c Context) error {
|
||||
return nil
|
||||
})
|
||||
r.Add(GET, "/companies/:id.json", func(c Context) error {
|
||||
return nil
|
||||
})
|
||||
r.Add(GET, "/users/:uid/files/:fid", func(c Context) error {
|
||||
return nil
|
||||
})
|
||||
@@ -799,6 +802,11 @@ func TestRouterParamNames(t *testing.T) {
|
||||
assert.Equal(t, "id", c.pnames[0])
|
||||
assert.Equal(t, "1", c.Param("id"))
|
||||
|
||||
// Route -> /companies/:id.json
|
||||
r.Find(GET, "/companies/1.json", c)
|
||||
assert.Equal(t, "id", c.pnames[0])
|
||||
assert.Equal(t, "1", c.Param("id"))
|
||||
|
||||
// Route > /users/:uid/files/:fid
|
||||
r.Find(GET, "/users/1/files/1", c)
|
||||
assert.Equal(t, "uid", c.pnames[0])
|
||||
|
||||
Reference in New Issue
Block a user