-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapi.go
57 lines (48 loc) · 1.48 KB
/
api.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package registry
import (
"reflect"
"github.com/champly/hercules/configs"
"github.com/champly/hercules/servers"
)
const (
DefaultHandlerName = "Handler"
RESTfulHandlerGetName = "GetHandler"
RESTfulHandlerPostName = "PostHandler"
RESTfulHandlerPutName = "PutHandler"
RESTfulHandlerDeleteName = "DeleteHandler"
)
var (
methodMap map[string]string
)
func init() {
methodMap = map[string]string{
DefaultHandlerName: configs.HttpMethodALL,
RESTfulHandlerGetName: configs.HttpMethodGet,
RESTfulHandlerPostName: configs.HttpMethodPost,
RESTfulHandlerPutName: configs.HttpMethodPut,
RESTfulHandlerDeleteName: configs.HttpMethodDelete,
}
}
func (s *ServiceRegistry) buildAPIRouterByObj(pattern string, constrObj interface{}) {
routers, ok := s.services[configs.ServerTypeAPI]
if !ok {
routers = []servers.Router{}
}
v := reflect.ValueOf(constrObj)
t := reflect.TypeOf(constrObj)
for i := 0; i < t.NumMethod(); i++ {
method, ok := methodMap[t.Method(i).Name]
if ok {
routers = append(routers, servers.Router{Name: pattern, Method: method, Handler: v.Method(i).Interface()})
}
}
s.services[configs.ServerTypeAPI] = routers
}
func (s *ServiceRegistry) buildAPIRouterByFunc(pattern string, f interface{}) {
routers, ok := s.services[configs.ServerTypeAPI]
if !ok {
routers = []servers.Router{}
}
routers = append(routers, servers.Router{Name: pattern, Method: configs.HttpMethodALL, Handler: f})
s.services[configs.ServerTypeAPI] = routers
}