API 利器 —— Faygo Web 框架

Faygo

Faygo 使用全新架构,是最合适开发API接口的Go Web框架。用户只需定义一个struct Handler,就能自动绑定、验证请求参数并生成在线API文档。

Faygo Favicon

官方QQ群:Go-Web 编程 42730308 Go-Web 编程群

查看《用户手册》

faygo index

faygo apidoc

faygo server

最新版本

版本号

v1.0

安装要求

Go Version ≥1.8

快速使用

  • 方式一 源码下载
go get -u -v github.com/henrylee2cn/faygo
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接口(funcstruct类型),共同构成路由操作链,只是概念层面的说法不同
  • 支持多种网络类型:
网络类型 配置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进行配置来避免不必要的重新编译,并且这些配置文件支持自动补填默认值
  • 提供 gormxormsqlxdirectSQLWebsocketinihttp client 等很多常用扩展包

faygo struct handler 多重用途合一

简单示例

package main

import (
    // "mime/multipart"
    "time"
    "github.com/henrylee2cn/faygo"
)

type Index struct {
    Id        int      `param:"<in:path> <required> <desc:ID> <range: 0:10>"`
    Title     string   `param:"<in:query> <nonzero>"`
    Paragraph []string `param:"<in:query> <name:p> <len: 1:10> <regexp: ^[\\w]*$>"`
    Cookie    string   `param:"<in:cookie> <name:faygoID>"`
    // Picture         *multipart.FileHeader `param:"<in:formData> <name:pic> <maxmb:30>"`
}

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% ... 3Dxyz
response:
    {
        "Id": 1,
        "Title": "test",
        "Paragraph": [
            "abc",
            "xyz"
        ],
        "Cookie": "2016-11-13 01:14:40.9038005 +0800 CST"
    }
*/

示例库

开源协议

Faygo 项目采用商业应用友好的 Apache2.0 协议发布。

5 个评论

支持一下!
zan
看着不错,然而版本要求太屌了
mark一下
作者不知道这个框架的升级计划是怎么安排的

要回复文章请先登录注册