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 )