go-base

command module
v0.0.0-...-4a0e66a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 9, 2025 License: MIT Imports: 1 Imported by: 0

README

Go Restful API Boilerplate

GoDoc Badge GoReportCard Badge

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

The goal of this boiler is to have a solid and structured foundation to build upon on.

Any feedback and pull requests are welcome and highly appreciated. Feel free to open issues just for comments and discussions.

Features

The following feature set is a minimal selection of typical Web API requirements:

Start Application

  • Clone and change into this repository
Local
  • Create a postgres database and adjust environment variables in dev.env
  • Run the application to see available commands: go run main.go
  • Run all migrations from database/migrate folder: go run main.go migrate
  • Run the application with command serve: go run main.go serve
Using Docker Compose
  • First start the database only: docker compose up -d postgres
  • Once initialize the database by running all migrations in database/migrate folder: docker compose run server ./main migrate
  • Start the api server: docker compose up
Environment Variables

By default viper will look at dev.env for a config file. It contains the applications defaults if no environment variables are set otherwise.

API Routes

Authentication

For passwordless login following routes are available:

Path Method Required JSON Header Description
/auth/login POST email the email you want to login with (see below)
/auth/token POST token the token you received via email (or printed to stdout if smtp not set)
/auth/refresh POST Authorization: "Bearer refresh_token" refresh JWTs
/auth/logout POST Authorizaiton: "Bearer refresh_token" logout from this device

Outgoing emails containing the login token will be printed to stdout if no valid email smtp settings are provided by environment variables (see dev.env). If EMAIL_SMTP_HOST is set but the host can not be reached the application will exit immediately at start.

Example API

The example api follows the patterns from the chi rest example. Besides /auth routes the API provides two main routes for /api and /admin requests, the latter requires to be logged in as administrator by providing the respective JWT in Authorization Header.

Check routes.md for a generated overview of the provided API routes.

Testing

Package auth/pwdless contains example api tests using a mocked database. Run them with: go test -v ./...

Client API Access and CORS

The server is configured to serve a Progressive Web App (PWA) client from ./public folder (this repo only serves an example index.html, see below for a demo PWA client to put here). In this case enabling CORS is not required, because the client is served from the same host as the api.

If you want to access the api from a client that is served from a different host, including e.g. a development live reloading server with below demo client, you must enable CORS on the server first by setting environment variable ENABLE_CORS=true on the server to allow api connections from clients served by other hosts.

Demo client application

A deployed version can also be found at go-base.onrender.com (takes up to 60 seconds to spin up if sleeping...)

For demonstration of the login and account management features this API serves a demo Vue.js PWA. The client's source code can be found here. Build and put it into the api's ./public folder, or use the live development server (requires ENABLE_CORS environment variable set to true).

Use one of the following bootstrapped users for login:

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
api
Package api configures an http server for administration and application resources.
Package api configures an http server for administration and application resources.
admin
Package admin ties together administration resources and handlers.
Package admin ties together administration resources and handlers.
app
Package app ties together application resources and handlers.
Package app ties together application resources and handlers.
auth
jwt
pwdless
Package pwdless provides JSON Web Token (JWT) authentication and authorization middleware.
Package pwdless provides JSON Web Token (JWT) authentication and authorization middleware.
Package database implements postgres connection and queries.
Package database implements postgres connection and queries.
Package email provides email sending functionality.
Package email provides email sending functionality.
Package logging provides structured logging with logrus.
Package logging provides structured logging with logrus.
Package models contains application specific entities.
Package models contains application specific entities.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL