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 类型的数据。需要用户通过 Web 对象中的 Marshalers 和 Unmarshalers 字段指定相应的解码和编码函数, context/mimetype/ 之下也包含部分已经实现的编解码函数。
返回结果
context 包下的 Result 表示在出错时的输出内容。在使用前,用户需要在 Config.Results 添加各类错误代码。
模块
用户可以把功能相对独立的内容当作一个模块进行封装。框架本身提供了 web.MODServer 对模块进行了依赖管理。用户可以在 web.MODServer.NewModule() 返回对象中, 对模块进行初始化和路由项的添加。所有模块会在 Web.InitModules() 中进行初始化。
Index ¶
- Constants
- 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 MODServer
- type Map
- type Module
- type Result
- type SchedulerFunc
- type Service
- type ServiceFunc
- type Web
- func (web *Web) CTXServer() *context.Server
- func (web *Web) Close() error
- func (web *Web) HTTPServer() *http.Server
- func (web *Web) InitModules(tag string) error
- func (web *Web) Modules() []*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 ¶
This section is empty.
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 *Debug `yaml:"debug,omitempty" json:"debug,omitempty" xml:"debug,omitempty"` // Root 网站的根目录所在 // // 比如 https://example.com/api/ Root string `yaml:"root,omitempty" json:"root,omitempty" xml:"root,omitempty"` // Plugins 指定插件,通过 glob 语法指定,比如:~/plugins/*.so // 为空表示没有插件。 // // 当前仅支持部分系统:https://golang.org/pkg/plugin/ Plugins string `yaml:"plugins,omitempty" json:"plugins,omitempty" xml:"plugins,omitempty"` // Certificates 网站的域名证书 // // 该设置并不总是生效的,具体的说明可参考 TLSConfig 字段的说明。 Certificates []*Certificate `yaml:"certificates,omitempty" json:"certificates,omitempty" xml:"certificates,omitempty"` // DisableOptions 是否禁用自动生成 OPTIONS 和 HEAD 请求的处理 DisableOptions bool `yaml:"disableOptions,omitempty" json:"disableOptions,omitempty" xml:"disableOptions,omitempty"` DisableHead bool `yaml:"disableHead,omitempty" json:"disableHead,omitempty" xml:"disableHead,omitempty"` // Static 静态内容,键名为 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"` // Timezone 时区名称 // // 可以是 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"` // 用于初始化日志系统的参数 Logs *lc.Config `yaml:"logs,omitempty" json:"logs,omitempty" xml:"logs,omitempty"` // Catalog 本地化消息的管理组件 // // 为空的情况下会引用 golang.org/x/text/message.DefaultCatalog 对象。 // // golang.org/x/text/message/catalog 提供了 NewBuilder 和 NewFromMap // 等方式构建 Catalog 接口实例。 Catalog catalog.Catalog `yaml:"-" json:"-" xml:"-"` Marshalers map[string]mimetype.MarshalFunc `yaml:"-" json:"-" xml:"-"` Unmarshalers map[string]mimetype.UnmarshalFunc `yaml:"-" json:"-" xml:"-"` ResultBuilder context.BuildResultFunc `yaml:"-" json:"-" xml:"-"` ContextInterceptor func(*context.Context) `yaml:"-" json:"-" xml:"-"` // TLSConfig 指定 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:"-"` // 指定用于触发关闭服务的信号 // // 如果为 nil,表示未指定任何信息,如果是长度为 0 的数组,则表示任意信号, // 如果指定了多个相同的值,则该信号有可能多次触发。 ShutdownSignal []os.Signal `yaml:"-" json:"-" xml:"-"` // contains filtered or unexported fields }
Config 提供了初始化 Web 对象的基本参数
func LoadConfig ¶
LoadConfig 加载指定目录下的配置文件用于初始化 *Config 实例
当前加后的 conf.Logs == nil 时,会将 dir 目录下的 logs.xml 当作实例加载。
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 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 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) InitModules ¶ added in v0.32.0
InitModules 初始化模块
Directories
¶
Path | Synopsis |
---|---|
cmd
|
|
web
简单的辅助功能命令行工具
|
简单的辅助功能命令行工具 |
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 函数。
|
Package html 提供输出 HTML 内容的 mimetype.MarshalFunc 函数。 |
mimetype/mimetypetest
Package mimetypetest 针对文本内容的编解码实现,仅作为测试用例。
|
Package mimetypetest 针对文本内容的编解码实现,仅作为测试用例。 |
internal
|
|
cmd/build
Package build 提供编译相关的功能
|
Package build 提供编译相关的功能 |
cmd/create
Package create 用于创建新项目的子命令
|
Package create 用于创建新项目的子命令 |
cmd/release
Package release 发布版本号管理
|
Package release 发布版本号管理 |
cmd/version
Package version 显示版本号信息
|
Package version 显示版本号信息 |
cmd/watch
Package watch 提供热编译功能。
|
Package watch 提供热编译功能。 |
filesystem
Package filesystem 提供与文件系统相关的操作
|
Package filesystem 提供与文件系统相关的操作 |
plugintest
Package plugintest 作为插件的功能测试包 NOTE: 该功能如果直接写在 module 包之下,目前版本会报错。
|
Package plugintest 作为插件的功能测试包 NOTE: 该功能如果直接写在 module 包之下,目前版本会报错。 |
version
Package version 版本定义
|
Package version 版本定义 |
versioninfo
Package versioninfo 提供对版本信息的一些操作
|
Package versioninfo 提供对版本信息的一些操作 |
Package module 提供模块管理的相关功能
|
Package module 提供模块管理的相关功能 |