FaygoGo Web API 利器
Faygo
概述
Faygo 使用全新架構(gòu),是最合適開發(fā)API接口的Go Web框架。用戶只需定義一個struct Handler,就能自動綁定、驗證請求參數(shù)并生成在線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 創(chuàng)建、編譯和運(yùn)行(監(jiān)控文件變化)一個新的faygo項目 run 編譯和運(yùn)行(監(jiān)控文件變化)任意一個已存在的golang項目 fay new appname [apptpl] appname 指定新faygo項目的創(chuàng)建目錄 apptpl 指定一個faygo項目模板(可選) fay run [appname] appname 指定待運(yùn)行的golang項目路徑(可選)
框架特性
一個
struct Handler搞定多件事:定義 Handler/Middleware
綁定與驗證請求參數(shù)
生成 Swagger2.0 API 在線文檔
數(shù)據(jù)庫 ORM 映射
Handler與Middleware完全相同,都是實現(xiàn)Handler接口(
func或struct類型),共同構(gòu)成路由操作鏈,只是概念層面的說法不同支持多種網(wǎng)絡(luò)類型:
| 網(wǎng)絡(luò)類型 | 配置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 |
支持單服務(wù)單監(jiān)聽、單服務(wù)多監(jiān)聽、多服務(wù)多監(jiān)聽等,多個服務(wù)的配置信息相互獨(dú)立
基于
httprouter開發(fā)高性能路由,支持鏈?zhǔn)脚c樹形兩種注冊風(fēng)格,支持靈活的靜態(tài)文件路由(如DirFS、RenderFS、MarkdownFS等)支持平滑關(guān)閉、平滑升級,提供fay工具進(jìn)行新建項目、熱編譯、元編程
采用最強(qiáng)大的
pongo2作為HTML渲染引擎提供近似LRU的文件緩存功能,主要用途是靜態(tài)文件緩存
跨平臺的彩色日志系統(tǒng),且同時支持console和file兩種輸出形式(可以同時使用)
提供Session管理功能
支持Gzip全局配置
提供XSRF跨站請求偽造安全過濾
大多數(shù)功能盡量使用簡潔的ini進(jìn)行配置來避免不必要的重新編譯,并且這些配置文件支持自動補(bǔ)填默認(rèn)值
提供
gorm、xorm、sqlx、directSQL、Websocket、ini、http client等很多常用擴(kuò)展包
簡單示例
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"
}
*/