git clone https://github.com/go-tutorials/go-mongo-tutorial.git
cd go-mongo-tutorialgo run main.goBased on the layer architecture, we simplify the architecture for this tutorial
- GET: retrieve a representation of the resource
- POST: create a new resource
- PUT: update the resource
- DELETE: delete a resource
To check if the service is available.
{
    "status": "UP",
    "details": {
        "mongo": {
            "status": "UP"
        }
    }
}[
    {
        "id": "spiderman",
        "username": "peter.parker",
        "email": "[email protected]",
        "phone": "0987654321",
        "dateOfBirth": "1962-08-25T16:59:59.999Z"
    },
    {
        "id": "wolverine",
        "username": "james.howlett",
        "email": "[email protected]",
        "phone": "0987654321",
        "dateOfBirth": "1974-11-16T16:59:59.999Z"
    }
]GET /users/wolverine{
    "id": "wolverine",
    "username": "james.howlett",
    "email": "[email protected]",
    "phone": "0987654321",
    "dateOfBirth": "1974-11-16T16:59:59.999Z"
}{
    "id": "wolverine",
    "username": "james.howlett",
    "email": "[email protected]",
    "phone": "0987654321",
    "dateOfBirth": "1974-11-16T16:59:59.999Z"
}1PUT /users/wolverine{
    "username": "james.howlett",
    "email": "[email protected]",
    "phone": "0987654321",
    "dateOfBirth": "1974-11-16T16:59:59.999Z"
}1DELETE /users/wolverine1- core-go/health: include HealthHandler, HealthChecker, MongoHealthChecker
- core-go/config: to load the config file, and merge with other environments (SIT, UAT, ENV)
- core-go/log: log and log middleware
To check if the service is available, refer to core-go/health
{
    "status": "UP",
    "details": {
        "mongo": {
            "status": "UP"
        }
    }
}To create health checker, and health handler
    client, err := mongo.Connect(ctx, options.Client().ApplyURI(root.Mongo.Uri))
    if err != nil {
        return nil, err
    }
    db := client.Database(root.Mongo.Database)
    mongoChecker := mongo.NewHealthChecker(db)
    healthHandler := health.NewHealthHandler(mongoChecker)To handler routing
    r := mux.NewRouter()
    r.HandleFunc("/health", healthHandler.Check).Methods("GET")To load the config from "config.yml", in "configs" folder
package main
import "github.com/core-go/config"
func main() {
    var conf Config
    err := config.Load(&conf, "configs/config")
    if err != nil {
        panic(err)
    }
}import (
	"github.com/core-go/config"
	"github.com/core-go/log"
	mid "github.com/core-go/log/middleware"
	"github.com/gorilla/mux"
)
func main() {
	var conf app.Config
	config.Load(&conf, "configs/config")
	r := mux.NewRouter()
	log.Initialize(conf.Log)
	r.Use(mid.BuildContext)
	logger := mid.NewLogger()
	r.Use(mid.Logger(conf.MiddleWare, log.InfoFields, logger))
	r.Use(mid.Recover(log.PanicMsg))
}To configure to ignore the health check, use "skips":
middleware:
  skips: /health