FaygoGo Web API 利器
Faygo
概述
Faygo 使用全新架构,是最合适开发API接口的Go Web框架。用户只需定义一个struct Handler,就能自动绑定、验证请求参数并生成在线API文档。
最新版本
版本号
v1.0
安装要求
Go Version ≥1.8
快速使用
方式一 源码下载
go get -u -v github.com/henrylee2cn/faygo
方式二 部署工具 (Go to fay)
go get -u -v github.com/henrylee2cn/fay
fay command [arguments] The commands are: new 创建、编译和运行(监控文件变化)一个新的faygo项目 run 编译和运行(监控文件变化)任意一个已存在的golang项目 fay new appname [apptpl] appname 指定新faygo项目的创建目录 apptpl 指定一个faygo项目模板(可选) fay run [appname] appname 指定待运行的golang项目路径(可选)
框架特性
一个
struct Handler搞定多件事:定义 Handler/Middleware
绑定与验证请求参数
生成 Swagger2.0 API 在线文档
数据库 ORM 映射
Handler与Middleware完全相同,都是实现Handler接口(
func或struct类型),共同构成路由操作链,只是概念层面的说法不同支持多种网络类型:
| 网络类型 | 配置net_types值 |
|---|---|
| HTTP | http |
| HTTPS/HTTP2(TLS) | https |
| HTTPS/HTTP2(Let's Encrypt TLS) | letsencrypt |
| HTTPS/HTTP2(Let's Encrypt TLS on UNIX socket) | unix_letsencrypt |
| HTTP(UNIX socket) | unix_http |
| HTTPS/HTTP2(TLS on UNIX socket) | unix_https |
支持单服务单监听、单服务多监听、多服务多监听等,多个服务的配置信息相互独立
基于
httprouter开发高性能路由,支持链式与树形两种注册风格,支持灵活的静态文件路由(如DirFS、RenderFS、MarkdownFS等)支持平滑关闭、平滑升级,提供fay工具进行新建项目、热编译、元编程
采用最强大的
pongo2作为HTML渲染引擎提供近似LRU的文件缓存功能,主要用途是静态文件缓存
跨平台的彩色日志系统,且同时支持console和file两种输出形式(可以同时使用)
提供Session管理功能
支持Gzip全局配置
提供XSRF跨站请求伪造安全过滤
大多数功能尽量使用简洁的ini进行配置来避免不必要的重新编译,并且这些配置文件支持自动补填默认值
提供
gorm、xorm、sqlx、directSQL、Websocket、ini、http client等很多常用扩展包
简单示例
package main
import (
// "mime/multipart"
"time"
"github.com/henrylee2cn/faygo"
)
type Index struct {
Id int `param:""`
Title string `param:""`
Paragraph []string `param:""`
Cookie string `param:""`
// Picture *multipart.FileHeader `param:""`
}
func (i *Index) Serve(ctx *faygo.Context) error {
if ctx.CookieParam("faygoID") == "" {
ctx.SetCookie("faygoID", time.Now().String())
}
return ctx.JSON(200, i)
}
func main() {
app := faygo.New("myapp", "0.1")
// Register the route in a chain style
app.GET("/index/:id", new(Index))
// Register the route in a tree style
// app.Route(
// app.NewGET("/index/:id", new(Index)),
// )
// Start the service
faygo.Run()
}
/*
http GET:
http://localhost:8080/index/1?title=test&p=abc&p=xyz
response:
{
"Id": 1,
"Title": "test",
"Paragraph": [
"abc",
"xyz"
],
"Cookie": "2016-11-13 01:14:40.9038005 +0800 CST"
}
*/评论
