zdpgo_api

package module
v1.1.4 Latest Latest
Warning

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

Go to latest
Published: May 16, 2022 License: MIT Imports: 16 Imported by: 0

README

zdpgo_api

基于gin二次封装的一个后端api快速开发框架

项目地址:https://github.com/zhangdapeng520/zdpgo_api

版本历史

  • v1.0.0 2022/2/9
  • v1.0.1 2022/2/11 指定默认模板目录template和默认静态文件夹目录static
  • v1.0.2 2022/2/11 移除本地依赖
  • v1.0.3 2022/2/11 新增日志中间件和recover中间件
  • v1.0.4 2022/3/8 优化模板和静态目录
  • v1.0.5 2022/3/8 增加常用的统一返回对象
  • v1.0.6 2022/3/8 将挂载通用路由设置为开关量
  • v1.0.7 2022/3/10 支持配置服务相关参数
  • v1.0.8 2022/3/10 支持viper读取和设置配置
  • v1.0.9 2022/3/11 logger日志支持配置
  • v1.1.0 2022/3/12 修复日志不打印body
  • v1.1.1 2022/4/8 新增详细日志
  • v1.1.2 2022/4/11 详细日志升级,支持查看的具体Body中的JSON数据
  • v1.1.3 2022/4/21 文件上传
  • v1.1.4 2022/5/18 新增:Api核心对象

示例

基本用法
package main

import (
	"github.com/zhangdapeng520/zdpgo_api"
	"net/http"

	"github.com/zhangdapeng520/zdpgo_api/gin"
)

// 模拟数据库
var db = make(map[string]string)

// 设置路由
func setupRouter() *zdpgo_api.Api {
	api := zdpgo_api.NewWithConfig(zdpgo_api.Config{
		Debug: true,
	})

	// GET ping路由
	api.App.GET("/ping", func(c *gin.Context) {
		c.String(http.StatusOK, "pong")
	})

	// Get 用户名
	api.App.GET("/user/:name", func(c *gin.Context) {
		// 获取路径参数
		user := c.Params.ByName("name")

		// 返回
		c.JSON(http.StatusOK, gin.H{"user": user})
	})

	// 基本的权限校验路由
	authorized := api.App.Group("/", gin.BasicAuth(gin.Accounts{
		"foo":  "bar", // user:foo password:bar
		"manu": "123", // user:manu password:123
	}))

	// POST请求
	authorized.POST("admin", func(c *gin.Context) {
		user := c.MustGet(gin.AuthUserKey).(string)

		// Parse JSON
		var json struct {
			Value string `json:"value" binding:"required"`
		}

		if c.Bind(&json) == nil {
			db[user] = json.Value
			c.JSON(http.StatusOK, gin.H{"status": "ok"})
		}
	})

	return api
}

func main() {
	r := setupRouter()
	// 监听地址 http://localhost:3333/ping?a=111&b=222#abc
	// 监听地址 http://localhost:3333/user/zhangdapeng
	r.Run()
}
基本权限校验
package main

import (
	"github.com/zhangdapeng520/zdpgo_api"
	"github.com/zhangdapeng520/zdpgo_api/gin"
)

// 用户列表
var secrets = gin.H{
	"zhangdapeng": gin.H{"email": "zhangdapeng@qq.com", "phone": "123433"},
}

func getSecrets(c *gin.Context) {
	// 获取用户名
	user := c.MustGet(gin.AuthUserKey).(string)

	// 取出数据
	if secret, ok := secrets[user]; ok {
		c.JSON(200, gin.H{"user": user, "secret": secret})
	} else {
		c.JSON(200, gin.H{"user": user, "secret": "No SECRET :("})
	}
}

func main() {
	api := zdpgo_api.NewWithConfig(zdpgo_api.Config{Debug: true})

	// 创建权限校验路由分组
	authorized := api.GetBasicAuthGroup("/admin", map[string]string{"zhangdapeng": "zhangdapeng"})

	// 校验接口
	authorized.GET("/secrets", getSecrets)

	// 启动服务。访问:http://localhost:3333/admin/secrets
	api.Run()
}
文件上传
package main

import (
	"github.com/zhangdapeng520/zdpgo_api"
)

func main() {
	api := zdpgo_api.NewWithConfig(zdpgo_api.Config{Debug: true})
	api.AddUploadRouter("/upload", "file", "uploads")
	api.Run()
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewGinWithLog

func NewGinWithLog(isDetailLogger bool) *gin.Engine

NewGinWithLog 根据是否使用详细日志创建Gin的实例 @param isDetailLogger 是否使用详细日志,开启后,会记录请求头,form,body的详细信息

Types

type Api added in v1.1.4

type Api struct {
	Config *Config        // 配置对象
	Log    *zdpgo_log.Log // 日志对象
	App    *gin.Engine    // 核心App对象
}

Api API核心对象

func New added in v1.1.4

func New() *Api

New 使用默认配置创建API

func NewWithConfig added in v1.1.4

func NewWithConfig(config Config) *Api

NewWithConfig 根据配置创建API

func (*Api) AddCorsMiddleware added in v1.1.4

func (a *Api) AddCorsMiddleware()

AddCorsMiddleware 添加跨域中间件

func (*Api) AddUploadRouter added in v1.1.4

func (a *Api) AddUploadRouter(
	routerPath string,
	fileName string,
	saveDir string,
	handleResultList ...func(c *gin.Context, file *multipart.FileHeader, err error))

AddUploadRouter 添加文件上传路由 @param routerPath 路由路径,比如:/upload @param fileName 上传文件的表单名称,比如:file @param saveDir 文件的上传路径,比如:./uploads @param handleResultList 处理结果的方法列表,用户可以自定义文件上传后的返回内容,处理错误信息

func (*Api) CreateDirs added in v1.1.4

func (a *Api) CreateDirs(filePath string) error

CreateDirs 调用os.MkdirAll递归创建文件夹

func (*Api) GetBasicAuthGroup added in v1.1.4

func (a *Api) GetBasicAuthGroup(routerPath string, accounts map[string]string) (group *gin.RouterGroup)

GetBasicAuthGroup 获取基本权限校验路由组

func (*Api) InitValidator added in v1.1.4

func (a *Api) InitValidator() (err error)

InitValidator 初始化校验器

func (*Api) IsExists added in v1.1.4

func (a *Api) IsExists(path string) bool

IsExists 判断所给路径文件/文件夹是否存在(返回true是存在)

func (*Api) Run added in v1.1.4

func (a *Api) Run(exitFuncList ...func())

Run 运行APP

func (*Api) SetApp added in v1.1.4

func (a *Api) SetApp(app *gin.Engine)

SetApp 设置APP

func (*Api) Validate added in v1.1.4

func (a *Api) Validate(data interface{}) (errData map[string]string)

Validate 校验结构体

type Config added in v1.1.4

type Config struct {
	Debug          bool   `yaml:"debug" json:"debug"`                       // 是否为debug模式
	LogFilePath    string `yaml:"log_file_path" json:"log_file_path"`       // 日志路径
	Host           string `yaml:"host" json:"host"`                         // 启动地址,默认0.0.0.0
	Port           int    `yaml:"port" json:"port"`                         // 启动端口号,默认3333
	UploadFileSize int64  `yaml:"upload_file_size" json:"upload_file_size"` // 上传文件大小限制(M),默认33
}

Directories

Path Synopsis
core
examples
basic command
basic_auth command
file_upload command
grpc/api command
grpc/grpc command
grpc/pb
Package helloworld is a generated protocol buffer package.
Package helloworld is a generated protocol buffer package.
validator command
gin
Package api implements a HTTP web framework called api.
Package api implements a HTTP web framework called api.
Package validator implements value validations for structs and individual fields based on tags.
Package validator implements value validations for structs and individual fields based on tags.
Package yaml implements YAML support for the Go language.
Package yaml implements YAML support for the Go language.

Jump to

Keyboard shortcuts

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