2020-09-30 06:35:07 +00:00
|
|
|
# gohttpserver
|
|
|
|
|
2020-09-30 08:12:59 +00:00
|
|
|
[![Build Status](https://drone.datavi.be/api/badges/sneak/gohttpserver/status.svg)](https://drone.datavi.be/sneak/gohttpserver)
|
|
|
|
|
2020-09-30 08:39:19 +00:00
|
|
|
This is my boilerplate for a go HTTP server, designed to be a
|
2020-09-30 12:09:52 +00:00
|
|
|
starting point template for new projects, with most things conveniently
|
|
|
|
stubbed out and ready for simple and fast customization, with sane defaults.
|
2020-09-30 06:35:07 +00:00
|
|
|
|
2020-09-30 08:39:19 +00:00
|
|
|
Many ideas are taken from Mat Ryer's talk titled "How I Write HTTP Web Services
|
|
|
|
after Eight Years" at GopherCon 2019, seen here:
|
2020-09-30 06:35:07 +00:00
|
|
|
|
|
|
|
https://www.youtube.com/watch?v=rWBSMsLG8po
|
|
|
|
|
2020-09-30 08:39:19 +00:00
|
|
|
# Contributing
|
|
|
|
|
|
|
|
Contributions are welcome! Please send me an email if you'd like an account
|
|
|
|
on this server to submit PRs.
|
|
|
|
|
|
|
|
Alternately, even just feedback is great:
|
|
|
|
[sneak@sneak.berlin](mailto:sneak@sneak.berlin)
|
|
|
|
|
|
|
|
# Features
|
|
|
|
|
|
|
|
* Basic logging middleware
|
|
|
|
* Stub Authentication middleware
|
|
|
|
* Helper functions for encoding/decoding json
|
|
|
|
* Healthcheck route
|
2020-10-04 06:03:00 +00:00
|
|
|
* Prometheus metrics endpoint
|
|
|
|
* No global state of our own
|
|
|
|
* some deps have some, such as the metrics collector and Sentry
|
2020-09-30 08:39:19 +00:00
|
|
|
|
2020-09-30 12:07:31 +00:00
|
|
|
# Design Decisions
|
|
|
|
|
2020-10-10 15:17:17 +00:00
|
|
|
* no TLS in this code
|
|
|
|
* do it somewhere else, like on a sidecar or reverse proxy
|
|
|
|
* this might have to change to support http > 1 later
|
2020-09-30 12:07:31 +00:00
|
|
|
* logging: [rs/zerolog](https://github.com/rs/zerolog)
|
|
|
|
* configuration: [spf13/viper](https://github.com/spf13/viper)
|
2020-10-10 15:17:17 +00:00
|
|
|
* used as a wrapper around env vars, because of typed getters
|
2020-10-04 06:03:00 +00:00
|
|
|
* router is Chi: [go-chi/chi](https://github.com/go-chi/chi)
|
|
|
|
* Prometheus-style metrics via [slok/go-http-metrics](https://github.com/slok/go-http-metrics)
|
2020-10-10 15:17:17 +00:00
|
|
|
* code formatted with [mvdan.cc/gofumpt](https://mvdan.cc/gofumpt)
|
|
|
|
* code style checked with [golangci/golangci-lint](https://github.com/golangci/golangci-lint)
|
|
|
|
|
|
|
|
# Pending Design Decisions
|
|
|
|
|
2020-09-30 12:07:31 +00:00
|
|
|
* database: TBD (thinking about [go-gorm/gorm](https://github.com/go-gorm/gorm))
|
2020-10-03 07:22:23 +00:00
|
|
|
* templating: TBD (suggestions welcome)
|
2020-09-30 12:07:31 +00:00
|
|
|
|
2020-09-30 06:35:07 +00:00
|
|
|
# TODO
|
|
|
|
|
2020-10-10 15:17:17 +00:00
|
|
|
* Basic HTML Templates
|
2020-09-30 06:35:07 +00:00
|
|
|
* Database Boilerplate
|
2020-10-03 07:22:23 +00:00
|
|
|
* Sessions Middleware
|
2020-10-10 15:17:17 +00:00
|
|
|
* sync.Once example for re-compiling templates
|
|
|
|
* Bundling static assets into binary
|
2020-09-30 06:35:07 +00:00
|
|
|
|
2020-10-04 06:03:00 +00:00
|
|
|
# Known Bugs (more TODO)
|
|
|
|
|
|
|
|
* Chi recovery middleware logs non-json when in non-tty stdout mode,
|
|
|
|
breaking validity of stdout as a json stream
|
|
|
|
|
2020-09-30 06:35:07 +00:00
|
|
|
# Author
|
|
|
|
|
2020-09-30 08:39:19 +00:00
|
|
|
* [sneak@sneak.berlin](mailto:sneak@sneak.berlin)
|
|
|
|
* https://sneak.berlin
|
|
|
|
* [@sneak@sneak.berlin](https://s.sneak.berlin/@sneak)
|
2020-09-30 06:35:07 +00:00
|
|
|
|
|
|
|
# License
|
|
|
|
|
2020-09-30 08:39:19 +00:00
|
|
|
WTFPL (aka public domain):
|
|
|
|
|
|
|
|
```
|
|
|
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
|
|
|
Version 2, December 2004
|
|
|
|
|
|
|
|
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
|
|
|
|
|
|
|
Everyone is permitted to copy and distribute verbatim or modified
|
|
|
|
copies of this license document, and changing it is allowed as long
|
|
|
|
as the name is changed.
|
|
|
|
|
|
|
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
|
|
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
|
|
|
|
|
|
0. You just DO WHAT THE FUCK YOU WANT TO.
|
|
|
|
```
|
|
|
|
|