No description
Find a file
2017-10-04 02:50:25 +02:00
api serve service-worker.js on page refresh 2017-09-28 21:48:12 +02:00
auth improve documentation 2017-09-27 22:42:43 +02:00
cmd adds api routes to documentation 2017-10-04 02:50:25 +02:00
database improve documentation 2017-09-27 22:42:43 +02:00
email improve documentation 2017-09-27 22:42:43 +02:00
logging improve documentation 2017-09-27 22:42:43 +02:00
models improve documentation 2017-09-27 22:42:43 +02:00
public add example SPA client 2017-09-25 20:25:18 +02:00
templates/email initial commit 2017-09-25 20:19:57 +02:00
testing minor code style changes 2017-09-27 18:14:51 +02:00
vendor adds api routes to documentation 2017-10-04 02:50:25 +02:00
.gitignore use crypto/rand 2017-09-26 23:39:23 +02:00
Gopkg.lock adds api routes to documentation 2017-10-04 02:50:25 +02:00
Gopkg.toml vendor dependencies with dep 2017-09-25 20:20:52 +02:00
LICENSE Create LICENSE 2017-09-27 00:00:50 +02:00
main.go initial commit 2017-09-25 20:19:57 +02:00
README.md adds api routes to documentation 2017-10-04 02:50:25 +02:00
routes.md adds api routes to documentation 2017-10-04 02:50:25 +02:00

Go Restful API Boilerplate

Easily extendible RESTful API boilerplate aiming to follow idiomatic go and best practice.

Features

  • Configuration using viper
  • CLI features using cobra
  • dep for dependency management
  • PostgreSQL support including migrations using go-pg
  • Structured logging with Logrus
  • Routing with chi router and middleware
  • JWT Authentication using jwt-go in combination with passwordless email authentication (could be easily extended to use passwords instead)
  • Request data validation using ozzo-validation
  • HTML emails with gomail

Start Application

  • Clone this repository
  • Create a postgres database and set environment variable DATABASE_URL accordingly if not using same as default
  • Build the application: go build to create go-base binary or use go run main.go instead in the following commands
  • Initialize the database migrations table: go-base migrate init
  • Run all migrations found in ./database/migrate with: go-base migrate
  • Run the application: go-base serve

Run go-base only to see the cobra generated help message.

API Routes

Check routes.md file for an overview of the provided API routes.

Demo client application

For demonstration of the login and account management features this API also serves a Single Page Application (SPA) as a Progressive Web App (PWA) done with Quasar Framework which itself is powered by Vue.js. The client's source code can be found here.

If no valid email smtp settings are provided by environment variables, emails will be print to stdout showing the login token. Use one of the following users for login:

A deployed version can also be found on Heroku

Environment Variables

Name Type Default Description
PORT int 3000 http port
LOG_LEVEL string debug log level
LOG_TEXTLOGGING bool false defaults to json logging
DATABASE_URL string postgres://postgres:postgres@localhost:5432/gobase?sslmode=disable PostgreSQL connection string
AUTH_LOGIN_URL string http://localhost:3000/login client login url as sent in login token email
AUTH_LOGIN_TOKEN_LENGTH int 8 length of login token
AUTH_LOGIN_TOKEN_EXPIRY int 11 login token expiry in minutes
AUTH_JWT_SECRET string random jwt sign and verify key - value "random" sets random 32 char secret at startup
AUTH_JWT_EXPIRY int 15 jwt access token expiry in minutes
AUTH_JWT_REFRESH_EXPIRY int 60 jwt refresh token expiry in minutes
EMAIL_SMTP_HOST string email smtp host
EMAIL_SMTP_PORT int email smtp port
EMAIL_SMTP_USER string email smtp username
EMAIL_SMTP_PASSWORD string email smtp password
EMAIL_FROM_ADDRESS string from address used in sending emails
EMAIL_FROM_NAME string from name used in sending emails