https://github.com/pfnet/jasco
Compact JSON API Server library built upon gocraft/web
https://github.com/pfnet/jasco
Last synced: 9 months ago
JSON representation
Compact JSON API Server library built upon gocraft/web
- Host: GitHub
- URL: https://github.com/pfnet/jasco
- Owner: pfnet
- License: mit
- Created: 2016-03-03T19:39:11.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2017-08-17T17:56:06.000Z (almost 9 years ago)
- Last Synced: 2025-01-13T03:45:38.035Z (over 1 year ago)
- Language: Go
- Size: 9.77 KB
- Stars: 2
- Watchers: 110
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# jasco: Compact JSON API Server library version 1
jasco is a compact library to build a JSON API server. It's written in Go and
built on github.com/gocraft/web.
## Requirements
jasco requires Go 1.4.2 or later.
## Installation
```
$ go get gopkg.in/pfnet/jasco.v1
```
## Example
`example.go`:
```go
package main
import (
"net/http"
"github.com/gocraft/web"
"gopkg.in/pfnet/jasco.v1"
)
type Context struct {
*jasco.Context
}
func (c *Context) Get(rw web.ResponseWriter, req *web.Request) {
c.Render(map[string]interface{}{
"hello": "world",
"num": 10,
"obj": map[string]interface{}{
"a": 1,
"b": "2",
"c": []interface{}{3.4, "5"},
},
})
}
func (c *Context) Echo(rw web.ResponseWriter, req *web.Request) {
var js map[string]interface{}
if err := c.ParseBody(&js); err != nil {
c.ErrLog(err.Err).Error("Cannot parse the request body")
c.RenderError(err)
return
}
c.Render(js)
}
func main() {
root := jasco.New("", nil)
router := root.Subrouter(Context{}, "/")
router.Get("/", (*Context).Get)
router.Post("/", (*Context).Echo)
http.ListenAndServe(":10080", root)
}
```
Run the example:
```
$ go run sample.go
```
Test:
```
$ curl http://localhost:10080/
{"hello":"world","num":10,"obj":{"a":1,"b":"2","c":[3.4,"5"]}}
$ curl -XPOST -d'{"test":"data"}' http://localhost:10080/
{"test":"data"}
```
## Logging
jasco uses github.com/sirupsen/logrus as a logger. Pass a logger that the
application uses to `jasco.New`. By default, the default logger of logrus will
be used.
`Context.AddLogField("field", value)` adds a field to be logged by logrus.
Because gocraft/web creates a context for each request, a field added to
the context is only available while the request is being processed.