aboutsummaryrefslogtreecommitdiff
path: root/core.go
diff options
context:
space:
mode:
authorAlex Lobunets <alexander.lobunets@gmail.com>2014-02-07 10:02:41 +0100
committerAlex Lobunets <alexander.lobunets@gmail.com>2014-02-07 10:02:41 +0100
commitd47df4de58172593c56513d37d2b75d4af578e58 (patch)
tree44c87db740ef852b085d4b526badd836d818c984 /core.go
parentremove tests.test (diff)
downloadsleepy-d47df4de58172593c56513d37d2b75d4af578e58.tar.gz
sleepy-d47df4de58172593c56513d37d2b75d4af578e58.tar.bz2
sleepy-d47df4de58172593c56513d37d2b75d4af578e58.zip
Added request headers as Get/Put/Post/Delete argument. Added response headers map as 3rd argument of the return from Get/Put/Post/Delete handlers. Thus, resource can access request headers and set custom response headers if required
Diffstat (limited to 'core.go')
-rw-r--r--core.go17
1 files changed, 11 insertions, 6 deletions
diff --git a/core.go b/core.go
index 0ef5590..6023014 100644
--- a/core.go
+++ b/core.go
@@ -18,25 +18,25 @@ const (
// GetSupported is the interface that provides the Get
// method a resource must support to receive HTTP GETs.
type GetSupported interface {
- Get(url.Values) (int, interface{})
+ Get(url.Values, map[string][]string) (int, interface{}, map[string][]string)
}
// PostSupported is the interface that provides the Post
// method a resource must support to receive HTTP POSTs.
type PostSupported interface {
- Post(url.Values) (int, interface{})
+ Post(url.Values, map[string][]string) (int, interface{}, map[string][]string)
}
// PutSupported is the interface that provides the Put
// method a resource must support to receive HTTP PUTs.
type PutSupported interface {
- Put(url.Values) (int, interface{})
+ Put(url.Values, map[string][]string) (int, interface{}, map[string][]string)
}
// DeleteSupported is the interface that provides the Delete
// method a resource must support to receive HTTP DELETEs.
type DeleteSupported interface {
- Delete(url.Values) (int, interface{})
+ Delete(url.Values, map[string][]string) (int, interface{}, map[string][]string)
}
// An API manages a group of resources by routing requests
@@ -62,7 +62,7 @@ func (api *API) requestHandler(resource interface{}) http.HandlerFunc {
return
}
- var handler func(url.Values) (int, interface{})
+ var handler func(url.Values, map[string][]string) (int, interface{}, map[string][]string)
switch request.Method {
case GET:
@@ -88,13 +88,18 @@ func (api *API) requestHandler(resource interface{}) http.HandlerFunc {
return
}
- code, data := handler(request.Form)
+ code, data, headers := handler(request.Form, request.Header)
content, err := json.Marshal(data)
if err != nil {
rw.WriteHeader(http.StatusInternalServerError)
return
}
+ for name, values := range headers {
+ for _, value := range values {
+ rw.Header().Add(name, value)
+ }
+ }
rw.WriteHeader(code)
rw.Write(content)
}
bgstack15