Go Sample Project pour comprendre l'opération MySQL Crud avec les meilleures pratiques
Une API RESTful à librairie Ready Sample Ready avec Go Using Gorilla / MUX Uber / Zap Lumberjack avec MySQL (une belle base de données relationnelle), Authentification JWT. Ce projet contient une mise en œuvre de Golang de Swagger 2.0 (AKA OpenAPI 2.0): il sait comment sérialiser et désérialiser les spécifications de fanfaronnade.
# Download this project
git clone github.com/err-him/go-book-store-apiAvant d'exécuter un serveur API, vous devez définir la configuration de la base de données avec la vôtre ou définir la configuration de votre base de données avec mes valeurs sur db / evv.local.json
{
"host" : "127.0.0.1",
"port" : "3306",
"uname" : "root",
"dbname" : "book_store",
"pass" : "root"
}
Étape 1: Créez l'image docker selon Dockerfile. Assurez-vous que Docker-Compose est installé sur votre système de construction. Pour plus de détails sur la façon de procéder, voir: https://docs.docker.com/compose/install/
# This may take a few minutes.
$ docker-compose up -dCela créera deux conteneurs en arrière-plan pour GO et MySQL respectivement
Étape 2 : . Le processus ci-dessus créera deux conteneurs et DB distincts pour l'application, pour remplir automatiquement certaines données en DB
$ cat db.sql | docker exec -i full_db_mysql /usr/bin/mysql -u root --password=root book_store
Étape 3: Ouvrez un autre terminal et accédez à l'exemple de terminaison de l'API.
$ curl http://localhost:9002/health
{ " status " : " up " } Remarque importante: Lors de la configuration du Docker, modifiez l'hôte DB de 127.0.0.1 à book-store-mysql car lors de la création de l'image Docker, nous prouvons le nom d'hôte book-store-mysql Else Utilisez 127.0.0.1 Si vous exécutez en utilisant Go Run ou effectuez l'exécution
Gorilla / MUX est utilisé pour configurer le routage. Il fournit une fonctionnalité puissante comme le regroupement / middleware / handler, 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 est utilisé comme base de données de données / sql et github.com/go-sql-driver/mysql pour créer et gérer la connexion de la base de données
# 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 spécification OpenAPI (anciennement Spécification Swagger) est un format de description de l'API pour les API REST. Un fichier OpenAPI vous permet de décrire l'intégralité de votre API, notamment:
/users ) et opérations sur chaque point de terminaison ( GET /users , POST /users )Les spécifications de l'API peuvent être écrites en YAML ou JSON. Le format est facile à apprendre et lisible pour les humains et les machines. La spécification OpenAPI complète peut être trouvée sur GitHub: Spécification OpenAPI 2.0, spécification OpenAPI 3.0
Swagger est un ensemble d'outils open source construits autour de la spécification OpenAPI qui peuvent vous aider à concevoir, construire, documenter et consommer des API REST. Les principaux outils de fanfaronnade comprennent: Swagger vous permet de décrire la structure de vos API afin que les machines puissent les lire. La capacité des API à décrire leur propre structure est la racine de toute génialité dans Swagger.
Swagger peut être écrit en JSON ou YAML. Dans ce guide, nous n'utilisons que des exemples YAML, mais JSON fonctionne aussi bien. Un exemple de spécification de fanfaronnade écrite en yaml ressemble à:
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 Ce projet contient une mise en œuvre de Golang de Swagger 2.0 (AKA OpenAPI 2.0): il sait comment sérialiser et désérialiser les spécifications de fanfaronnade.
go-swagger apporte à la communauté Go une suite complète de composants API entièrement complets et hautes performances pour travailler avec une API Swagger
Installation Go Swagger pour installer Go Swagger dans Mac, tapez la commande suivante
brew tap go-swagger/go-swagger
brew install go-swagger
Une fois l'installation terminée, accédez à Project Repo et générez la documentation de fanfaronnade en suivant la commande
swagger serve -F=swagger ./swagger.yml
A également créé de beaux makefile pour le même, pour s'exécuter via Make Enter: make serve-swagger
** swagger ui ** 






Ce projet contient une mise en œuvre de Golang de Swagger 2.0 (AKA OpenAPI 2.0): il sait comment sérialiser et désérialiser les spécifications de fanfaronnade.
go-swagger apporte à la communauté Go une suite complète de composants API entièrement complets et hautes performances pour travailler avec une API Swagger
Installation Go Swagger pour installer Go Swagger dans Mac, tapez la commande suivante
brew tap go-swagger/go-swagger
brew install go-swagger
Une fois l'installation terminée, accédez à Project Repo et générez la documentation de fanfaronnade en suivant la commande
swagger serve -F=swagger ./swagger.yml
A également créé de beaux makefile pour le même, pour s'exécuter via Make Enter: make serve-swagger
** swagger ui ** 






POST : créer un genrePUT : genre de mise à jourGET : obtenez tout genre actifGET : obtenez un genre - spécifié par id ou limace de genreDELETE : supprimer le genre - Soft Supprimer par ID spécifié ou limace POST : Créer un éditeurPUT : Publication de mise à jourGET : obtenez tout éditeur actifGET : get un éditeur - spécifié par id ou slug de genreDELETE : supprimer l'éditeur - Soft Supprimer par ID spécifié ou limace POST : Créer un auteurPUT : Auteur de mise à jourGET : obtenez tout l'auteur actifGET : obtenez un auteur - spécifié par id ou limace de genreDELETE : Supprimer l'auteur - Soft Supprimer par ID spécifié ou limace POST : Créer un livrePUT : livre de mise à jourGET : obtenez tous les livresGET : Get One Book - spécifié par idDELETE : Supprimer le livre - Soft Supprimer par IDGET : Recherche Book - Par son nom POST : créer l'utilisateurPUT : Vérifier le livre N'hésitez pas à ouvrir un problème si vous rencontrez des bogues ou si vous souhaitez demander une nouvelle fonctionnalité.
git checkout -b new-feature )git commit -am 'Some cool changes' )git push origin new-feature )