Gehen Sie ein Beispielprojekt, um den MySQL -CRUD -Betrieb mit Best Practices zu verstehen
Eine Produktionsbucht -Store RESTful -API mit Gorilla/Mux Uber/Zap Lumberjack mit MySQL (eine schöne relationale Datenbank), JWT -Authentifizierung. Dieses Projekt enthält eine Golang -Implementierung von Swagger 2.0 (auch bekannt als OpenAPI 2.0): Es weiß, wie man Swagger -Spezifikationen serialisieren und deserialisiert.
# Download this project
git clone github.com/err-him/go-book-store-apiBevor Sie den API -Server ausführen
{
"host" : "127.0.0.1",
"port" : "3306",
"uname" : "root",
"dbname" : "book_store",
"pass" : "root"
}
Schritt 1: Erstellen Sie das Docker -Bild nach Dockerfile. Stellen Sie sicher, dass Docker-Compose in Ihrem Build-System installiert ist. Weitere Informationen dazu finden Sie unter: https://docs.docker.com/compose/install/
# This may take a few minutes.
$ docker-compose up -dDadurch werden zwei Container im Hintergrund für Go und MySQL erstellt
Schritt 2:. Der obige Vorgang erstellt zwei separate Container und DB für die Anwendung, um einige Daten im DB -Lauf automatisch zu füllen
$ cat db.sql | docker exec -i full_db_mysql /usr/bin/mysql -u root --password=root book_store
Schritt 3: Öffnen Sie ein anderes Terminal und greifen Sie auf den Beispiel -API -Endpunkt zu.
$ curl http://localhost:9002/health
{ " status " : " up " } Wichtiger Hinweis: Während des Einrichtens des Docker ändern Sie den DB-Host von 127.0.0.1 in book-store-mysql , da wir beim Erstellen des Docker-Bildes den Hostnamen- book-store-mysql beweisen 127.0.0.1
Gorilla/Mux wird verwendet, um Routing einzustellen. Es bietet eine leistungsstarke Funktion wie Gruppierung/Middleware/Handler usw.
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 wird als Datenbankdatenbank/SQL und github.com/go-sql-driver/mysql Modul verwendet, um die Datenbankverbindung zu erstellen und zu verwalten
# 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 -Spezifikation (ehemals Swagger -Spezifikation) ist ein API -Beschreibungsformat für REST -APIs. Mit einer OpenAPI -Datei können Sie Ihre gesamte API beschreiben, einschließlich:
/users ) und Vorgänge auf jedem Endpunkt ( GET /users , POST /users )API -Spezifikationen können in Yaml oder JSON geschrieben werden. Das Format ist leicht zu lernen und für Menschen und Maschinen lesbar. Die vollständige OpenAPI -Spezifikation finden Sie in GitHub: OpenAPI 2.0 -Spezifikation, OpenAPI 3.0 -Spezifikation
Swagger ist eine Reihe von Open-Source-Tools, die um die OpenAPI-Spezifikation basieren, mit der Sie REST-APIs entwerfen, erstellen, dokumentieren und konsumieren können. Zu den wichtigsten Swagger -Tools gehören: Swagger ermöglicht es Ihnen, die Struktur Ihrer APIs zu beschreiben, damit Maschinen sie lesen können. Die Fähigkeit von APIs, ihre eigene Struktur zu beschreiben, ist die Wurzel aller Großartigkeit in der Prahlerei.
Prahlerei kann in JSON oder YAML geschrieben werden. In diesem Leitfaden verwenden wir nur YAML -Beispiele, aber JSON funktioniert gleich gut. Eine in YAML geschriebene Beispiel -Swagger -Spezifikation sieht aus wie:
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 Dieses Projekt enthält eine Golang -Implementierung von Swagger 2.0 (auch bekannt als OpenAPI 2.0): Es weiß, wie man Swagger -Spezifikationen serialisieren und deserialisiert.
go-swagger bringt eine vollständige Suite von voll funktionsfähigen, Hochleistungs-API-Komponenten in die GO-Community, um mit einer Prahlerei-API zu arbeiten
Installation GO SWAGGE , um Go Swagger im Mac zu installieren, geben Sie den folgenden Befehl ein
brew tap go-swagger/go-swagger
brew install go-swagger
Sobald die Installation abgeschlossen ist
swagger serve -F=swagger ./swagger.yml
Auch für das gleiche Makefile erstellt, um über Make Enter: make serve-swagger auszuführen
** Swagger UI ** 






Dieses Projekt enthält eine Golang -Implementierung von Swagger 2.0 (auch bekannt als OpenAPI 2.0): Es weiß, wie man Swagger -Spezifikationen serialisieren und deserialisiert.
go-swagger bringt eine vollständige Suite von voll funktionsfähigen, Hochleistungs-API-Komponenten in die GO-Community, um mit einer Prahlerei-API zu arbeiten
Installation GO SWAGGE , um Go Swagger im Mac zu installieren, geben Sie den folgenden Befehl ein
brew tap go-swagger/go-swagger
brew install go-swagger
Sobald die Installation abgeschlossen ist
swagger serve -F=swagger ./swagger.yml
Auch für das gleiche Makefile erstellt, um über Make Enter: make serve-swagger auszuführen
** Swagger UI ** 






POST erstellen: Genre erstellenPUT : Update GenreGET : Holen Sie sich alle aktiven GenreGET : Holen Sie sich ein Genre - Spezifiziert durch ID- oder Genre -SlugDELETE : Genre löschen - Soft löschen nach angegebener ID oder Slug POST erstellen: Erstellen Sie den VerlagPUT : Update PublisherGET : Holen Sie sich den gesamten aktiven VerlagGET : GET EINEN PUBLISHER - BY ID ID oder Genre Slug angegebenDELETE : Verlag löschen - Soft Löschen nach angegebener ID oder Slug POST erstellen: Autor erstellenPUT : Autor aktualisierenGET : Holen Sie sich alle aktiven AutorGET : GET einen Autor - angegeben durch ID oder Genre -SlugDELETE : Autor löschen - Soft Löschen nach angegebener ID oder Slug POST erstellen: Buch erstellenPUT : Update -BuchGET : Holen Sie sich alle BücherGET : GET EIN BOOK - BY ID ID angegebenDELETE : Buch löschen - Soft Löschen nach IDGET : Suchbuch - mit seinem Namen POST erstellen: Benutzer erstellenPUT : Buch überprüfen Sie das Buch Fühlen Sie sich frei, ein Problem zu eröffnen, wenn Sie auf Fehler stoßen oder wenn Sie eine neue Funktion anfordern möchten.
git checkout -b new-feature ).git commit -am 'Some cool changes' )git push origin new-feature