go_api_boilerplate icon indicating copy to clipboard operation
go_api_boilerplate copied to clipboard

🐶Go (Golang)🚀REST / GraphQL API + Postgres boilerplate

Build Status codecov MIT Licence Open Source Love

Go (Golang) REST / GraphQL API Boilerplate

  • DEMO (GraphQL Playground): https://go-gin-postgres-api.herokuapp.com/graphql
  • DEMO (REST API Swagger): https://go-gin-postgres-api.herokuapp.com/swagger/index.html

Note: in demo, I disabled email

Used libraries:


  • Components Diagram

diagram image

  • See Swagger Doc http://localhost:3000/swagger/index.html

swagger image

  • See GraphQL Playground http://localhost:3000/graphql

graphql image


Features

  • [x] User Auth functionality (Signup, Login, Forgot Password, Reset Password)
  • [x] JWT Authentication
  • [x] REST API
  • [x] GraphQL API
  • [x] Gorm (Golang SQL DB ORM) with Postgres implementation and auto migration
  • [x] Configs via environmental variables
  • [x] Email notification (Welcome email, Reset password email)
  • [x] Swagger REST API documentation
  • [x] GraphQL playground
  • [x] Unit tests
  • [x] Dependency injection

Run locally

Create .env at root, i.e.

MAILGUN_API_KEY=key-b9jksfh8s9843uhfsdhds
MAILGUN_DOMAIN=xxxxx.mailgun.org

EMAIL_FROM=support@go_api_boilerplate.com

DB_HOST=localhost
DB_PORT=5432
DB_USER=your-user
DB_PASSWORD=your-password
DB_NAME=local-dev-db

JWT_SIGN_KEY=secret
HAMC_KEY=secret
PEPPER=secret

ENV=development

APP_PORT=3000
APP_HOST=http://localhost

Run

# Terminal 1
docker-compose up        # docker-compose up (Run postgres)
docker-compose down      # docker-compose down (Shutdown postgres)

# Terminal 2
go run github.com/99designs/gqlgen -v # Generate Graphql stuff
swag init -g app/app.go               # Generates Swagger
go run *.go                           # Run application
go test -v -cover ./...               # Run go test

Todo

  • [ ] Input Validations
  • [ ] Custom Error messages
  • [ ] Logger
  • [ ] More unit tests

maybe?

  • [ ] gRPC
  • [ ] Redis Streams
  • [ ] Redis PubSub
  • [ ] WebSocket
  • [ ] MongoDB

Contribution

Welcome for suggestions