• Stars
    star
    657
  • Rank 68,589 (Top 2 %)
  • Language
    Go
  • Created about 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

👨‍💻 REST API example, built by following Uncle Bob’s clean architecture principles

Go Clean Architecture

Example that shows core principles of the Clean Architecture in Golang projects.

Blog Post

Rules of Clean Architecture by Uncle Bob:

  • Independent of Frameworks. The architecture does not depend on the existence of some library of feature laden software. This allows you to use such frameworks as tools, rather than having to cram your system into their limited constraints.
  • Testable. The business rules can be tested without the UI, Database, Web Server, or any other external element.
  • Independent of UI. The UI can change easily, without changing the rest of the system. A Web UI could be replaced with a console UI, for example, without changing the business rules.
  • Independent of Database. You can swap out Oracle or SQL Server, for Mongo, BigTable, CouchDB, or something else. Your business rules are not bound to the database.
  • Idependent of any external agency. In fact your business rules simply don’t know anything at all about the outside world.

More on topic can be found here.

Project Description&Structure:

REST API with custom JWT-based authentication system. Core functionality is about creating and managing bookmarks (Simple clone of Pocket).

Structure:

4 Domain layers:

  • Models layer
  • Repository layer
  • UseCase layer
  • Delivery layer

API:

POST /auth/sign-up

Creates new user

Example Input:
{
	"username": "UncleBob",
	"password": "cleanArch"
} 

POST /auth/sign-in

Request to get JWT Token based on user credentials

Example Input:
{
	"username": "UncleBob",
	"password": "cleanArch"
} 
Example Response:
{
	"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzEwMzgyMjQuNzQ0MzI0MiwidXNlciI6eyJJRCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIlVzZXJuYW1lIjoiemhhc2hrZXZ5Y2giLCJQYXNzd29yZCI6IjQyODYwMTc5ZmFiMTQ2YzZiZDAyNjlkMDViZTM0ZWNmYmY5Zjk3YjUifX0.3dsyKJQ-HZJxdvBMui0Mzgw6yb6If9aB8imGhxMOjsk"
} 

POST /api/bookmarks

Creates new bookmark

Example Input:
{
	"url": "https://github.com/zhashkevych/go-clean-architecture",
	"title": "Go Clean Architecture example"
} 

GET /api/bookmarks

Returns all user bookmarks

Example Response:
{
	"bookmarks": [
            {
                "id": "5da2d8aae9b63715ddfae856",
                "url": "https://github.com/zhashkevych/go-clean-architecture",
                "title": "Go Clean Architecture example"
            }
    ]
} 

DELETE /api/bookmarks

Deletes bookmark by ID:

Example Input:
{
	"id": "5da2d8aae9b63715ddfae856"
} 

Requirements

  • go 1.13
  • docker & docker-compose

Run Project

Use make run to build and run docker containers with application itself and mongodb instance

More Repositories

1

awesome-backend

🚀 A curated and opinionated list of resources (English & Russian) for Backend developers | Структурированный список ресурсов для изучения Backend разработки
2,235
star
2

todo-app

🔥 REST API для приложения списков ToDo
Go
244
star
3

go-basics

🔥 Исходники к курсу "Язык Go Для Начинающих"
Go
103
star
4

pocketer-bot

🚀 Клиент для Pocket у тебя в телеграмме
Go
52
star
5

scheduler

Golang tool for scheduling functions execution within a given interval
Go
47
star
6

musicload-bot

Telegram Bot written in Go
Go
31
star
7

jewerly-shop-backend

Back-End Service for SilverRain Jewelry © 2020
Go
30
star
8

auth

Simple HTTP Authentication REST API ready for use in your projects
Go
24
star
9

go-pocket-sdk

Unofficial getpocket.com API Golang SDK
Go
23
star
10

s3-file-uploader

Basic HTTP API for file uploading to S3-compatible storage
Go
12
star
11

spacer

🚀 Golang library & CLI tool that helps you export encrypted database dumps to S3-compatible storages
Go
10
star
12

task-management-microservices

Microservice Architecture Example w/ Go + KrakenD + Postgres
Go
10
star
13

goutalk

Simple chat server developed within "Backend Challenge Hackathon" & Chat Bot based on Dialogflow NLU System
Go
10
star
14

jewerly-shop-frontend

Jewerly E-Commerce Web Site Frontend
JavaScript
8
star
15

zhashkevych

6
star
16

quotes-server

TCP Server with PoW mechanism
Go
4
star
17

editt-api

EDITT Back-End Application
Go
2
star
18

editt-client

editt front-end client app
Vue
1
star
19

o2k-manager

example
Go
1
star
20

fill-array

Coding interview challenge example (with a solution using Go).
Go
1
star
21

o2k-shared

example
Go
1
star
22

orderbook

HFT order book basic implementation in Go for research purposes
Go
1
star
23

trinity

Go
1
star