File tree 5 files changed +41
-13
lines changed
5 files changed +41
-13
lines changed Original file line number Diff line number Diff line change @@ -59,6 +59,27 @@ fmt.Println("Starting server.")
59
59
http.ListenAndServe(":8080", api)
60
60
```
61
61
62
+
63
+ ## Extend routes
64
+ ```
65
+ var user = rest.Extend("/user", api)
66
+
67
+ user.Use(func(ctx *rest.Context) {
68
+ //User middleware will execute for /user/* routes
69
+ })
70
+
71
+ user.Get("/:uid/profile", func(ctx *rest.Context) {
72
+ ctx.JSON(`{"user": "profile"}`)
73
+ })
74
+
75
+ user.Get("/:uid", func(ctx *rest.Context) {
76
+ ctx.JSON(ctx.Params)
77
+ })
78
+ ```
79
+
80
+ ###Pending
81
+ - Stop execution on timeout/abort
82
+
62
83
## Documentation
63
84
https://godoc.org/github.com/go-rs/rest-api-framework
64
85
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ package main
2
2
3
3
import (
4
4
"fmt"
5
+ "log"
5
6
"net/http"
6
7
"strconv"
7
8
"time"
@@ -43,6 +44,7 @@ func main() {
43
44
44
45
api .Get ("/foo" , func (ctx * rest.Context ) {
45
46
ctx .Throw ("UNAUTHORIZED" )
47
+ // can also use ctx.ThrowWithError("SERVER_ERROR", error)
46
48
})
47
49
48
50
// error handler
@@ -52,11 +54,15 @@ func main() {
52
54
53
55
fmt .Println ("Starting server." )
54
56
57
+ tout := http .TimeoutHandler (api , 100 * time .Millisecond , "timeout" )
58
+
55
59
server := http.Server {
56
60
Addr : ":8080" ,
57
- Handler : api ,
61
+ Handler : tout ,
62
+ }
63
+
64
+ if err := server .ListenAndServe (); err != nil {
65
+ log .Fatalf ("could not start server, %v" , err )
58
66
}
59
67
60
- err := server .ListenAndServe ()
61
- fmt .Println (err )
62
68
}
Original file line number Diff line number Diff line change 6
6
7
7
func Load (api * rest.API ) {
8
8
9
- var user rest.Namespace
10
-
11
- user .Set ("/user" , api )
9
+ var user = rest .Extend ("/user" , api )
12
10
13
11
user .Use (func (ctx * rest.Context ) {
14
12
println ("User middleware > /user/*" )
Original file line number Diff line number Diff line change 5
5
package rest
6
6
7
7
import (
8
- "github.com/go-rs/rest-api-framework/utils"
9
8
"net/http"
9
+
10
+ "github.com/go-rs/rest-api-framework/utils"
10
11
)
11
12
12
13
// Namespace is used to extend routes with a specific prefix
@@ -16,10 +17,12 @@ type Namespace struct {
16
17
}
17
18
18
19
// Set method is used to set prefix with API
19
- func ( n * Namespace ) Set ( prefix string , api * API ) {
20
+ func Extend ( prefix string , api * API ) * Namespace {
20
21
prefix = utils .TrimSuffix (prefix , "/" )
21
- n .prefix = prefix
22
- n .api = api
22
+ return & Namespace {
23
+ prefix : prefix ,
24
+ api : api ,
25
+ }
23
26
}
24
27
25
28
// Use method is used to set interceptors/middlewares for all requests,
Original file line number Diff line number Diff line change @@ -9,11 +9,11 @@ import (
9
9
)
10
10
11
11
var api API
12
- var ns Namespace
12
+ var ns * Namespace
13
13
var handle Handler
14
14
15
- func TestNamespace_Set (t * testing.T ) {
16
- ns . Set ("/test" , & api )
15
+ func TestExtend (t * testing.T ) {
16
+ ns = Extend ("/test" , & api )
17
17
18
18
if ns .prefix != "/test" {
19
19
t .Error ("Prefix is not set." )
You can’t perform that action at this time.
0 commit comments