~mna/kick-archived-see-github

6546ed0c15cb5b058d810d8f281282994871a3fc — Martin Angers 1 year, 7 months ago f1a5602 master
Update readmer
2 files changed, 12 insertions(+), 37 deletions(-)

M README.md
D TODO.md
M README.md => README.md +12 -21
@@ 4,16 4,17 @@
* [Issue Tracker](https://todo.sr.ht/~mna/kick)
* [Builds](https://builds.sr.ht/~mna/kick)

Kick streamlines configuration of a robust, hardened, production-ready
Go web server. Its core is based on `net/http` and standard library
packages, and it integrates proven, high-quality community Go packages
for commonly-needed additional features.

Through the use of the `Builders` type, it provides some flexibility
and "pluggability" in the choice of third-party packages used to
deliver those extra features, but it is not the goal of this package
to be fully customizable - it is opinionated and as much as possible,
provides an out-of-the-box encoding of best practices.
Kick streamlines configuration of a robust, hardened, production-ready Go web
server. Its core is based on `net/http` and standard library packages, and it
integrates proven, high-quality community Go packages for commonly-needed
additional features. It favors a data-driven, declarative approach to defining
a web server and its routes.

Through the use of the `Builders` type, it provides some flexibility and
"pluggability" in the choice of third-party packages used to deliver those
extra features, but it is not the goal of this package to be fully customizable
- it is opinionated and as much as possible, provides an out-of-the-box
encoding of best practices.

## Testing



@@ 50,23 51,13 @@ $ go test ./... -race
Kick automatically builds a robust, DOS-hardened web server based
on proven, established and widely used Go packages:

* `github.com/gorilla/sessions` for sessions with `github.com/boj/redistore` (?) as backing store
* `github.com/gorilla/websocket` for websocket
* `github.com/gorilla/handlers` for panic recovery, CORS, canonical host, content-type validation, method override, trust proxy headers
* `github.com/gorilla/csrf` for CSRF
* `github.com/julienschmidt/httprouter` for route multiplexing and static file serving
* `github.com/sirupsen/logrus` for structured logging
* `github.com/gomodule/redigo` for Redis
* `github.com/gorilla/schema` for decoding form values to structs, and `github.com/mna/httpparms` for streamlined API with validation
* `github.com/sony/gobreaker` for the circuit breaker
* `github.com/julienschmidt/httprouter` for route multiplexing
* `golang.org/x/crypto/acme/autocert` for production TLS certificate
* `github.com/FiloSottile/mkcert` for localhost/development TLS certificate
* `github.com/throttled/throttled` for session-based rate-limiting
* `github.com/juju/ratelimit` for absolute endpoint rate-limiting
* `github.com/NYTimes/gziphandler` for gzip compression
* `github.com/go-sql-driver/mysql` for mysql DB support
* `github.com/jmoiron/sqlx` for added SQL and struct support
* `github.com/kelseyhightower/envconfig` for configuration, overridable via flags
* `github.com/felixge/httpsnoop` for wrapping `http.ResponseWriter`

[mkcert]: https://github.com/FiloSottile/mkcert

D TODO.md => TODO.md +0 -16
@@ 1,16 0,0 @@
# Tutorials

1. Hello World, configured server with simple handler
2. Flags, using reflection-based struct fields
3. Params and validation (request struct)
4. DB services, no ORM, sqlx is enough, with mocking, model struct
5. Response structs, show support of various encodings
6. Templates for HTML pages, show template build approach
7. 3rd party services/api calls with circuit breaker (also microservices)
8. Batch, async & one-off tools
9. Redirect http to https
10. Reverse proxy in front (e.g. distinct web + api)
11. Structured logging
12. Access path / router variables from handler
13. Disable http/2 option (maybe to support websocket)
14. Health checks, including DBs