Vaya al proyecto de muestra para comprender la operación MySQL CRUD con las mejores prácticas
Una API RESTFLE RESTFUL de Book Store de producción de producción con GORILLA/MUX UBER/ZAP LUMBERJACK con MySQL (una buena base de datos relacional), Autenticación JWT. Este proyecto contiene una implementación de Golang de Swagger 2.0 (también conocido como Openapi 2.0): sabe cómo serializar y deserializar las especificaciones de arrogancia.
# Download this project
git clone github.com/err-him/go-book-store-apiAntes de ejecutar el servidor API, debe configurar la configuración de la base de datos con la suya o establecer la configuración de su base de datos con mis valores en db/evv.local.json
{
"host" : "127.0.0.1",
"port" : "3306",
"uname" : "root",
"dbname" : "book_store",
"pass" : "root"
}
Paso 1: Crea la imagen Docker de acuerdo con DockerFile. Asegúrese de que Docker-Compose esté instalado en su sistema de compilación. Para obtener detalles sobre cómo hacer esto, consulte: https://docs.docker.com/Compose/install/
# This may take a few minutes.
$ docker-compose up -dEsto creará dos contenedores en el fondo para GO y MySQL respectivamente
Paso 2 : . El proceso anterior creará dos contenedores y DB separados para la aplicación, para completar automáticamente algunos datos en la ejecución de DB
$ cat db.sql | docker exec -i full_db_mysql /usr/bin/mysql -u root --password=root book_store
Paso 3: Abra otro terminal y acceda al punto final de la API de ejemplo.
$ curl http://localhost:9002/health
{ " status " : " up " } Nota importante: Mientras configuraba el Docker, cambie el host de DB desde 127.0.0.1 a book-store-mysql porque, mientras crea la imagen de Docker, estamos demostrando el nombre del host book-store-mysql de lo contrario use 127.0.0.1 si se ejecuta usar run o hacer run run run o hacer run
Gorilla/Mux se está utilizando para configurar para el enrutamiento. Proporciona una característica potente como agrupación/middleware/manejador, 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)
MySQL se utiliza como base de datos de base de datos/SQL y github.com/go-sql-driver/mysql módulo para crear y administrar la conexión de la base de datos
# 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
La especificación de OpenAPI (anteriormente Swagger Specification) es un formato de descripción API para API REST. Un archivo OpenApi le permite describir toda su API, que incluya:
/users ) y operaciones en cada punto final ( GET /users , POST /users )Las especificaciones de API se pueden escribir en YAML o JSON. El formato es fácil de aprender y legible tanto para humanos como para máquinas. La especificación completa de OpenAPI se puede encontrar en GitHub: especificación de OpenApi 2.0, especificación de OpenAPI 3.0
Swagger es un conjunto de herramientas de código abierto construidas alrededor de la especificación de OpenAPI que puede ayudarlo a diseñar, construir, documentar y consumir API REST. Las principales herramientas de arrogancia incluyen: Swagger le permite describir la estructura de sus API para que las máquinas puedan leerlas. La capacidad de las API para describir su propia estructura es la raíz de toda la genialidad en Swagger.
La arrogancia se puede escribir en JSON o YAML. En esta guía, solo usamos ejemplos YAML, pero JSON funciona igualmente bien. Una especificación de swagger de muestra escrita en 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 proyecto contiene una implementación de Golang de Swagger 2.0 (también conocido como Openapi 2.0): sabe cómo serializar y deserializar las especificaciones de arrogancia.
go-swagger trae a la comunidad GO un conjunto completo de componentes de API de alto rendimiento y de alto rendimiento para trabajar con una API Swagger
Instalación Go Swagger para instalar GO Swagger en Mac, escriba el siguiente comando
brew tap go-swagger/go-swagger
brew install go-swagger
Una vez que la instalación completa, vaya a Project Repo y genere documentación de Swagger siguiendo el comando
swagger serve -F=swagger ./swagger.yml
También creó Nice Makefile para lo mismo, para ejecutar a través de Make Enter: make serve-swagger
** Swagger ui ** 






Este proyecto contiene una implementación de Golang de Swagger 2.0 (también conocido como Openapi 2.0): sabe cómo serializar y deserializar las especificaciones de arrogancia.
go-swagger trae a la comunidad GO un conjunto completo de componentes de API de alto rendimiento y de alto rendimiento para trabajar con una API Swagger
Instalación Go Swagger para instalar GO Swagger en Mac, escriba el siguiente comando
brew tap go-swagger/go-swagger
brew install go-swagger
Una vez que la instalación completa, vaya a Project Repo y genere documentación de Swagger siguiendo el comando
swagger serve -F=swagger ./swagger.yml
También creó Nice Makefile para lo mismo, para ejecutar a través de Make Enter: make serve-swagger
** Swagger ui ** 






POST : Crear géneroPUT : actualizar el géneroGET : obtenga todo el género activoGET : obtenga un género, especificado por ID o género.DELETE : Eliminar género - Eliminar suave por ID especificada o babosa POST : Crear editorPUT : Actualizar editorGET : obtenga todo el editor activoGET : obtenga un editor - especificado por id o babosa de géneroDELETE : Eliminar editor - Eliminar suave por ID o Slug especificado POST : Crear autorPUT : Actualizar el autorGET : obtenga todo el autor activoGET : obtenga un autor - especificado por ID o babosa de géneroDELETE : Eliminar autor - Eliminar suave por ID especificada o Slug POST : Crear libroPUT : Actualizar libroGET : Obtén todos los librosGET : obtenga un libro - especificado por IDDELETE : Eliminar el libro - Soft Eliminar por IDGET : Búsqueda del libro - Por su nombre POST : Crear usuarioPUT : Verificar el libro Siéntase libre de abrir un problema si se encuentra con algún error o si desea solicitar una nueva función.
git checkout -b new-feature )git commit -am 'Some cool changes' )git push origin new-feature )