初始化
rest.Server 提供一个 HTTP API Gateway, 其可以通过 rest.MustNewServer(RestConf) 进行初始化。
func MustNewServer(c RestConf, opts ...RunOption) *Server
其中 RestConf 相关定义可以参考 rest.RestConf,其定义了一批 HTTP 启动所需要的基本参数。
同时 RunOption 方法提供可扩展方法。目前支持如下几种:
请求认证鉴权失败的回调
WithUnauthorizedCallback(handler.UnauthorizedCallback) RunOption
请求签名失败的回调
WithUnsignedCallback(handler.UnauthorizedCallback) RunOption
自定义路由实现,默认采用的是 router.PatRouter
WithRouter(router httpx.Router) RunOption
路由
go-zero 的路由实现是基于 serach.Tree 实现的。 路由可以通过如下的方式注册进去:
engine := reset.MustNewServer(c) engine.AddRoute(ngin.Route{ Method: http.MethodPost, Path: "/user/login", Handler: login.LoginHandler(), })
Server 提供了2种方式,可以单条和批量的添加路由:
// 批量添加 func (e *Server) AddRoutes(rs []Route, opts ...RouteOption) // 单条添加 func (e *Server) AddRoute(r Route, opts ...RouteOption)
Route
Route 是路由的一个基本单位,里面包含的参数如下:
param | 说明 |
Mehtod | 请求方式 GET|POST|PUT|DELETE |
Path | 路由地址 |
Handler | 处理器 |
RouteOption
RouteOption 是对路由的一个扩展可选参数,目前支持如下几种:
WithJwt
func WithJwt(secret string) RouteOption
添加 Jwt 认证鉴权,具体可以参考 handler.Authorize
WithJwtTransition
func WithJwtTransition(secret, prevSecret string) RouteOption
添加 Jwt 认证鉴权,支持 2 个 secret。 当旧的 secret 需要弃用更新成新的时候,用于在 2 个 secret 过渡期间使用。
WithPriority
func WithPriority() RouteOption
定义路由优先级,如果在服务 cpu 负载较高时,优先保证这些路由的正常使用,优先级低的将会优先丢弃。
WithSignature
func WithSignature(signature SignatureConf) RouteOption
定义了路由的签名方式,具体参考 handler.ContentSecurityHandler
Start 和 Stop
HTTP API Server 开始和停止的方法。
func (e *Server) Start() func (e *Server) Stop()
添加自定义中间件
go-zero 支持添加自定义中间件功能,可以使用下面的方法进行添加
func (e *Server) Use(middleware Middleware)
例如以下代码:
func first(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { w.Header().Add("X-Middleware", "first") next(w, r) } } engine.Use(first)