web

package module
v0.44.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 25, 2021 License: MIT Imports: 19 Imported by: 75

README

web

Test Go Report Card codecov PkgGoDev Go version License

web 是一个比较完整的 API 开发框架,相对于简单的路由,提供了更多的便利功能。 如果你只是需要一个简单的路由工具,那么你可以移步到 mux

package main

import "github.com/issue9/web"

// main.go
func main() {
    srv, _ := web.NewServer("web", "1.0.0", &web.Options{})

    m1.Module(srv)
    m2.Module(srv)

    srv.Serve(true, "serve")
}

// modules/m1/module.go
func Module(s *web.Server) error {
    m := s.NewModule("m1", "1.0.0", web.Phrase("模块描述信息"))
    m.Action("serve").AddRoutes(func(r*web.Router){
        r.Get("/admins", getAdmins).
            Get("/groups", getGroups)
    })
}

// modules/m2/module.go
func Module(s *web.Server) error {
    m := s.NewModule("m1", "1.0.0", web.Phrase("模块描述信息"), "m1")
    m.Action("serve").AddRoutes(func(r*web.Router){
        r.Get("/admins", getAdmins).
            Get("/groups", getGroups)
    })
}

模块

在 web 中项目以模块进行划分。每个模块返回一个 *web.Module 实例, 向项目注册自己的模块信息,在项目进行初始化时,会按照模块的依赖关系进行初始化。

用户可以在模块信息中添加当前模块的路由信息、服务、计划任务等, 这些功能在模块初始化时进行统一的注册初始化。

package m1

import "github.com/issue9/web"

func Module(s *web.Server) error {
    m := s.NewModule("test", "1.0.0", "测试模块")

    a := m.Action("serve")
    a.AddInit(func() error {
        // TODO 此处可以添加初始化模块的相关代码
        return nil
    }, "初始化函数描述")

    a.AddService(func(ctx web.Context) error {
        // TODO 此处添加服务代码
    }, "服务描述")

    return nil
}

字符集和文档类型

文档类型由 Server.Mimetypes 指定。 字符类型无需用户指定,https://www.iana.org/assignments/character-sets/character-sets.xhtml 中列出的字符集都能自动转换。

import "github.com/issue9/web"

srv := web.NewServer(&web.Options{})

srv.Mimetypes().Add("application/json", json.Marshal, json.Unmarshal)
srv.Mimetypes().Add("application/xml", xml.Marshal, xml.Unmarshal)

srv.Serve()

客户端只要在请求时设置 Accept 报头就可返回相应类型的数据,而 Accept-Charset 报头可设置接收的字符集。 Content-Type 则可以有向服务器指定提交内容的文档类型和字符集。

错误处理

框架提供了一种输出错误信息内容的机制,用户只需要实现 Result 接口,即可自定义输出的错误信息格式。 具体实现可参考 server.defaultResult 的实现。

版权

本项目采用 MIT 开源授权许可证,完整的授权说明可在 LICENSE 文件中找到。

Documentation

Overview

Package web 一个微型的 web 框架

Index

Constants

View Source
const Version = "0.44.0"

Version 当前框架的版本

Variables

This section is empty.

Functions

This section is empty.

Types

type Command added in v0.41.0

type Command struct {
	Name string // 程序名称

	Version string // 程序版本

	// 在运行服务之前对 Server 的额外操作
	//
	// 比如添加模块等。不可以为空。
	Init func(s *Server, action string) error

	// 触发退出的信号
	//
	// 为空(nil 或是 []) 表示没有。
	Signals []os.Signal

	// 在初始化 Server 之前对 Options 的二次处理
	//
	// 可以为空。
	Options func(*Options)

	// 命令行输出信息的通道
	//
	// 默认为 os.Stdout。
	Out io.Writer

	// 配置文件的加载器
	//
	// 为空则会给定一个能解析 .xml、.yaml、.yml 和 .json 文件的默认对象。
	// 该值可能会被 Options 操作所覆盖。
	Files *Files

	// 配置文件的文件名
	//
	// 仅是文件名,相对的路径由命令行 -f 指定。
	// 如果为空,则直接采用 &Options{} 初始化 Server 对象。
	ConfigFilename string

	// 本地化的相关操作接口
	//
	// 如果为空,则会被初始化一个空对象,该值可能会被 Options 操作所覆盖。
	Catalog *catalog.Builder

	// 通过信号触发退出时的等待时间
	SignalTimeout time.Duration
	// contains filtered or unexported fields
}

Command 提供一种简单的命令行生成方式

由 Command 生成的命令行带以下几个参数:

  • v 显示版本号;

  • h 显示帮助信息;

  • f 指定当前程序可读取的文件系统,这最终会转换成 Server.FS;

  • a 执行的动作,该值传递给 Init,由用户根据 a 决定初始化的方式,比如是安装数据还是注册路由等;

  • s 以服务的形式运行;

    // 本地化命令行的帮助信息 builder := catalog.NewBuilder() builder.SetString("show help", "显示帮助信息") builder.SetString("show version", "显示版本信息")

    cmd := &web.Command{ Name: "app", Version: "1.0.0", Init: func(s *Server) error {...}, Catalog: builder, }

    cmd.Exec()

Command 的本地化信息采用当前用户的默认语言, 由 github.com/issue9/localeutil.DetectUserLanguageTag 决定。 如果想让 Command 支持本地化操作,最起码需要向 Catalog 注册以下几条信息:

-v  show version
-h  show help
-f  set file system
-a  action
-s  run as server

NOTE: Command 并不是必须的,只是为用户提供了一种简便的方式生成命令行, 相对地也会有诸多限制,如果觉得不适用,可以自行调用 NewServer 初始化 Server。

func (*Command) Exec added in v0.41.0

func (cmd *Command) Exec() error

Exec 执行命令行操作

type Context

type Context = server.Context

type Files added in v0.44.0

type Files = serialization.Files

type Filter added in v0.33.0

type Filter = server.Filter

type HandlerFunc added in v0.33.0

type HandlerFunc = server.HandlerFunc

type LocaleStringer added in v0.43.0

type LocaleStringer = localeutil.LocaleStringer

LocaleStringer 本地化字符串需要实在的接口

部分 error 返回可能也实现了该接口。

func Phrase added in v0.42.0

func Phrase(key string, v ...interface{}) LocaleStringer

Phrase 生成本地化的语言片段

type Options added in v0.34.0

type Options = server.Options

type Responser added in v0.40.0

type Responser = server.Responser

func Created added in v0.43.0

func Created(v interface{}, location string) Responser

func NoContent added in v0.43.0

func NoContent() Responser

func NotFound added in v0.43.0

func NotFound() Responser

func NotImplemented added in v0.44.0

func NotImplemented() Responser

func OK added in v0.44.0

func OK(v interface{}) Responser

OK 返回 200 状态码下的对象

func Object added in v0.40.0

func Object(status int, body interface{}, headers map[string]string) Responser

func Status added in v0.40.0

func Status(status int) Responser

type Result

type Result = server.Result

type ResultFields added in v0.42.0

type ResultFields = server.ResultFields

type Router added in v0.34.0

type Router = server.Router

type Server added in v0.25.0

type Server = server.Server

func NewServer added in v0.34.0

func NewServer(name, version string, o *Options) (*Server, error)

NewServer 从 Options 初始化 Server 对象

Directories

Path Synopsis
cmd
web module
Package config 提供了从配置文件初始化 server.Options 的方法
Package config 提供了从配置文件初始化 server.Options 的方法
internal
charsetdata
Package charsetdata 用于测试的字符集数据
Package charsetdata 用于测试的字符集数据
errs
Package errs 对错误信息的二次处理
Package errs 对错误信息的二次处理
filesystem
Package filesystem 提供文件系统的相关操作
Package filesystem 提供文件系统的相关操作
Package locales 为 web 包提供了本地化的内容 并不主动加载这些信息,用户可以根据自身的需求引用 Locales。
Package locales 为 web 包提供了本地化的内容 并不主动加载这些信息,用户可以根据自身的需求引用 Locales。
Package serialization 序列化相关的操作
Package serialization 序列化相关的操作
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") return web.Object(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") return web.Object(http.StatusOK, vals, nil) } form 用户可以通过定义 form 标签自定义输出的名称,比如: type Username struct { Name string `form:"name"` Age int } 转换成 form-data 可能是以下样式: name=jjj&age=18 该方式对数据类型有一定限制: 1.
gob
Package gob 提供 GOB 格式的编解码
Package gob 提供 GOB 格式的编解码
html
Package html 提供输出 HTML 内容的解码函数 srv := NewServer() tpl := template.ParseFiles(...) srv.Mimetypes().Add("text/html", html.Marshal, nil) func handle(ctx *web.Context) Responser { return Object(200, html.Tpl(tpl, "index", map[string]interface{}{...}), nil) }
Package html 提供输出 HTML 内容的解码函数 srv := NewServer() tpl := template.ParseFiles(...) srv.Mimetypes().Add("text/html", html.Marshal, nil) func handle(ctx *web.Context) Responser { return Object(200, html.Tpl(tpl, "index", map[string]interface{}{...}), nil) }
jsonp
Package jsonp JSONP 序列化操作
Package jsonp JSONP 序列化操作
text
Package text 针对文本内容的编解码实现
Package text 针对文本内容的编解码实现
text/testobject
Package testobject 用于测试 mimetype 的对象
Package testobject 用于测试 mimetype 的对象
Package server web 服务管理
Package server web 服务管理

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL