サンプルプロジェクトに行くには、ベストプラクティスでmysql crud操作を理解する
Gorilla/Mux Uber/Zap Lumberjackを使用したMySQL (素敵なリレーショナルデータベース)、JWT認証を使用して、Production Ready Sample Book Book Store Restful APIを使用します。このプロジェクトには、Swagger 2.0(別名Openapi 2.0)のGolang実装が含まれています。Swagger仕様のシリアル化と脱却方法を知っています。
# Download this project
git clone github.com/err-him/go-book-store-apiAPIサーバーを実行する前に、データベース構成を自分のもので設定するか、db/evv.local.jsonで私の値でデータベース構成を設定する必要があります
{
"host" : "127.0.0.1",
"port" : "3306",
"uname" : "root",
"dbname" : "book_store",
"pass" : "root"
}
ステップ1: DockerFileに従ってDocker画像を作成します。 BuildシステムにDocker-Composeがインストールされていることを確認してください。これを行う方法の詳細については、https://docs.docker.com/compose/install/を参照してください。
# This may take a few minutes.
$ docker-compose up -dこれにより、Goとmysqlのバックグラウンドに2つのコンテナが作成されます
ステップ2:。上記のプロセスでは、2つの個別のコンテナとアプリケーション用のDBを作成し、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を証明している場合、Go RunまたはMake Runを使用して実行する場合は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-driver/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仕様)は、REST APIのAPI説明形式です。 OpenAPIファイルを使用すると、以下を含むAPI全体を説明できます。
/users )と各エンドポイントでの操作( GET /users 、 POST /users )API仕様は、YAMLまたはJSONで記述できます。この形式は、人間と機械の両方が簡単に学習し、読みやすいです。完全なOpenAPI仕様はGitHub:Openapi 2.0仕様、Openapi 3.0仕様で見つけることができます
Swaggerは、Openapi仕様の周りに構築された一連のオープンソースツールであり、REST APIの設計、構築、文書化、および消費に役立ちます。主要なSwaggerツールには次のものがあります。Swaggerを使用すると、マシンが読み取れるようにAPIの構造を説明できます。 APIが独自の構造を記述する能力は、Swaggerのすべての素晴らしさの根源です。
SwaggerはJSONまたはYAMLで書くことができます。このガイドでは、YAMLの例のみを使用していますが、JSONも同様にうまく機能します。 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 このプロジェクトには、Swagger 2.0(別名Openapi 2.0)のGolang実装が含まれています。Swagger仕様のシリアル化と脱却方法を知っています。
go-swagger GOコミュニティに完全に機能した高性能のAPIコンポーネントの完全なスイートをもたらし、SwaggerAPIで動作します
インストールGO SWAGGER TO INSOLING GO IN MAC、次のコマンドと入力
brew tap go-swagger/go-swagger
brew install go-swagger
インストールが完了したら、Project Repoに移動し、次のコマンドでSwaggerドキュメントを生成します
swagger serve -F=swagger ./swagger.yml
また、同じように素敵なメイクファイルを作成しましたmake serve-swagger
** swaggerui ** 






このプロジェクトには、Swagger 2.0(別名Openapi 2.0)のGolang実装が含まれています。Swagger仕様のシリアル化と脱却方法を知っています。
go-swagger GOコミュニティに完全に機能した高性能のAPIコンポーネントの完全なスイートをもたらし、SwaggerAPIで動作します
インストールGO SWAGGER TO INSOLING GO IN MAC、次のコマンドと入力
brew tap go-swagger/go-swagger
brew install go-swagger
インストールが完了したら、Project Repoに移動し、次のコマンドでSwaggerドキュメントを生成します
swagger serve -F=swagger ./swagger.yml
また、同じように素敵なメイクファイルを作成しましたmake serve-swagger
** swaggerui ** 






POSTの作成:ジャンルを作成しますPUT :更新ジャンルGET :すべてのアクティブなジャンルを取得しますGET :取得1つのジャンル - IDまたはジャンルスラグで指定DELETE :削除ジャンル - 指定されたIDまたはスラグによってソフト削除POST作成:パブリッシャーを作成しますPUT :出版社を更新しますGET :すべてのアクティブパブリッシャーを取得しますGET :get one Publisher- IDまたはジャンルスラッグで指定DELETE :delete publisher-指定されたidまたはslugによってソフト削除POST作成:作成者を作成しますPUT :著者を更新しますGET :すべてのアクティブな著者を取得しますGET :get oneer- IDまたはジャンルスラッグで指定DELETE :delete orther-指定されたIDまたはスラグによってソフト削除POST作成:本を作成しますPUT :ブックを更新しますGET :すべての本を取得しますGET :get one book- IDで指定DELETE :delete book -idによるソフト削除GET :search book-その名前でPOSTの作成:ユーザーを作成しますPUT :bookを確認しますバグに出くわした場合、または新しい機能をリクエストしたい場合は、お気軽に開きます。
git checkout -b new-feature )を作成しますgit commit -am 'Some cool changes' )git push origin new-feature )