156 lines
2.5 KiB
Markdown
156 lines
2.5 KiB
Markdown
# Router Package Documentation
|
|
|
|
A fast, lightweight HTTP router for Go with support for middleware, route groups, and path parameters.
|
|
|
|
## Core Types
|
|
|
|
### Router
|
|
|
|
Main router that implements `http.Handler`.
|
|
|
|
```go
|
|
router := router.New()
|
|
```
|
|
|
|
### Handler
|
|
|
|
Request handler function type.
|
|
|
|
```go
|
|
type Handler func(w http.ResponseWriter, r *http.Request, params []string)
|
|
```
|
|
|
|
### Middleware
|
|
|
|
Function type for middleware.
|
|
|
|
```go
|
|
type Middleware func(Handler) Handler
|
|
```
|
|
|
|
### Group
|
|
|
|
Route group with a prefix.
|
|
|
|
```go
|
|
group := router.Group("/api")
|
|
```
|
|
|
|
## Router Methods
|
|
|
|
### New()
|
|
|
|
Creates a new router.
|
|
|
|
```go
|
|
router := router.New()
|
|
```
|
|
|
|
### ServeHTTP(w, r)
|
|
|
|
Implements `http.Handler` interface.
|
|
|
|
### Use(mw ...Middleware)
|
|
|
|
Adds global middleware.
|
|
|
|
```go
|
|
router.Use(loggingMiddleware, authMiddleware)
|
|
```
|
|
|
|
### Handle(method, path, handler)
|
|
|
|
Registers a handler for the given method and path.
|
|
|
|
```go
|
|
router.Handle("GET", "/users", listUsersHandler)
|
|
```
|
|
|
|
### HTTP Method Shortcuts
|
|
|
|
```go
|
|
router.Get("/users", listUsersHandler)
|
|
router.Post("/users", createUserHandler)
|
|
router.Put("/users/[id]", updateUserHandler)
|
|
router.Patch("/users/[id]", patchUserHandler)
|
|
router.Delete("/users/[id]", deleteUserHandler)
|
|
```
|
|
|
|
### Group(prefix)
|
|
|
|
Creates a route group with prefix.
|
|
|
|
```go
|
|
api := router.Group("/api")
|
|
```
|
|
|
|
### WithMiddleware(mw ...Middleware)
|
|
|
|
Applies middleware to the next route registration.
|
|
|
|
```go
|
|
router.WithMiddleware(authMiddleware).Get("/admin", adminHandler)
|
|
```
|
|
|
|
## Group Methods
|
|
|
|
### Use(mw ...Middleware)
|
|
|
|
Adds middleware to the group.
|
|
|
|
```go
|
|
api.Use(apiKeyMiddleware)
|
|
```
|
|
|
|
### Group(prefix)
|
|
|
|
Creates a nested group.
|
|
|
|
```go
|
|
v1 := api.Group("/v1")
|
|
```
|
|
|
|
### HTTP Method Shortcuts
|
|
|
|
```go
|
|
api.Get("/users", listUsersHandler)
|
|
api.Post("/users", createUserHandler)
|
|
api.Put("/users/[id]", updateUserHandler)
|
|
api.Patch("/users/[id]", patchUserHandler)
|
|
api.Delete("/users/[id]", deleteUserHandler)
|
|
```
|
|
|
|
### WithMiddleware(mw ...Middleware)
|
|
|
|
Applies middleware to the next route registration in this group.
|
|
|
|
```go
|
|
api.WithMiddleware(authMiddleware).Get("/admin", adminHandler)
|
|
```
|
|
|
|
## Path Parameters
|
|
|
|
Dynamic segments in paths are defined using square brackets.
|
|
|
|
```go
|
|
router.Get("/users/[id]", func(w http.ResponseWriter, r *http.Request, params []string) {
|
|
id := params[0]
|
|
// ...
|
|
})
|
|
```
|
|
|
|
## Wildcards
|
|
|
|
Wildcard segments capture all remaining path segments.
|
|
|
|
```go
|
|
router.Get("/files/*path", func(w http.ResponseWriter, r *http.Request, params []string) {
|
|
path := params[0]
|
|
// ...
|
|
})
|
|
```
|
|
|
|
Notes:
|
|
- Wildcards must be the last segment in a path
|
|
- Only one wildcard is allowed per path
|