XEcho

package
v1.2.8 Latest Latest
Warning

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

Go to latest
Published: Jan 30, 2021 License: MIT Imports: 13 Imported by: 0

README

Echo Web Engine Starter

基于 https://github.com/labstack/echo/v4

Echo Documentation

Documentation https://echo.labstack.com/guide

中文文档 http://echo.topgoer.com

Starter Usage

1、实现IApi接口,以模块方式注册实现的API

模块接口需实现 IApi interface

// 每个模块服务应该实现的接口
type IApi interface {
	SetRoutes() // 模块服务应该实现的方法,各模块启动器设置相应路由
}

以下为API模块简单示例:

// 包初始化时注册API模块
func init() {
	// 初始化时自动注册该API到Gin Engine
	XGin.RegisterApi(new(SimpleApi))
}

/*定义一个简单的API实现IApi接口,注册到gin引擎*/
type SimpleApi struct {
	// TODO binding service
}

// SetRouter由Gin Engine 启动时调用
func (s *SimpleApi) SetRoutes() {
	// TODO set api routes

	XEngine().GET("simple/foo", s.Foo)
	XEngine().GET("simple/bar", s.Bar)
}

func (s *SimpleApi) Foo(ctx *echo.Context) {
	// TODO call service's method to doing biz logic
	fmt.Println("Call Foo service's method to complete the biz implementation")
	ctx.JSON(200, gin.H{
		"status":  "ok",
		"message": "Call Foo service's method to complete the biz implementation",
	})
}

func (s *SimpleApi) Bar(ctx *echo.Context) {
	// TODO call service's method to doing biz logic
	fmt.Println("Call Bar service's method to complete the biz implementation")
	ctx.JSON(200, gin.H{
		"status":  "ok",
		"message": "Call Bar service's method to complete the biz implementation",
	})
}

2、应用层中定义需要的中间件,并注册启动器

...
echoStarter := XEcho.NewStarter()

// 添加路由前中间件
preMW := make([]echo.MiddlewareFunc,0)
// ...
echoStarter.SettingPreMiddleware(preMW...)

// 添加路由后中间件
useMW := make([]echo.MiddlewareFunc,0)
// ...
echoStarter.SettingUseMiddleware(useMW...)

goinfras.RegisterStarter(echoStarter)

以下为echo框架内部提供的中间件,可做参考:

/* echo内置的中间件 */
/* =======  Root Level (Before router) ======= */
// Add trailing slash 会在在请求的 URI 后加上反斜杠
engine.Pre(middleware.AddTrailingSlash())

// Remove trailing slash 会在在请求的 URI 后去掉反斜杆
engine.Pre(middleware.RemoveTrailingSlash())

// Method Override 检查从请求中重写的方法,并使用它来代替原来的方法。出于安全原因,只有 POST 方法可以被重写。
engine.Pre(middleware.MethodOverride())

/* ======= Root Level (After router) =======*/
// Body Limit 中间件用于设置请求体的最大长度,如果请求体的大小超过了限制值,则返回 "413 - Request Entity Too Large" 响应。
// 该限制的判断是根据 Content-Length 请求标头和实际内容确定的,这使其尽可能的保证安全。
engine.Use(middleware.BodyLimit("2M"))

// Body dump 中间件通常在调试 / 记录的情况下被使用,它可以捕获请求并调用已注册的处理程序 (handler) 响应有效负载。
// 然而,当您的请求 / 响应有效负载很大时(例如上传 / 下载文件)需避免使用它;但如果避免不了,可在 skipper 函数中为端点添加异常。
engine.Use(middleware.BodyDump(nil))

// Logger 中间件记录有关每个 HTTP 请求的信息。
engine.Use(middleware.Logger())

// Gzip 中间件使用 gzip 方案来对 HTTP 响应进行压缩
engine.Use(middleware.Gzip())

// Recover 中间件从 panic 链中的任意位置恢复程序, 打印堆栈的错误信息,并将错误集中交给 HTTPErrorHandler 处理。
engine.Use(middleware.Recover())

// JWT 提供了一个 JSON Web Token (JWT) 认证中间件。
// 对于有效的 token,它将用户置于上下文中并调用下一个处理程序。
// 对于无效的 token,它会发送 "401 - Unauthorized" 响应。
// 对于丢失或无效的 Authorization 标头,它会发送 "400 - Bad Request" 。
engine.Use(middleware.JWT("Secret Key"))

// Secure 中间件用于阻止跨站脚本攻击(XSS),内容嗅探,点击劫持,不安全链接等其他代码注入攻击
engine.Use(middleware.Secure())

// CORS (Cross-origin resource sharing) 中间件实现了 CORS 的标准。
// CORS为Web服务器提供跨域访问控制,从而实现安全的跨域数据传输。
engine.Use(middleware.CORS())

// CSRF (Cross-site request forgery) 跨域请求伪造,也被称为 one-click attack 或者 session riding,
// 通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
// 跟跨网站脚本 (XSS) 相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任
engine.Use(middleware.CSRF())

// Static 中间件可已被用于服务从根目录中提供的静态文件。
engine.Use(middleware.Static("/static"))

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AuthMiddleware

func AuthMiddleware() echo.MiddlewareFunc

用户鉴权中间件

func CreateDefaultEngine

func CreateDefaultEngine(config *Config)

func ErrorMiddleware

func ErrorMiddleware() echo.MiddlewareFunc

func LoggerMiddleware

func LoggerMiddleware() echo.MiddlewareFunc

func NewEchoEngine

func NewEchoEngine(config *Config) *echo.Echo

func NewStarter

func NewStarter() *starter

func RecoveryMiddleware

func RecoveryMiddleware(stack bool) echo.MiddlewareFunc

func RegisterApi

func RegisterApi(module IApi)

注册WEB API初始化对象

func XEngine

func XEngine() *echo.Echo

Types

type ApiRegister

type ApiRegister struct {
	// contains filtered or unexported fields
}

API模块注册器

func (*ApiRegister) Register

func (register *ApiRegister) Register(module IApi)

注册API模块

type Config

type Config struct {
	Debug             bool   // 调试模式
	ListenHost        string // 服务运行ip
	ListenPort        int    // 服务运行端口
	Tls               bool   // HTTPS相关配置,开关
	CertFile          string // HTTPS相关配置,证书文件
	KeyFile           string // HTTPS相关配置,私匙文件
	UseSelfMiddleware bool   // 该启动器默认提供Logger、Recovery、Error三个初始化的中间件,如需重新自定义,设置为true
}

func DefaultConfig

func DefaultConfig() *Config

默认最小启动配置

type IApi

type IApi interface {
	SetRoutes() // 模块服务应该实现的方法,各模块启动器设置相应路由
}

每个模块服务应该实现的接口

func GetApis

func GetApis() []IApi

获取注册的web api初始化对象

Jump to

Keyboard shortcuts

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