gin-rest-api-example
gin-rest-api-example copied to clipboard
Exemplary RESTFul API built with go, gin, gorm
Rest API with golang and gin, gorm
This project is an exemplary rest api server built with Go :)
See API Spec (modified from RealWorld API Spec to simplify)
API Server technology stack is
- Server code:
golang
- REST Server:
gin
- Database:
MySQL
withgolang-migrate
to migrate - ORM:
gorm v2
- Dependency Injection:
fx
- Unit Testing:
go test
andtestify
- Configuration management:
cobra
Getting started
1. Start with docker compose
build a docker image
// docker build -f cmd/server/Dockerfile -t gin-example/article-server .
$ make build-docker
run api server with mysql (see docker-compose.yaml)
// docker-compose up --force-recreate
$ make compose.up
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e01564708984 gin-example/article-server "article-server --co…" 40 seconds ago Up 39 seconds 0.0.0.0:3000->3000/tcp article-server
105cb25b6d3a mysql:8.0.17 "docker-entrypoint.s…" 40 seconds ago Up 39 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp my-mysql
$ make compose.down
Check apis
Run intellij's .http files in tools/http/sample directory
(./tools/http/sample)
TODO
- [x] add user, article with comment api spec
- [x] add common error response
- [x] configure project layer
- [x] impl account db
- [x] impl account handler (binding, serialize, common error middleware, etc...)
- [x] impl article db
- [x] impl article handler
- [ ] refactor binding and validation of request
- [x] configure docker compose
- [ ] add metrics
- [ ] configure tests (newman or http)
- [ ] another project layer with different branch