Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

zacscoding/gin-rest-api-example

Repository files navigation

workflow

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 with golang-migrate to migrate
  • ORM: gorm v2
  • Dependency Injection: fx
  • Unit Testing: go test and testify
  • 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

  • add user, article with comment api spec
  • add common error response
  • configure project layer
  • impl account db
  • impl account handler (binding, serialize, common error middleware, etc...)
  • impl article db
  • impl article handler
  • refactor binding and validation of request
  • configure docker compose
  • add metrics / update to prometheus
  • configure tests (newman or http)

About

Exemplary RESTFul API built with go, gin, gorm

Topics

Resources

Stars

Watchers

Forks

Contributors 2

Languages

AltStyle によって変換されたページ (->オリジナル) /