zeroapi

package module
v0.16.7 Latest Latest
Warning

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

Go to latest
Published: Apr 16, 2024 License: MIT Imports: 4 Imported by: 29

README

zero-api

小巧的 api

主要文件

  • app.go 应用,负责整合ServerRouter
  • context.go 一次请求的上下文
  • cookie.go Cookie相关
  • group.go 组路由,即一组由相同前缀组成的路由
  • option.go 应用的选项设置
  • route.go 每一个Method(GET/POST/PUT...)的路由由一个Route存储
  • router.go 路由管理器
  • server.go HTTP Server

路由

静态路由

  • 示例: /blog/list

动态路由

  • 格式: :param
  • 示例: /blog/list/:id
    • /blog/list/1001 匹配, id="1001"
    • /blog/list/p1001 匹配, id="p1001"
    • /blog/list 不匹配
    • /blog/list/1001/add 不匹配

动态路由,带正则表达式

  • 格式: :param(regexp)
  • 示例: /blog/list/:id(^\d+$)
    • /blog/list/1001 匹配,id="1001"
    • /blog/list/p1001 不匹配
    • /blog/list 不匹配
    • /blog/list/1001/add 不匹配

动态路由,带验证函数

  • 格式: :param|validator...|,验证函数必须包裹在|
  • 备注: 框架自带常用验证函数,也可以自行定义
  • 示例: /blog/list/:id|isNum|less4|
    • /blog/list/1001 匹配,id="1001"
    • /blog/list/1000001 不匹配
    • /blog/list/p101 不匹配

动态路由,混合各种类型

  • 格式: :param(regexp)|validator...|
  • 示例: /blog/:id(^\d+$)|less4|
    • /blog/100 匹配
    • /blog/1001 不匹配

中间件

共有三种,添加方式如下

  • 应用级别中间件,作用在所有路由中
  • 组路由级别中间件,作用在该组路由中
  • 路由级别中间件,作用在当前路由中

Documentation

Overview

Package zeroapi 简单的 api 框架

Index

Constants

View Source
const (
	// MethodGet 请求指定的页面信息,并返回实体主体
	MethodGet = http.MethodGet

	// MethodPost 向指定资源提交数据处理请求,数据包含在请求体中
	MethodPost = http.MethodPost

	// MethodPut 从客户端向服务器传送数据,取代指定文档的内容。替换
	MethodPut = http.MethodPut

	// MethodDelete 请求服务器删除指定数据
	MethodDelete = http.MethodDelete

	// MethodConn 用于代理
	MethodConn = http.MethodConnect

	// MethodHead 类似于 GET 请求,但响应没有具体的内容,用于获取报头
	MethodHead = http.MethodHead

	// MethodPatch 类似于 PUT,但可能只包含部分数据。修改部分数据
	MethodPatch = http.MethodPatch

	// MethodOptions ..
	MethodOptions = http.MethodOptions

	// MethodTrace 回显服务器收到的请求
	MethodTrace = http.MethodTrace

	// MethodAny 同时注册 GET, POST, PUT, DELETE, HEAD, PATCH, OPTIONS
	MethodAny = "ANY"
)
View Source
const (
	// VERSION 框架版本号
	VERSION = "0.15.7"
)

Variables

This section is empty.

Functions

func AllMethods

func AllMethods() []string

AllMethods 所有 HTTP Method

Types

type App

type App interface {

	// Router 获取路由管理示例
	Router() Router

	// Server http 服务器
	Server() Server

	// Context 从 pool 中获取一个 Context
	Context() Context

	// ReleaseContext 将 Context 释放到 pool 中
	ReleaseContext(ctx Context)

	// Version 获取框架版本号
	Version() string

	// Logger 获取日志实例
	Logger() zerologger.Logger

	// MaxMemory 使用的最大内存
	MaxMemory() int64

	// IsCookieEncode cookie 是否需要进行编码
	IsCookieEncode() bool

	// CookieEncodeHandler 获取 cookie 编码函数
	CookieEncodeHandler() CookieEncodeHandler

	// CookieDecodeHandler 获取 cookie 解码函数
	CookieDecodeHandler() CookieDecodeHandler

	// Use 添加 App 级别 中间件,每一次路由都会调用公共中间件
	Use(handlers ...Handler)

	// ExecuteMiddlewares 执行 App 级别的中间件
	ExecuteMiddlewares(ctx Context)

	// Run 启动服务,此方法会阻塞,直到应用关闭
	// addr: host:port,例如: ":8080","192.168.1.8:80"
	Run(addr string) error

	RouterRegister
}

App 应用

type ContextBase added in v0.4.2

type ContextBase interface {
	// App 返回应用实例
	App() App

	// Reset 重置
	Reset(res http.ResponseWriter, req *http.Request)

	// Request 获取原始 http 请求
	Request() *http.Request

	// Response 获取 http 响应
	Response() Writer

	// Method 获取当前响应的 HTTP Method,比如 GET, POST ...
	Method() string

	// Path 请求路径
	Path() string

	// HTTPCode 获取 http 状态码,默认 200
	HTTPCode() int

	// HTTPCode 设置 http 状态码
	SetHTTPCode(code int)

	// IP 获取真实IP
	IP() string

	// IPs 获取 IP 数组,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP放到数组中
	IPs() []string

	// Protocol 获取协议版本,HTTP/1.1 or HTTP/2
	Protocol() string

	// Host ..
	Host() string

	// IsAjax 判断是否是 ajax 请求
	IsAjax() bool

	// Referer HTTP Referer
	Referer() string

	// UserAgent ..
	UserAgent() string

	// NotFound 路由未找到,设置 404
	NotFound()

	// IsStopped 判断是否处于停止状态
	// 比如 auth中间件判断未通过验证,就会调用 Stopped() 来停止继续向下调用
	IsStopped() bool

	// Stopped 设置停止状态
	Stopped()

	// Value 获取对应的自定义值
	Value(key string) interface{}

	// SetValue 设置对应的自定义值
	SetValue(key string, value interface{})
}

ContextBase 基础

type ContextCookie added in v0.4.2

type ContextCookie interface {

	// Cookie 获取 cookie 值
	Cookie(key string, opts ...CookieOption) (string, error)

	// SetCookie 设置 cookie,见 https://tools.ietf.org/html/rfc6265
	// key: cookie 参数名称
	// value: cookie 值
	// maxAge: 见 https://tools.ietf.org/html/rfc6265#section-4.1.2.2
	// 		 = 0: 表示不指定
	// 		 < 0: 表示立即删除
	// 		 > 0: cookie 生存时间,单位秒
	// domain: 见 https://tools.ietf.org/html/rfc6265#section-4.1.2.3
	// path: 见 https://tools.ietf.org/html/rfc6265#section-4.1.2.4
	// secure: 见 https://tools.ietf.org/html/rfc6265#section-4.1.2.5
	// httpOnly: 见 https://tools.ietf.org/html/rfc6265#section-4.1.2.6
	SetCookie(key, value string, opts ...CookieOption)

	// RemoveCookie 移除指定的 cookie
	RemoveCookie(key string, opts ...CookieOption)

	// SetHTTPCookie 设置原始的 cookie
	SetHTTPCookie(cookie *http.Cookie)

	// HTTPCookies 获取所有原始的 cookie
	HTTPCookies() []*http.Cookie
}

ContextCookie cookie 相关

type ContextDynamic added in v0.4.2

type ContextDynamic interface {
	// Dynamic 获取动态参数的值
	// 示例:
	// 定义路由: /blog/:id
	// 调用路由: /blog/1001
	// params = {id: "1001"}
	// Dynamic("id") -> 1001
	Dynamic(key string) string

	// SetDynamic 设置动态参数,key 的格式为 "param" 或者 ":param"
	SetDynamic(key string, value string) error

	// SetDynamics 替换动态参数
	SetDynamics(dynamics map[string]string)
}

ContextDynamic 动态参数

type ContextFile added in v0.4.2

type ContextFile interface {
	// File 获取上传文件信息
	File(key string) (multipart.File, *multipart.FileHeader, error)

	// Files 获取上传文件信息,可能有多个文件
	// cbs 在存盘前修改 multipart.FileHeader
	Files(destDirectory string, cbs ...func(Context, *multipart.FileHeader)) (int64, error)

	// DownloadFile 下载文件
	// path 文件路径
	// filename 文件名称
	DownloadFile(path string, filename ...string)
}

ContextFile 文件相关

type ContextGet added in v0.4.2

type ContextGet interface {
	// Get 获取指定参数的值
	// 多个参数同名,只获取第一个
	// 例如 /user?id=Yaha&id=Gama
	// Get("id") 的结果为 "Yaha"
	Get(key string) string

	// Gets 获取指定参数的所有值
	Gets(key string) []string

	// GetEscape 获取指定参数的值,并对被编码的结果进行解码
	GetEscape(key string) string

	// GetBool 获取指定参数的值,并将结果转为 bool
	GetBool(key string) bool

	// GetInt8 获取指定参数的值,并将结果转为 int8
	GetInt8(key string) int8

	// GetUint8 获取指定参数的值,并将结果转为 uint8
	GetUint8(key string) uint8

	// GetInt16 获取指定参数的值,并将结果转为 int16
	GetInt16(key string) int16

	// GetUint16 获取指定参数的值,并将结果转为 uint16
	GetUint16(key string) uint16

	// GetInt32 获取指定参数的值,并将结果转为 int32
	GetInt32(key string) int32

	// GetUint32 获取指定参数的值,并将结果转为 uint32
	GetUint32(key string) uint32

	// GetInt64 获取指定参数的值,并将结果转为 int64
	GetInt64(key string) int64

	// GetUint64 获取指定参数的值,并将结果转为 uint64
	GetUint64(key string) uint64

	// GetFloat32 获取指定参数的值,并将结果转为 float32
	GetFloat32(key string) float32

	// GetFloat64 获取指定参数的值,并将结果转为 float64
	GetFloat64(key string) float64

	// GetDefault 获取指定参数的值,如果不存在,则返回默认值 def
	GetDefault(key, def string) string

	// GetBoolDefault 获取指定参数的值(结果转为 bool),如果不存在,则返回默认值 def
	GetBoolDefault(key string, def bool) bool

	// GetInt32Default 获取指定参数的值(结果转为 int32),如果不存在,则返回默认值 def
	GetInt32Default(key string, def int32) int32

	// GetInt64Default 获取指定参数的值(结果转为 int64),如果不存在,则返回默认值 def
	GetInt64Default(key string, def int64) int64

	// GetFloat32Default 获取指定参数的值(结果转为 float32),如果不存在,则返回默认值 def
	GetFloat32Default(key string, def float32) float32

	// GetFloat64Default 获取指定参数的值(结果转为 float64),如果不存在,则返回默认值 def
	GetFloat64Default(key string, def float64) float64
}

ContextGet 只包括 GET

type ContextHeader added in v0.4.2

type ContextHeader interface {
	// Header 获取 http.Request 中 Header 指定参数的值
	Header(key string) string

	// AddHeader 添加响应头
	// header 该响应头有多个值 key = []string{value1, value2, ...}
	AddHeader(key, value string)

	// SetHeader 设置响应头
	// header 该响应头只有一个值 key = []string{value}
	SetHeader(key, value string)

	// DelHeader 移除响应中的 header
	DelHeader(key string)
}

ContextHeader ..

type ContextHook added in v0.4.2

type ContextHook interface {
	// AppendAfter 添加处理函数,这些函数 在中间件和路由函数执行完毕之后执行,如果中间有中断,则不会执行
	// 先入后出顺序执行,越先加入的函数越后执行
	AppendAfter(hook HookHandler)

	// AppendEnd 添加处理函数,这些函数 在处理都完成之后执行,无论中间是否有中断和异常,都会执行
	// 先入后出顺序执行,越先加入的函数越后执行
	AppendEnd(hook HookHandler)

	// RunAfter 执行通过 AppendAfter 加入的处理函数
	RunAfter()

	// RunEnd 执行通过 AppendEnd 加入的处理函数
	RunEnd()
}

ContextHook 钩子,一般用于中间件中

type ContextPost added in v0.4.2

type ContextPost interface {
	// Post 获取指定参数的值
	// 多个参数同名,只获取第一个
	// 例如 /user?id=Yaha&id=Gama
	// Post("id") 的结果为 "Yaha"
	Post(key string) string

	// PostStrings 获取指定参数的值
	// 例如 /user?id=Yaha&id=Gama
	// PostStrings("id") 的结果为 ["Yaha", "Gama"]
	PostStrings(key string) []string

	// PostEscape 获取指定参数的值,并对被编码的结果进行解码
	PostEscape(key string) string

	// PostBool 获取指定参数的值,并将结果转为 bool
	PostBool(key string) bool

	// PostInt8 获取指定参数的值,并将结果转为 int8
	PostInt8(key string) int8

	// PostUint8 获取指定参数的值,并将结果转为 uint8
	PostUint8(key string) uint8

	// PostInt16 获取指定参数的值,并将结果转为 int16
	PostInt16(key string) int16

	// PostUint16 获取指定参数的值,并将结果转为 uint16
	PostUint16(key string) uint16

	// PostInt32 获取指定参数的值,并将结果转为 int32
	PostInt32(key string) int32

	// PostUint32 获取指定参数的值,并将结果转为 uint32
	PostUint32(key string) uint32

	// PostInt64 获取指定参数的值,并将结果转为 int64
	PostInt64(key string) int64

	// PostUint64 获取指定参数的值,并将结果转为 uint64
	PostUint64(key string) uint64

	// PostFloat32 获取指定参数的值,并将结果转为 float32
	PostFloat32(key string) float32

	// PostFloat64 获取指定参数的值,并将结果转为 float64
	PostFloat64(key string) float64

	// PostDefault 获取指定参数的值,如果不存在,则返回默认值 def
	PostDefault(key, def string) string

	// PostBoolDefault 获取指定参数的值(结果转为 bool),如果不存在,则返回默认值 def
	PostBoolDefault(key string, def bool) bool

	// PostInt32Default 获取指定参数的值(结果转为 int32),如果不存在,则返回默认值 def
	PostInt32Default(key string, def int32) int32

	// PostInt64Default 获取指定参数的值(结果转为 int64),如果不存在,则返回默认值 def
	PostInt64Default(key string, def int64) int64

	// PostFloat32Default 获取指定参数的值(结果转为 float32),如果不存在,则返回默认值 def
	PostFloat32Default(key string, def float32) float32

	// PostFloat64Default 获取指定参数的值(结果转为 float64),如果不存在,则返回默认值 def
	PostFloat64Default(key string, def float64) float64
}

ContextPost 包括 POST, PUT, PATCH

type ContextQuery added in v0.4.2

type ContextQuery interface {
	// Query 获取指定参数的值
	// 多个参数同名,只获取第一个
	// 例如 /user?id=Yaha&id=Gama
	// Query("id") 的结果为 "Yaha"
	Query(key string) string

	// QueryAll 获取所有参数的值
	// 例如 /user?id=Yaha&id=Gama&age=18
	// QueryAll() 的结果为 {"id": ["Yaha", "Gama"], "age": ["18"]}
	QueryAll() map[string][]string

	// QueryStrings 获取指定参数的值
	// 例如 /user?id=Yaha&id=Gama
	// QueryStrings("id") 的结果为 ["Yaha", "Gama"]
	QueryStrings(key string) []string

	// QueryEscape 获取指定参数的值,并对被转码的结果进行还原
	QueryEscape(key string) string

	// QueryBool 获取指定参数的值,并将结果转为 bool
	QueryBool(key string) bool

	// QueryInt8 获取指定参数的值,并将结果转为 int8
	QueryInt8(key string) int8

	// QueryUint8 获取指定参数的值,并将结果转为 uint8
	QueryUint8(key string) uint8

	// QueryInt16 获取指定参数的值,并将结果转为 int16
	QueryInt16(key string) int16

	// QueryUint16 获取指定参数的值,并将结果转为 uint16
	QueryUint16(key string) uint16

	// QueryInt32 获取指定参数的值,并将结果转为 int32
	QueryInt32(key string) int32

	// QueryUint32 获取指定参数的值,并将结果转为 uint32
	QueryUint32(key string) uint32

	// QueryInt64 获取指定参数的值,并将结果转为 int64
	QueryInt64(key string) int64

	// QueryUint64 获取指定参数的值,并将结果转为 uint64
	QueryUint64(key string) uint64

	// QueryFloat32 获取指定参数的值,并将结果转为 float32
	QueryFloat32(key string) float32

	// QueryFloat64 获取指定参数的值,并将结果转为 float64
	QueryFloat64(key string) float64

	// QueryDefault 获取指定参数的值,如果不存在,则返回默认值 def
	QueryDefault(key, def string) string

	// QueryBoolDefault 获取指定参数的值(结果转为 bool),如果不存在,则返回默认值 def
	QueryBoolDefault(key string, def bool) bool

	// QueryInt8Default 获取指定参数的值(结果转为 int8),如果不存在,则返回默认值 def
	QueryInt8Default(key string, def int8) int8

	// QueryUint8Default 获取指定参数的值(结果转为 uint8),如果不存在,则返回默认值 def
	QueryUint8Default(key string, def uint8) uint8

	// QueryInt16Default 获取指定参数的值(结果转为 int16),如果不存在,则返回默认值 def
	QueryInt16Default(key string, def int16) int16

	// QueryUint16Default 获取指定参数的值(结果转为 uint16),如果不存在,则返回默认值 def
	QueryUint16Default(key string, def uint16) uint16

	// QueryInt32Default 获取指定参数的值(结果转为 int32),如果不存在,则返回默认值 def
	QueryInt32Default(key string, def int32) int32

	// QueryUint32Default 获取指定参数的值(结果转为 uint32),如果不存在,则返回默认值 def
	QueryUint32Default(key string, def uint32) uint32

	// QueryInt64Default 获取指定参数的值(结果转为 int64),如果不存在,则返回默认值 def
	QueryInt64Default(key string, def int64) int64

	// QueryUint64Default 获取指定参数的值(结果转为 uint64),如果不存在,则返回默认值 def
	QueryUint64Default(key string, def uint64) uint64

	// QueryFloat32Default 获取指定参数的值(结果转为 float32),如果不存在,则返回默认值 def
	QueryFloat32Default(key string, def float32) float32

	// QueryFloat64Default 获取指定参数的值(结果转为 float64),如果不存在,则返回默认值 def
	QueryFloat64Default(key string, def float64) float64
}

ContextQuery 包括 GET, POST, PUT

type ContextWrite added in v0.4.2

type ContextWrite interface {
	// Bytes 将数据写入响应
	Bytes(bytes []byte) (int, error)

	// Text 将数据写入响应中
	Text(value string) (int, error)

	// Textf 将数据写入响应中
	Textf(format string, a ...interface{}) error

	// Map map 转 text
	Map(obj interface{}) (int, error)

	// JSON 将数据转为 JSON 格式写入响应
	JSON(obj interface{}) (int, error)

	// XML 将数据转为 XML 格式写入响应
	XML(obj interface{}) (int, error)

	// HTML 发送 html 响应
	HTML(html string) (int, error)

	// HTMLf 发送 html 响应
	HTMLf(format string, a ...interface{}) (int, error)

	// Protobuf 将数据装为 google protobuf 格式,写入响应
	Protobuf(obj interface{}) (int, error)

	// Size 响应的数据大小
	Size() int64

	// Redirect 重定向
	// httpCode: HTTP Code, 需要在 3xx 范围内, 比如 301, 302, 303 ... 308
	// url: 重定向后的地址
	Redirect(httpCode int, url string) error

	// Flush 将数据推向客户端
	Flush()

	// Push HTTP/2 服务器推送
	Push(value string, opts *http.PushOptions) error

	// AutoContentType 根据给定的文件类型,自动设置 Content-Type
	// .json -> app/json
	// fileExt: 文件后缀名,例如 .json
	AutoContentType(fileExt string)

	// Message 传递 {"code": xx, "message": xxx}
	Message(code int, message ...string) (int, error)
}

ContextWrite 响应相关

type CookieDecodeHandler

type CookieDecodeHandler func(s string) (string, error)

CookieDecodeHandler cookie 编码与解码函数

type CookieEncodeHandler

type CookieEncodeHandler func(s string) string

CookieEncodeHandler cookie 编码与解码函数

type CookieOption

type CookieOption func(cookie *http.Cookie) error

CookieOption cookie 选项

type Group

type Group interface {
	// Use 添加 Group 级别 中间件
	Use(handlers ...Handler) Group

	// Get method = "GET"
	Get(path string, handlers ...Handler) Group

	// Post method = "POST"
	Post(path string, handlers ...Handler) Group

	// Put method = "PUT"
	Put(path string, handlers ...Handler) Group

	// Delete method = "DELETE"
	Delete(path string, handlers ...Handler) Group

	// Head method = "HEAD"
	Head(path string, handlers ...Handler) Group

	// Patch method = "PATCH"
	Patch(path string, handlers ...Handler) Group

	// Options method = "OPTIONS"
	Options(path string, handlers ...Handler) Group
}

Group 组路由,相同前缀的一组路由,共享相同的中间件

type Handler

type Handler func(ctx Context)

Handler 处理函数

type HookHandler

type HookHandler func() error

HookHandler 钩子处理函数,用于中间件开发,响应 ctx.afters, ctx.ends

type RouteNode

type RouteNode interface {
	// Put 添加路由,路由不可重复
	Put(fullPath string, paths []string, height int, handlers ...Handler)

	// Build 解析路由,包括动态参数,正则表达式,验证函数。路由优化
	Build(router Router) bool

	// Lookup 查找路由
	Lookup(path string, dynamic map[string]string) ([]Handler, map[string]string)

	// Path 获取当前节点路径
	Path() string

	// Child 查找节点信息
	Child(path string) RouteNode

	// Children 获取节点列表
	Children() []RouteNode

	// Handlers 获取路由处理函数和中间件
	Handlers() []Handler

	// Reset 重置,清理所有数据
	Reset()

	RouteNodeInternal
}

RouteNode 一颗基数树的一个节点

type RouteNodeInternal

type RouteNodeInternal interface {

	// IsStatic 静态路由
	IsStatic() bool

	// IsDynamic 含有动态参数
	IsDynamic() bool

	// IsWildcard 含有通配符
	IsWildcard() bool

	// IsRegexp 含有正则表达式
	IsRegexp() bool

	// IsValidator 含有验证函数
	IsValidator() bool

	// IsHandler 是否有路由处理函数或者中间件
	IsHandler() bool

	// Flag 获取标记
	Flag() int

	// DynamicNum 获取动态节点数量
	DynamicNum() int
}

RouteNodeInternal 内部使用的一些接口

type Router

type Router interface {

	// Prefix 设置前缀,设置前就已添加的路由不会有该前缀
	// 例如: prefix = "/blog",则 "/user" -> "/blog/user"
	Prefix(prefix string)

	// Register 注册路由处理函数,以及中间件
	// method: HTTP Method,见 core/const.go Methodxxxx
	// path: 路径,以 "/" 开头,不可以为空
	// handles: 处理函数和路由级别中间件,匹配成功后会调用该函数
	Register(method, path string, handlers ...Handler) bool

	// Build 解析路由,包括动态参数,正则表达式,验证函数
	Build() bool

	// Lookup 查找路由
	Lookup(method, path string) ([]Handler, map[string]string)

	// RegisterRouterValidator 注册路由验证函数
	RegisterRouterValidator(name string, validator RouterValidator)

	// Validator 获取路由验证函数
	Validator(name string) RouterValidator
}

Router 路由管理器

type RouterRegister

type RouterRegister interface {
	// Prefix 设置前缀,设置前就已添加的路由不会有该前缀
	// 例如: prefix = "/blog",则 "/user" -> "/blog/user"
	Prefix(prefix string) App

	// Get method = "GET"
	// path: 路径,以 "/" 开头,不可以为空
	// handlers: 路由级别中间件和处理函数
	Get(path string, handlers ...Handler) App

	// Post method = "POST"
	// path: 路径,以 "/" 开头,不可以为空
	// handlers: 路由级别中间件和处理函数
	Post(path string, handlers ...Handler) App

	// Put method = "PUT"
	// path: 路径,以 "/" 开头,不可以为空
	// handlers: 路由级别中间件和处理函数
	Put(path string, handlers ...Handler) App

	// Delete method = "DELETE"
	// path: 路径,以 "/" 开头,不可以为空
	// handlers: 路由级别中间件和处理函数
	Delete(path string, handlers ...Handler) App

	// Head method = "HEAD"
	// path: 路径,以 "/" 开头,不可以为空
	// handlers: 路由级别中间件和处理函数
	Head(path string, handlers ...Handler) App

	// Patch method = "PATCH"
	// path: 路径,以 "/" 开头,不可以为空
	// handlers: 路由级别中间件和处理函数
	Patch(path string, handlers ...Handler) App

	// Options method = "OPTIONS"
	// path: 路径,以 "/" 开头,不可以为空
	// handlers: 路由级别中间件和处理函数
	Options(path string, handlers ...Handler) App

	// Group 创建组路由实例
	Group(path string) Group

	// Static 添加静态资源服务
	// prefix 静态资源路由前缀
	// path 资源真实位置(绝对路径,相对路径)
	Static(prefix, path string)
}

RouterRegister 路由注册相关接口

type RouterValidator

type RouterValidator func(s string) bool

RouterValidator 验证函数

type Server

type Server interface {
	http.Handler

	// Start 根据配置调用 ListenAndServe 或者 ListenAndServeTLS 启动 http 服务,接收连接请求
	// addr: host:port,例如: ":8080","192.168.1.8:80"
	Start(addr string) error

	// HTTPServer 实际使用的 http 服务器
	HTTPServer() zerograceful.Server

	// SetTLS 指定 tls 证书,密钥路径
	// certFile: 证书路径
	// keyFile: 私钥路径
	SetTLS(certFile, keyFile string) bool

	// SetShutdownTimeout 设置优雅退出超时时间
	// 服务器会每隔500毫秒检查一次连接是否都断开处理完毕
	// 如果超过超时时间,就不再检查,直接退出
	//
	// ms: 单位:毫秒,当 <= 0 时无效,直接退出
	SetShutdownTimeout(ms int)

	// RegisterShutdownHandler 注册关闭函数
	// 按照注册的顺序调用这些函数
	// 所有已经添加的服务器都会响应这个函数
	RegisterShutdownHandler(f func())
}

Server http 服务器

type Writer added in v0.2.0

type Writer interface {
	http.ResponseWriter

	Writer() http.ResponseWriter

	SetWriter(w http.ResponseWriter)
}

Writer 实现 http.ResponseWriter

Directories

Path Synopsis
_examples

Jump to

Keyboard shortcuts

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