Go示例项目以最佳实践了解Mysql Crud操作
使用Gorilla/Mux Uber/Zap Lumberjack与MySQL (一个不错的关系数据库),JWT Authentication使用Gorilla/Mux Uber/ZAP Lumberjack一起使用的生产准备样本书店Restful API。该项目包含Swagger 2.0(又名OpenAPI 2.0)的Golang实施:它知道如何序列化和挑选宣传规格。
# Download this project
git clone github.com/err-him/go-book-store-api在运行API服务器之前,您应该将数据库配置设置为使用您的数据库配置,或在DB/EVV.LOCAL.JSON上设置您的数据库配置
{
"host" : "127.0.0.1",
"port" : "3306",
"uname" : "root",
"dbname" : "book_store",
"pass" : "root"
}
步骤1:根据Dockerfile创建Docker映像。确保在构建系统上安装了Docker-Compose。有关如何执行此操作的详细信息,请参见:https://docs.docker.com/compose/install/
# This may take a few minutes.
$ docker-compose up -d这将分别在GO和MySQL的背景中创建两个容器
步骤2:。以上过程将创建两个独立的容器和DB用于应用程序,以自动填充DB运行中的一些数据
$ cat db.sql | docker exec -i full_db_mysql /usr/bin/mysql -u root --password=root book_store
步骤3:打开另一个终端并访问示例API端点。
$ curl http://localhost:9002/health
{ " status " : " up " }重要说明:设置Docker时,将数据库主机从127.0.0.1更改为book-store-mysql因为在创建docker映像时,我们正在证明主机名称book-store-mysql else否则请使用127.0.0.1如果运行或进行运行
大猩猩/mux用于设置路由。它提供了一些功能强大的功能,例如分组/中间件/处理程序等。
v1 := r.PathPrefix("/api/v1").Subrouter()
v1.HandleFunc("/genre/create", genreHandler.CreateGenre).Methods(http.MethodPost)
v1.HandleFunc("/genre/update", genreHandler.UpdateGenre).Methods(http.MethodPut)
v1.HandleFunc("/genre/get/all", genreHandler.GetAll).Methods(http.MethodGet)
v1.HandleFunc("/genre/get/{id}", genreHandler.GetOne).Methods(http.MethodGet)
v1.HandleFunc("/genre/delete/{id}", genreHandler.Delete).Methods(http.MethodDelete)
mySQL用作数据库数据库/sql和github.com/go-sql-driver/mysql模块来创建和管理数据库连接
# Build and Run
cd go-book-store-api
make build # Build and Run
cd go-book-store-api
make APP_ENV= " local " run
# API Endpoint : http://127.0.0.1:9002 main.go -> Entry point of application
config -> folder to store all connection and routing related logic
config/app.go -> app run/db connection and routing Initialize
config/routes.go -> app routing defined here
config/driver/db.go -> mysql connection established Here
config/properties -> all application properties in JSON form stored Here, to read config file **https://github.com/err-him/gonf** package used
logger -> Folder contains application logging logic
logger/zap.go -> This contains the logger implementation logic. To implement **uber/zap** logger with **lumberjack** a log rolling package **https://github.com/err-him/gozap** package is being used
api -> Api package is used to receive an incoming request, validate the request for any bad input parameters. Generate a proper response after running our business logic.
api/constants -> contains all application related constants like http etc
api/controllers -> Contains handler functions for particular route to be called when an api is called.
api/models -> database tables to be used as models struct and interface provided for the repositories
api/handler -> basically contains the helper functions used in returning api responses, HTTP status codes, default messages etc.
api/repositories -> repository package is a wrapper on database and cache, so no other package can directly access the database. This package handle all create, update, fetch and delete operation on database tables or cache.
api/utils -> contains all application utility function.
db.sql -> file contains db schema and data information, dumped data from mysql
command for dump database => `mysqldump -u root -p book_store > /Users/himanshu/go-learning/book-store-api/db.sql`
swagger.yml -> swagger API documentation configuration
OpenAPI规范(以前是Swagger规范)是REST API的API描述格式。 OpenAPI文件允许您描述整个API,包括:
/users )和每个端点上的操作( GET /users , POST /users )API规格可以用YAML或JSON编写。该格式易于学习,并且对于人类和机器都可以阅读。可以在GitHub上找到完整的OpenAPI规范:OpenAPI 2.0规格,OpenAPI 3.0规格
Swagger是围绕OpenAPI规范构建的一系列开源工具,可以帮助您设计,构建,文档和消费REST API。主要的Swagger工具包括:Swagger允许您描述API的结构,以便机器可以阅读它们。 API描述自己的结构的能力是Swagger中所有令人敬畏的根源。
Swagger可以用JSON或YAML写。在本指南中,我们仅使用YAML示例,但是JSON的工作方式同样效果很好。用yaml编写的样本摇摇欲坠的规范看起来像:
swagger : " 2.0 "
info :
title : Sample API
description : API description in Markdown.
version : 1.0.0
host : api.example.com
basePath : /v1
schemes :
- https
paths :
/users :
get :
summary : Returns a list of users.
description : Optional extended description in Markdown.
produces :
- application/json
responses :
200 :
description : OK 该项目包含Swagger 2.0(又名OpenAPI 2.0)的Golang实施:它知道如何序列化和挑选宣传规格。
go-swagger为Go社区带来了一套完整的功能齐全,高性能的API组件,可与Swagger API一起使用
安装Go Swagger以在Mac中安装Go Skagger
brew tap go-swagger/go-swagger
brew install go-swagger
安装完成后,请访问Project Repo,并通过以下命令生成Swagger文档
swagger serve -F=swagger ./swagger.yml
还为同一制作了不错的makefile,以通过“制作输入”运行: make serve-swagger
** Swagger UI ** 






该项目包含Swagger 2.0(又名OpenAPI 2.0)的Golang实施:它知道如何序列化和挑选宣传规格。
go-swagger为Go社区带来了一套完整的功能齐全,高性能的API组件,可与Swagger API一起使用
安装Go Swagger以在Mac中安装Go Skagger
brew tap go-swagger/go-swagger
brew install go-swagger
安装完成后,请访问Project Repo,并通过以下命令生成Swagger文档
swagger serve -F=swagger ./swagger.yml
还为同一制作了不错的makefile,以通过“制作输入”运行: make serve-swagger
** Swagger UI ** 






POST :创建类型PUT :更新类型GET :获得所有活跃的类型GET :获取一种类型 - 由ID或类型slug指定DELETE :delete类型 - 通过指定ID或slug删除软删除POST :创建发布者PUT :更新发布者GET :获取所有活跃的出版商GET :获取一个发布者 - 由ID或流派slug指定DELETE :delete Publisher-软删除由指定的ID或slug POST :创建作者PUT :更新作者GET :获得所有活跃作者GET :获取一位作者 - 由ID或流派slug指定DELETE :删除作者 - 通过指定ID或slug删除软删除POST :创建书籍PUT :更新书籍GET :获取所有书籍GET :获得一本书 - 由ID指定DELETE :删除书籍 - iD软删除GET :搜索簿 - 名称POST :创建用户PUT :验证书籍如果您遇到任何错误,或者想请求新功能,请随时打开问题。
git checkout -b new-feature )git commit -am 'Some cool changes' )git push origin new-feature )