Перейдите к образцу проекта, чтобы понять операцию MySQL CRUD с лучшими практиками
Производственное готовое к книжному магазину API RESTFUL с использованием Gorilla/Mux Uber/Zap Lumberjack с MySQL (хорошая реляционная база данных), аутентификация JWT. Этот проект содержит внедрение Golang Swagger 2.0 (AKA OpenApi 2.0): он знает, как сериализовать и понижать спецификации Swagger.
# Download this project
git clone github.com/err-him/go-book-store-apiПеред запуском API -сервера вы должны установить конфигурацию базы данных с вашей
{
"host" : "127.0.0.1",
"port" : "3306",
"uname" : "root",
"dbname" : "book_store",
"pass" : "root"
}
Шаг 1: Создайте изображение Docker в соответствии с Dockerfile. Убедитесь, что Docker-Compose установлен в вашей системе сборки. Для получения подробной информации о том, как это сделать, см.
# This may take a few minutes.
$ docker-compose up -dЭто создаст два контейнера на фоне для GO и MySQL соответственно
Шаг 2 : . Приведенный выше процесс создаст два отдельных контейнера и 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 изменить хост DB с 127.0.0.1 на book-store-mysql потому что при создании изображения Docker мы доказываем имя хоста book-store-mysql Используйте 127.0.0.1
Gorilla/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-river/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) является форматом описания API для API REST. Файл OpenAPI позволяет описать весь ваш API, включая:
/users ) и операции в каждой конечной точке ( GET /users , POST /users )Спецификации API могут быть написаны в YAML или JSON. Формат легко изучать и читаемо как для людей, так и для машин. Полная спецификация OpenAPI можно найти на GitHub: Speciation OpenAPI 2.0, Specification OpenAPI 3.0
Swagger-это набор инструментов с открытым исходным кодом, созданными вокруг спецификации OpenAPI, которые могут помочь вам разработать, создавать, документировать и потреблять API REST. Основные инструменты Swagger включают: Swagger позволяет описать структуру ваших API, чтобы машины могли их читать. Способность API описать свою собственную структуру является корнем всей удивительности в чванстве.
Swagger может быть написан в JSON или YAML. В этом руководстве мы используем только примеры YAML, но JSON работает одинаково хорошо. Образец спецификации Swagger, написанный в 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 Этот проект содержит внедрение Golang Swagger 2.0 (AKA OpenApi 2.0): он знает, как сериализовать и понижать спецификации Swagger.
go-swagger предлагает сообщество Go полный набор полнофункциональных, высокопроизводительных компонентов API для работы с Swagger API
Установка GO Swagger для установки Go Swagger в Mac, введите следующую команду
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 ** 






Этот проект содержит внедрение Golang Swagger 2.0 (AKA OpenApi 2.0): он знает, как сериализовать и понижать спецификации Swagger.
go-swagger предлагает сообщество Go полный набор полнофункциональных, высокопроизводительных компонентов API для работы с Swagger API
Установка GO Swagger для установки Go Swagger в Mac, введите следующую команду
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 или жанре SlugDELETE : DELETE Жанр - Soft DELETE с указанным идентификатором или слизом POST : Создать издательPUT : Update PublisherGET : Get All Active PublisherGET : Get One Publisher - указан ID или жанр SlugDELETE : Delete Publisher - Soft Delete с указанным идентификатором или слизней POST : Создать автораPUT : Update AuthorGET : получить всех активных авторовGET : получить одного автора - указано по Id или жанр SlugDELETE : DELETE AUTUR - SOFT DELETE с указанным идентификатором или слизом POST : Создать книгуPUT : обновление книгиGET : получить все книгиGET : Получить одну книгу - указано в IDDELETE : DELETE Book - Soft Delete By IDGET : Поисковая книга - по его названию POST : Создайте пользователяPUT : проверьте книгу Не стесняйтесь открывать проблему, если вы столкнетесь с любыми ошибками или хотите запросить новую функцию.
git checkout -b new-feature )git commit -am 'Some cool changes' )git push origin new-feature )