JAS (JSON API Server) 是一个简单的功能强大REST API框架
Go 1.1+
-
无需手动定义URL路由规则, 路由规则由资源struct名和方法名决定,保证了方法名和URL路径的一致性。
-
生成所有已处理的URL路径,用"\n"分割,可以作为API参考资料或检测API的改变。
-
非侵入式,JAS router只是一个http.Handler,可以和其他http.Handler一起使用,或在一个服务端口使用用多个JAS router。
-
支持HTTP Streaming, 可以保持长连接,向客户端发送实时数据,并在客户端关闭时得到通知。
-
支持从JSON request body的任意深度的路径提取参数,可以像JSON RPC一样用。
-
提取参数的同时进行基本的验证,支持验证整数,string的长度,string的rune长度,string正则匹配。
-
如果验证失败,响应默认的包含参数名的消息,(可选)将错误用Common Log Format写入日志。
-
把未处理的错误包装成InternalError类型,响应默认消息,将stacktrace和请求信息用Common Log Format写入日志,支持自定义的错误回调函数。
-
错误使用interface类型,这样当自带的错误类型不能满足需求,可以自定义错误类型。
-
支持gzip。
-
丰富的配置选项。
JAS是一个net/http包的轻量包装,每次请求增加了大约1000ns的处理时间,意味着在10000 QPS的应用场景下,达到99%的性能。
但是JAS的性能要好于比任何用正则定义的路由解决方案,一个单独的match操作通常需要1000ns。
JAS router不需要正则操作,路由的性能不会随着添加更多的资源和方法而降低。
go get github.com/coocood/jas
定义一个struct及其方法,方法需要包含一个参数*jas.Context,没有返回值。
type Hello struct {}
func (*Hello) Get (ctx *jas.Context) { // `GET /v1/hello`
ctx.Data = "hello world"
//response: `{"data":"hello world","error":null}`
}
func main () {
router := jas.NewRouter(new(Hello))
router.BasePath = "/v1/"
fmt.Println(router.HandledPaths(true))
//output: `GET /v1/hello`
http.Handle(router.BasePath, router)
http.ListenAndServe(":8080", nil)
}
MIT License.LICENSE.