Vá amostra de projeto para entender o operação MySQL Crud com as melhores práticas
Uma API RESTful de Livraria de Livraria de Amostra de Exemplo de Produção, usando GO usando Gorilla/Mux Uber/Zap Lumberjack com MySQL (um bom banco de dados relacional), autenticação JWT. Este projeto contém uma implementação de Golang do Swagger 2.0 (também conhecida como OpenAPI 2.0): sabe como serializar e desserializar especificações de arrogância.
# Download this project
git clone github.com/err-him/go-book-store-apiAntes de executar o servidor da API, você deve definir a configuração do banco de dados com a sua ou definir a configuração do seu banco de dados com meus valores em db/evv.local.json
{
"host" : "127.0.0.1",
"port" : "3306",
"uname" : "root",
"dbname" : "book_store",
"pass" : "root"
}
Etapa 1: Crie a imagem do Docker de acordo com o Dockerfile. Verifique se o Docker-Comppose está instalado no seu sistema de compilação. Para detalhes sobre como fazer isso, consulte: https://docs.docker.com/compost/install/
# This may take a few minutes.
$ docker-compose up -dIsso criará dois contêineres em segundo plano para GO e MySQL, respectivamente
Etapa 2 : . O processo acima criará dois contêineres separados e dB para aplicação, para preencher automaticamente alguns dados em db run
$ cat db.sql | docker exec -i full_db_mysql /usr/bin/mysql -u root --password=root book_store
Etapa 3: Abra outro terminal e acesse o exemplo da API de exemplo.
$ curl http://localhost:9002/health
{ " status " : " up " } NOTA IMPORTANTE: Ao configurar o Docker, altere o host do banco de dados de 127.0.0.1 para book-store-mysql porque, ao criar a imagem do docker, estamos provando nomes de anfitriões book-store-mysql , caso contrário, use 127.0.0.1 se estiver executando usando o Go Run ou Make Run ou
O gorila/mux está sendo usado para configurar o roteamento. Ele fornece alguns recursos poderosos, como agrupamento/middleware/manipulador etc.
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)
O MySQL está sendo usado como banco de dados de banco de dados/sql e github.com/go-sql-driver/mysql para criar e gerenciar conexão com o banco de dados
# 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
A especificação OpenAPI (anteriormente especificação de swagger) é um formato de descrição da API para APIs REST. Um arquivo OpenAPI permite descrever toda a sua API, incluindo:
/users ) e operações em cada terminal ( GET /users , POST /users )As especificações da API podem ser escritas em YAML ou JSON. O formato é fácil de aprender e legível para humanos e máquinas. A especificação completa do OpenAPI pode ser encontrada no GitHub: OpenAPI 2.0 Specification, OpenAPI 3.0 Especificação
A Swagger é um conjunto de ferramentas de código aberto criadas em torno da especificação OpenAPI que podem ajudá-lo a projetar, criar, documentar e consumir APIs REST. As principais ferramentas de arrogância incluem: Swagger permite descrever a estrutura das suas APIs para que as máquinas possam lê -las. A capacidade das APIs de descrever sua própria estrutura é a raiz de toda grandiosidade em arrogância.
Swagger pode ser escrito em JSON ou YAML. Neste guia, usamos apenas exemplos da YAML, mas JSON funciona igualmente bem. Uma amostra especificação de arrogância escrita em YAML parece:
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 Este projeto contém uma implementação de Golang do Swagger 2.0 (também conhecida como OpenAPI 2.0): sabe como serializar e desserializar especificações de arrogância.
go-swagger traz para a comunidade Go um conjunto completo de componentes de API totalmente comuns e de alto desempenho para trabalhar com uma API de arrogância
Instalação Vá Swagger para instalar Go Swagger no Mac, digite seguinte comando
brew tap go-swagger/go-swagger
brew install go-swagger
Quando a instalação completa, vá para o repo do projeto e gerar documentação de arrogância seguindo o comando seguinte
swagger serve -F=swagger ./swagger.yml
Também criou make serve-swagger bom makefile para o mesmo
** Swagger ui ** 






Este projeto contém uma implementação de Golang do Swagger 2.0 (também conhecida como OpenAPI 2.0): sabe como serializar e desserializar especificações de arrogância.
go-swagger traz para a comunidade Go um conjunto completo de componentes de API totalmente comuns e de alto desempenho para trabalhar com uma API de arrogância
Instalação Vá Swagger para instalar Go Swagger no Mac, digite seguinte comando
brew tap go-swagger/go-swagger
brew install go-swagger
Quando a instalação completa, vá para o repo do projeto e gerar documentação de arrogância seguindo o comando seguinte
swagger serve -F=swagger ./swagger.yml
Também criou make serve-swagger bom makefile para o mesmo
** Swagger ui ** 






POST : Criar gêneroPUT : gênero de atualizaçãoGET : Obtenha todo o gênero ativoGET : get Um gênero - especificado por id ou gênero slugDELETE : Excluir gênero - Soft Delete por ID especificado ou SLUG POST : Criar editorPUT : atualizador editorGET : Get todo editor ativoGET : get Um editor - especificado por id ou gênero slugDELETE : excluir editor - soft delete por id especificado ou slug POST : Criar autorPUT : Atualização AutorGET : Obtenha todo o autor ativoGET : get Um autor - especificado por id ou gênero slugDELETE : excluir autor - Soft Delete por ID especificado ou SLUG POST : Criar livroPUT : Atualizar livroGET : Obtenha todos os livrosGET : get Um livro - especificado por idDELETE : excluir livro - Soft Excluir por idGET : Pesquisar livro - pelo seu nome POST : Criar usuárioPUT : Verifique o livro Sinta -se à vontade para abrir um problema se encontrar algum bug ou se quiser solicitar um novo recurso.
git checkout -b new-feature )git commit -am 'Some cool changes' )git push origin new-feature )