Documentation
¶
Overview ¶
Package web 一个微型的 RESTful API 框架
配置文件
配置文件的映射对象在 config.go 文件,其中有各个字段的详细说明。 用户如果需要添加一些自定义的配置项,需要自行再添加其它名称的配置文件, 并通过 config.LoadFile 加载相应的配置文件。
框架了除了本身的 web.yaml 配置文件之外,还有 logs.xml,用于定制日志的相关内容。 具体的日志相关信息,可以访问 https://github.com/issue9/logs 模块。
字符集
字符集用户无须任何操作,会自动根据 `Content-Type` 中的 charset 属性自动解析其字符集, 输出时,也会根据 `Accept-Charset` 报头内容,作自动转换之后再输出。 以下字符集都被支持: https://www.iana.org/assignments/character-sets/character-sets.xhtml
媒体类型
默认情况下,框架不会处理任何的 mimetype 类型的数据。需要用户通过 Config 对象中的 Marshalers 和 Unmarshalers 字段指定相应的解码和编码函数, context/mimetype/ 之下也包含部分已经实现的编解码函数。
返回结果
context 包下的 Result 表示在出错时的输出内容。在使用前,用户需要在 Config.Results 添加各类错误代码。
模块
用户可以把功能相对独立的内容当作一个模块进行封装。框架本身提供了 web.MODServer 对模块进行了依赖管理。用户可以在 Web.NewModule() 返回对象中, 对模块进行初始化和路由项的添加。所有模块会在 Web.Init() 中进行初始化。
Index ¶
- Constants
- Variables
- type Certificate
- type Config
- type Context
- type Debug
- type Duration
- func (d Duration) Duration() time.Duration
- func (d Duration) MarshalJSON() ([]byte, error)
- func (d Duration) MarshalXML(e *xml.Encoder, start xml.StartElement) error
- func (d Duration) MarshalYAML() (interface{}, error)
- func (d *Duration) UnmarshalJSON(b []byte) error
- func (d *Duration) UnmarshalXML(de *xml.Decoder, start xml.StartElement) error
- func (d *Duration) UnmarshalYAML(u func(interface{}) error) error
- type ErrorHandler
- type ErrorHandlerFunc
- type Filter
- type HandlerFunc
- type InstallFunc
- type Job
- type JobFunc
- type Map
- type Middleware
- type Module
- func (m *Module) AddAt(title string, f JobFunc, spec string, delay bool)
- func (m *Module) AddCron(title string, f JobFunc, spec string, delay bool)
- func (m *Module) AddFilters(filter ...Filter)
- func (m *Module) AddJob(title string, f JobFunc, scheduler schedulers.Scheduler, delay bool)
- func (m *Module) AddService(f ServiceFunc, title string)
- func (m *Module) AddTicker(title string, f JobFunc, dur time.Duration, imm, delay bool)
- func (m *Module) Delete(path string, h HandlerFunc) *Module
- func (m *Module) Get(path string, h HandlerFunc) *Module
- func (m *Module) Handle(path string, h HandlerFunc, method ...string) *Module
- func (m *Module) NewTag(tag string) *Tag
- func (m *Module) Options(path, allow string) *Module
- func (m *Module) Patch(path string, h HandlerFunc) *Module
- func (m *Module) Post(path string, h HandlerFunc) *Module
- func (m *Module) Prefix(prefix string, filter ...Filter) *Prefix
- func (m *Module) Put(path string, h HandlerFunc) *Module
- func (m *Module) Resource(pattern string, filter ...Filter) *Resource
- type Prefix
- func (p *Prefix) Delete(path string, h HandlerFunc) *Prefix
- func (p *Prefix) Get(path string, h HandlerFunc) *Prefix
- func (p *Prefix) Handle(path string, h HandlerFunc, method ...string) *Prefix
- func (p *Prefix) Module() *Module
- func (p *Prefix) Options(path, allow string) *Prefix
- func (p *Prefix) Patch(path string, h HandlerFunc) *Prefix
- func (p *Prefix) Post(path string, h HandlerFunc) *Prefix
- func (p *Prefix) Put(path string, h HandlerFunc) *Prefix
- func (p *Prefix) Resource(pattern string, filter ...Filter) *Resource
- type Resource
- func (r *Resource) Delete(h HandlerFunc) *Resource
- func (r *Resource) Get(h HandlerFunc) *Resource
- func (r *Resource) Handle(h HandlerFunc, method ...string) *Resource
- func (r *Resource) Options(allow string) *Resource
- func (r *Resource) Patch(h HandlerFunc) *Resource
- func (r *Resource) Post(h HandlerFunc) *Resource
- func (r *Resource) Put(h HandlerFunc) *Resource
- type Result
- type Service
- type ServiceFunc
- type ServiceState
- type Tag
- type Web
- func (web *Web) CTXServer() *context.Server
- func (web *Web) Close() error
- func (web *Web) HTTPServer() *http.Server
- func (web *Web) Init(tag string, info *log.Logger) error
- func (web *Web) Jobs() []*Job
- func (web *Web) Logs() *logs.Logs
- func (web *Web) Modules() []*Module
- func (web *Web) NewModule(name, desc string, deps ...string) *Module
- func (web *Web) Serve() (err error)
- func (web *Web) Services() []*Service
- func (web *Web) Tags() map[string][]string
Constants ¶
const ( LogsFilename = "logs.xml" ConfigFilename = "web.yaml" )
两个配置文件的名称
const ContextKeyWeb contextKey = 0
ContextKeyWeb 可以从 http.Request 中获取 Web 实例的关键字
const Version = version.Version
Version 当前框架的版本
Variables ¶
var ErrInited = errors.New("模块已经初始化")
ErrInited 当模块被多次初始化时返回此错误
Functions ¶
This section is empty.
Types ¶
type Certificate ¶ added in v0.32.0
type Certificate struct {
Cert string `yaml:"cert,omitempty" json:"cert,omitempty" xml:"cert,omitempty"`
Key string `yaml:"key,omitempty" json:"key,omitempty" xml:"key,omitempty"`
}
Certificate 证书管理
type Config ¶ added in v0.32.0
type Config struct {
XMLName struct{} `yaml:"-" json:"-" xml:"web"`
// 调试信息的设置
Debug *Debug `yaml:"debug,omitempty" json:"debug,omitempty" xml:"debug,omitempty"`
// 网站的根目录所在
//
// 比如 https://example.com/api/
Root string `yaml:"root,omitempty" json:"root,omitempty" xml:"root,omitempty"`
// 指定插件的搜索方式
//
// 通过 glob 语法搜索插件,比如:
// ~/plugins/*.so
// 具体可参考:https://golang.org/pkg/path/filepath/#Glob
// 为空表示没有插件。
//
// 当前仅支持部分系统,具体可查看:https://golang.org/pkg/plugin/
Plugins string `yaml:"plugins,omitempty" json:"plugins,omitempty" xml:"plugins,omitempty"`
// 网站的域名证书
//
// 该设置并不总是生效的,具体的说明可参考 TLSConfig 字段的说明。
Certificates []*Certificate `yaml:"certificates,omitempty" json:"certificates,omitempty" xml:"certificates,omitempty"`
// 是否禁用自动生成 OPTIONS 和 HEAD 请求的处理
DisableOptions bool `yaml:"disableOptions,omitempty" json:"disableOptions,omitempty" xml:"disableOptions,omitempty"`
DisableHead bool `yaml:"disableHead,omitempty" json:"disableHead,omitempty" xml:"disableHead,omitempty"`
// 指定静态内容
//
// 键名为 URL 路径,键值为文件地址
//
// 比如在 Domain 和 Root 的值分别为 example.com 和 blog 时,
// 将 Static 的值设置为 /admin ==> ~/data/assets/admin
// 表示将 example.com/blog/admin/* 解析到 ~/data/assets/admin 目录之下。
Static Map `yaml:"static,omitempty" json:"static,omitempty" xml:"static,omitempty"`
// 应用于 http.Server 的几个变量
ReadTimeout Duration `yaml:"readTimeout,omitempty" json:"readTimeout,omitempty" xml:"readTimeout,omitempty"`
WriteTimeout Duration `yaml:"writeTimeout,omitempty" json:"writeTimeout,omitempty" xml:"writeTimeout,omitempty"`
IdleTimeout Duration `yaml:"idleTimeout,omitempty" json:"idleTimeout,omitempty" xml:"idleTimeout,omitempty"`
ReadHeaderTimeout Duration `yaml:"readHeaderTimeout,omitempty" json:"readHeaderTimeout,omitempty" xml:"readHeaderTimeout,omitempty"`
MaxHeaderBytes int `yaml:"maxHeaderBytes,omitempty" json:"maxHeaderBytes,omitempty" xml:"maxHeaderBytes,omitempty"`
// 指定关闭服务时的超时时间
//
// 如果此值不为 0,则在关闭服务时会调用 http.Server.Shutdown 函数等待关闭服务,
// 否则直接采用 http.Server.Close 立即关闭服务。
ShutdownTimeout Duration `yaml:"shutdownTimeout,omitempty" json:"shutdownTimeout,omitempty" xml:"shutdownTimeout,omitempty"`
// 时区名称
//
// 可以是 Asia/Shanghai 等,具体可参考:
// https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
//
// 为空和 Local(注意大小写) 值都会被初始化本地时间。
Timezone string `yaml:"timezone,omitempty" json:"timezone,omitempty" xml:"timezone,omitempty"`
// 本地化消息的管理组件
//
// 为空的情况下会引用 golang.org/x/text/message.DefaultCatalog 对象。
//
// golang.org/x/text/message/catalog 提供了 NewBuilder 和 NewFromMap
// 等方式构建 Catalog 接口实例。
Catalog catalog.Catalog `yaml:"-" json:"-" xml:"-"`
// 指定中间件
//
// Middlewares 和 Filters 都表示中间件,两者的功能没有本质上的差别。
// 之所以提供了两个类型,是因为 Middlewares 兼容 http.Handler 类型,
// 可以对市面上大部分的中间件稍加改造即可使用,而 Filter
// 则提供了部分 http.Handler 不存在的数据字段,且两者不能交替出现,
// 二脆同时提供两种中间件。
//
// 在使用上,永远是 Middlewares 在 Filters 之前调用。
Middlewares []Middleware `yaml:"-" json:"-" xml:"-"`
Filters []Filter `yaml:"-" json:"-" xml:"-"`
// 指定各类媒体类型的编解码函数
Marshalers map[string]mimetype.MarshalFunc `yaml:"-" json:"-" xml:"-"`
Unmarshalers map[string]mimetype.UnmarshalFunc `yaml:"-" json:"-" xml:"-"`
// 指定生成 Result 的方法
//
// 可以为空,表示采用 CTXServer 的默认值。
ResultBuilder context.BuildResultFunc `yaml:"-" json:"-" xml:"-"`
// 指定 https 模式下的证书配置项
//
// 如果用户指定了 Certificates 字段,则会根据此字段生成,
// 用户也可以自已覆盖此值,比如采用 golang.org/x/crypto/acme/autocert.Manager.TLSConfig
// 配置 Let's Encrypt。
TLSConfig *tls.Config `yaml:"-" json:"-" xml:"-"`
// 返回给用户的错误提示信息
//
// 对键名作了一定的要求:要求最高的三位数必须是一个 HTTP 状态码,
// 比如 40001,在返回给客户端时,会将 400 作为状态码展示给用户,
// 同时又会将 40001 和对应的消息发送给用户。
//
// 该数据最终由 context.Server.AddMessages 添加。
Results map[int]string `yaml:"-" json:"-" xml:"-"`
// 指定错误页面的处理方式
ErrorHandlers []*ErrorHandler `yaml:"-" json:"-" xml:"-"`
// 指定用于触发关闭服务的信号
//
// 如果为 nil,表示未指定任何信息,如果是长度为 0 的数组,则表示任意信号,
// 如果指定了多个相同的值,则该信号有可能多次触发。
ShutdownSignal []os.Signal `yaml:"-" json:"-" xml:"-"`
// contains filtered or unexported fields
}
Config 提供了初始化 Web 对象的基本参数
type Debug ¶ added in v0.18.0
type Debug struct {
Pprof string `yaml:"pprof,omitempty" json:"pprof,omitempty" xml:"pprof,omitempty"`
Vars string `yaml:"vars,omitempty" json:"vars,omitempty" xml:"vars,omitempty"`
}
Debug 调试信息的配置
type Duration ¶ added in v0.32.0
Duration 封装 time.Duration 以实现对 JSON、XML 和 YAML 的解析
func (Duration) MarshalJSON ¶ added in v0.32.0
MarshalJSON json.Marshaler 接口
func (Duration) MarshalXML ¶ added in v0.32.0
MarshalXML xml.Marshaler 接口
func (Duration) MarshalYAML ¶ added in v0.32.0
MarshalYAML yaml.Marshaler 接口
func (*Duration) UnmarshalJSON ¶ added in v0.32.0
UnmarshalJSON json.Unmarshaler 接口
func (*Duration) UnmarshalXML ¶ added in v0.32.0
UnmarshalXML xml.Unmarshaler 接口
func (*Duration) UnmarshalYAML ¶ added in v0.32.0
UnmarshalYAML yaml.Unmarshaler 接口
type ErrorHandler ¶ added in v0.33.0
type ErrorHandler struct {
Status []int
Handler ErrorHandlerFunc
}
ErrorHandler 错误处理的配置
type ErrorHandlerFunc ¶ added in v0.33.0
type ErrorHandlerFunc = errorhandler.HandleFunc
ErrorHandlerFunc 错误状态码对应的处理函数原型
type Map ¶ added in v0.32.0
Map 定义 map[string]string 类型
唯一的功能是为了 xml 能支持 map。
func (Map) MarshalXML ¶ added in v0.32.0
MarshalXML implement xml.Marshaler
func (*Map) UnmarshalXML ¶ added in v0.32.0
UnmarshalXML implement xml.Unmarshaler
type Module ¶
type Module struct {
Tag
Name string
Description string
Deps []string
// contains filtered or unexported fields
}
Module 表示模块信息
模块仅作为在初始化时在代码上的一种分类,一旦初始化完成, 则不再有模块的概念,修改模块的相关属性,也不会对代码有实质性的改变。
func (*Module) AddAt ¶ added in v0.33.0
AddAt 添加新的定时任务
f 表示服务的运行函数; title 是对该服务的简要说明; spec 指定的时间点; delay 是否在任务执行完之后,才计算下一次的执行时间点。
func (*Module) AddCron ¶ added in v0.33.0
AddCron 添加新的定时任务
f 表示服务的运行函数; title 是对该服务的简要说明; spec cron 表达式,支持秒; delay 是否在任务执行完之后,才计算下一次的执行时间点。
func (*Module) AddJob ¶ added in v0.33.0
AddJob 添加新的计划任务
f 表示服务的运行函数; title 是对该服务的简要说明; scheduler 计划任务的时间调度算法实现; delay 是否在任务执行完之后,才计算下一次的执行时间点。
func (*Module) AddService ¶ added in v0.33.0
func (m *Module) AddService(f ServiceFunc, title string)
AddService 添加新的服务
f 表示服务的运行函数; title 是对该服务的简要说明。
func (*Module) AddTicker ¶ added in v0.33.0
AddTicker 添加新的定时任务
f 表示服务的运行函数; title 是对该服务的简要说明; imm 是否立即执行一次该任务; delay 是否在任务执行完之后,才计算下一次的执行时间点。
func (*Module) Delete ¶ added in v0.33.0
func (m *Module) Delete(path string, h HandlerFunc) *Module
Delete 指定个 DELETE 请求处理
func (*Module) Get ¶ added in v0.33.0
func (m *Module) Get(path string, h HandlerFunc) *Module
Get 指定一个 GET 请求
func (*Module) Handle ¶ added in v0.33.0
func (m *Module) Handle(path string, h HandlerFunc, method ...string) *Module
Handle 添加路由项
func (*Module) NewTag ¶ added in v0.33.0
NewTag 为当前模块生成特定名称的子模块
若已经存在,则直接返回该子模块。
Tag 是依赖关系与当前模块相同,但是功能完全独立的模块, 一般用于功能更新等操作。
func (*Module) Patch ¶ added in v0.33.0
func (m *Module) Patch(path string, h HandlerFunc) *Module
Patch 指定个 PATCH 请求处理
func (*Module) Post ¶ added in v0.33.0
func (m *Module) Post(path string, h HandlerFunc) *Module
Post 指定个 POST 请求处理
type Prefix ¶ added in v0.33.0
type Prefix struct {
// contains filtered or unexported fields
}
Prefix 管理带有统一前缀的路由项
func (*Prefix) Delete ¶ added in v0.33.0
func (p *Prefix) Delete(path string, h HandlerFunc) *Prefix
Delete 指定个 DELETE 请求处理
func (*Prefix) Get ¶ added in v0.33.0
func (p *Prefix) Get(path string, h HandlerFunc) *Prefix
Get 指定一个 GET 请求
func (*Prefix) Handle ¶ added in v0.33.0
func (p *Prefix) Handle(path string, h HandlerFunc, method ...string) *Prefix
Handle 添加路由项
func (*Prefix) Patch ¶ added in v0.33.0
func (p *Prefix) Patch(path string, h HandlerFunc) *Prefix
Patch 指定个 PATCH 请求处理
func (*Prefix) Post ¶ added in v0.33.0
func (p *Prefix) Post(path string, h HandlerFunc) *Prefix
Post 指定个 POST 请求处理
type Resource ¶ added in v0.33.0
type Resource struct {
// contains filtered or unexported fields
}
Resource 以资源地址为对象的路由配置
func (*Resource) Delete ¶ added in v0.33.0
func (r *Resource) Delete(h HandlerFunc) *Resource
Delete 指定个 DELETE 请求处理
func (*Resource) Get ¶ added in v0.33.0
func (r *Resource) Get(h HandlerFunc) *Resource
Get 指定一个 GET 请求
func (*Resource) Handle ¶ added in v0.33.0
func (r *Resource) Handle(h HandlerFunc, method ...string) *Resource
Handle 添加路由项
func (*Resource) Patch ¶ added in v0.33.0
func (r *Resource) Patch(h HandlerFunc) *Resource
Patch 指定个 PATCH 请求处理
func (*Resource) Post ¶ added in v0.33.0
func (r *Resource) Post(h HandlerFunc) *Resource
Post 指定个 POST 请求处理
func (*Resource) Put ¶ added in v0.33.0
func (r *Resource) Put(h HandlerFunc) *Resource
Put 指定个 PUT 请求处理
type Tag ¶ added in v0.28.0
type Tag struct {
// contains filtered or unexported fields
}
Tag 表示与特定标签相关联的初始化函数列表
依附于模块,共享模块的依赖关系。
一般是各个模块下的安装脚本使用。
type Web ¶ added in v0.32.0
type Web struct {
// contains filtered or unexported fields
}
Web 管理整个项目所有实例
func Classic ¶ added in v0.25.0
Classic 返回一个开箱即用的 Web 实例
会加载 dir 目录下的 web.yaml 和 logs.xml 两个配置文件内容,并用于初始化 Web 实例。
func (*Web) HTTPServer ¶ added in v0.32.0
HTTPServer 返回 http.Server 实例
func (*Web) Init ¶ added in v0.33.0
Init 初始化模块
若指定了 tag 参数,则只初始化与该标签相关联的内容。
一旦初始化完成,则不再接受添加新模块,也不能再次进行初始化。 Web 的大部分功能将失去操作意义,比如 Web.NewModule 虽然能添加新模块到 Server,但并不能真正初始化新的模块并挂载。
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
web
command
简单的辅助功能命令行工具
|
简单的辅助功能命令行工具 |
|
Package config 提供了加载配置项内容的各类方法
|
Package config 提供了加载配置项内容的各类方法 |
|
Package context 用于处理单个请求的上下文关系
|
Package context 用于处理单个请求的上下文关系 |
|
mimetype
Package mimetype 提供对各类媒体数据的处理
|
Package mimetype 提供对各类媒体数据的处理 |
|
mimetype/form
Package form 用于处理 www-form-urlencoded 编码 func read(ctx *web.Context) { vals := urls.Values{} ctx.Read(vals) } func write(ctx *web.Context) { vals := urls.Values{} vals.Add("name", "caixw") ctx.Render(http.StatusOK, vals, nil) } form 用户可以通过定义 form 标签自定义输出的名称,比如: type Username struct { Name string `form:"name"` Age int } 转换成 form-data 可能是以下样式: name=jjj&age=18 该方式对数据类型有一定限制: 1.
|
Package form 用于处理 www-form-urlencoded 编码 func read(ctx *web.Context) { vals := urls.Values{} ctx.Read(vals) } func write(ctx *web.Context) { vals := urls.Values{} vals.Add("name", "caixw") ctx.Render(http.StatusOK, vals, nil) } form 用户可以通过定义 form 标签自定义输出的名称,比如: type Username struct { Name string `form:"name"` Age int } 转换成 form-data 可能是以下样式: name=jjj&age=18 该方式对数据类型有一定限制: 1. |
|
mimetype/gob
Package gob 提供 GOB 格式的编解码
|
Package gob 提供 GOB 格式的编解码 |
|
mimetype/html
Package html 提供输出 HTML 内容的 mimetype.MarshalFunc 函数 tpl := template.ParseFiles(...) mgr := html.New(tpl) mimetype.AddMarshal("text/html", mgr.Marshal) func handle(ctx *web.Context) { ctx.Render(200, html.Tpl("index", map[string]interface{}{...}), nil) }
|
Package html 提供输出 HTML 内容的 mimetype.MarshalFunc 函数 tpl := template.ParseFiles(...) mgr := html.New(tpl) mimetype.AddMarshal("text/html", mgr.Marshal) func handle(ctx *web.Context) { ctx.Render(200, html.Tpl("index", map[string]interface{}{...}), nil) } |
|
mimetype/mimetypetest
Package mimetypetest 针对文本内容的编解码实现,仅作为测试用例。
|
Package mimetypetest 针对文本内容的编解码实现,仅作为测试用例。 |
|
internal
|
|
|
cmd
Package cmd 命令行相关操作
|
Package cmd 命令行相关操作 |
|
cmd/build
Package build 提供编译相关的功能
|
Package build 提供编译相关的功能 |
|
cmd/release
Package release 发布版本号管理
|
Package release 发布版本号管理 |
|
cmd/version
Package version 显示版本号信息
|
Package version 显示版本号信息 |
|
cmd/watch
Package watch 提供热编译功能 功能与 github.com/caixw/gobuild 相同。
|
Package watch 提供热编译功能 功能与 github.com/caixw/gobuild 相同。 |
|
filesystem
Package filesystem 提供与文件系统相关的操作
|
Package filesystem 提供与文件系统相关的操作 |
|
plugintest
Package plugintest 作为插件的功能测试包 NOTE: 该测试如果直接写在功能所在的包,目前版本会报错。
|
Package plugintest 作为插件的功能测试包 NOTE: 该测试如果直接写在功能所在的包,目前版本会报错。 |
|
version
Package version 版本定义
|
Package version 版本定义 |
|
versioninfo
Package versioninfo 提供对版本信息的一些操作
|
Package versioninfo 提供对版本信息的一些操作 |
|
Package service 服务管理
|
Package service 服务管理 |