GithubHelp home page GithubHelp logo

fuyong08 / apiserver-gin Goto Github PK

View Code? Open in Web Editor NEW

This project forked from xmgtony/apiserver-gin

0.0 0.0 0.0 322 KB

生产级可用golang api服务端(基于gin)

License: MIT License

Shell 2.46% Go 96.28% Makefile 1.26%

apiserver-gin's Introduction

apiserver-gin

基于gin的api服务端脚手架。 gin在Go web开发中是相当受欢迎的,但是gin也是一个轻量级web框架,并不能像其他语言比如java的spring框架具有丰富的生态和标准,在实际开发中需要自己设计和添加一些额外的能力,来完善应用,比如:request_id透传,依赖注入,日志打印分割,session管理,全局错误处理,编译打包等等。

本项目布局为传统的MVC模式,适用于大部分业务api服务端开发。参考了行业流行框架,争取做到每一个文件,每一个目录位置有对应的理论依据支撑。

布局参考project-layout,该项目非Go官方标准,但是已经是行业主流。

理论基础

清洁架构 (Robert C. Martin)

image

按照依赖注入,面向对象编程**,开闭原则,可拓展,可测性等原则来规划项目。

更新日志

2023-06-29:增加事务支持,多个service方法可以放在一个事务里执行,使用方式参考 internal/service/tx_demo.go 文件。

2023-03-04:调整依赖注入wire.go实现,wire解决复杂依赖较为困难,每次对代码有破坏性更改,改为使用传参解决。

2022-05-27:添加新的演示功能,用户记账,用于演示脚手架多个router,handler,service的使用,详情见使用文档,升级viper版本,解决依赖安全问题。

2022-04-01:拆分中间件和路由,不放在一起,便于团队开发时多人维护,比如用户模块的开发人员维护user_router.go,商品模块人员维护goods_router.go互相不影响,便于拓展,详情参考cmd/wire.go

2022-03-29:校验器validator支持中文,支持自定义标签,替换了gin默认validator实现,不用每次校验错误后,再翻译成中文,根据配置直接返回中文提示信息,api接口不用处理error翻译。
具体实现查看pkg/validator包,接口演示查看登录接口。详细使用文档-点这里

2022-03-15:实现日志requestId等透传,使用示例 pkg/log/log_test.go

2022-03-11:wire依赖注入工具引入,升级jwt组件。

2022-02-22:按照清洁架构及实际项目使用经验重新规划项目结构。

目前整合组件及实现功能

  • 加入viper使用yml配置文件来配置项目信息,启动时指定不同的配置文件
# 直接运行
# eg. 在cmd目录下执行(也可以在其他目录执行,注意配置文件路径,默认寻找当前执行路径下conf目录中的config.yml文件)
>$ go run . -c ../conf/config.yml

# 使用make
# 1、打包(Linux/MacOS 下),在项目目录下执行make命令,打好的包在target目录下
>$ make 
# 2、删除已打的包
>$ make clean
  • 优雅停机实现,停机时清理资源。
  • 集成gorm 并自定义JsonTime 解决Json序列化和反序列化只支持UTC时间的问题(可以自定义时间格式)
    提供了部分demo,可以按照demo在项目中直接使用。
  • 整合redis,开箱即用,通过yml文件对redis进行配置
  • 整合zap,lumerjack 完善日志输出,日志分割。
  • 集成jwt,提供demo代码,自定义授权失败成功等的响应格式,跟全局api响应格式统一
  • 实现session管理
  • md5, bcrypt和uuid生成工具包
  • 应用统一封装响应格式,参照笔者参与的大型项目经验和规范。
  • 项目全局错误码封装,go的error封装。
  • 应用统一入口日志记录中间件实现,日志log_id透传。
  • 添加makefile,可以使用make 命令进行编译,打包。
  • 完善了项目版本管理,使用make命令编译后的项目可以方便跟踪线上发布版本
  • 其他一些坑,后续会出一系列配置与使用教程。

特别感谢JetBrains对开源项目支持

JetBrains

apiserver-gin's People

Contributors

xmgtony avatar dependabot[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.