Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/claygod/microservice
This library provides a simple microservice framework based on clean architecture principles with a working example implemented.
https://github.com/claygod/microservice
clean-architecture framework go golang microservice microservices
Last synced: about 1 month ago
JSON representation
This library provides a simple microservice framework based on clean architecture principles with a working example implemented.
- Host: GitHub
- URL: https://github.com/claygod/microservice
- Owner: claygod
- License: other
- Created: 2016-12-15T09:07:04.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2024-11-15T09:22:35.000Z (about 1 month ago)
- Last Synced: 2024-11-15T10:26:51.942Z (about 1 month ago)
- Topics: clean-architecture, framework, go, golang, microservice, microservices
- Language: Go
- Homepage:
- Size: 10.8 MB
- Stars: 114
- Watchers: 9
- Forks: 16
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-go-extra - microservice - 12-15T09:07:04Z|2022-05-23T17:27:27Z| (Web Frameworks / Fail injection)
- awesome-go - microservice - This library provides a simple framework of microservice, which includes a configurator, a logger, metrics, and of course the handler - ★ 45 (Web Frameworks)
README
# Microservice
[![API documentation](https://godoc.org/github.com/claygod/microservice?status.svg)](https://godoc.org/github.com/claygod/microservice)
[![Mentioned in Awesome Go](https://awesome.re/mentioned-badge.svg)](https://github.com/avelino/awesome-go)
[![forks](https://img.shields.io/github/forks/claygod/microservice)](https://github.com/claygod/microservice/network/members)
[![stars](https://img.shields.io/github/stars/claygod/microservice)](https://github.com/claygod/microservice/stargazers)
[![Go Report Card](https://goreportcard.com/badge/github.com/claygod/microservice)](https://goreportcard.com/report/github.com/claygod/microservice)The framework for the creation of microservices, written in Golang.
This package is implemented using clean architecture principles.
A good article on implementing these principles in Golang:
http://manuel.kiessling.net/2012/09/28/applying-the-clean-architecture-to-go-applications/## Install
```
git clone ginhub.com/claygod/microservice
cd microservice
make build
make run
```Go to `localhost:8080` in your web browser
## Endpoints
Code in `/services/gateways/gatein/gatein.go`
- `/` welcome handler
- `/healthz/ready` for SRE
- `/healthz` for kubernetes
- `/readyness` for kubernetes
- `/metrics` prometheus metrics
- `/swagger` generate swagger fo api
- `/piblic/v1/bar/:key` public route (example)> [!CAUTION]
> Requests from an external balancer should be forwarded not to the root of endpoints, but to `/public`.
> Then service routes with metrics and other private information will be inaccessible to external users.### Using
Build and run main.go
Example requests:
- localhost:8080/piblic/v1/bar/one -> {"Data":"three"}
- localhost:8080/piblic/v1/bar/secret -> response 404
- localhost:8080/piblic/v1/bar/looooonnngggoooooggkkkeeyyyyyyy -> response 400 (not valid)
- localhost:8080/healthz/ready -> minute first 5 sec - 503 after 200 (for example!)
- localhost:8080/healthz -> minute first 5 sec - 503 after 200 (for example!)
- localhost:8080/readyness -> response 200
- localhost:8080/swagger -> json-swagger### Swagger
After starting the application, the first time route `/swagger` is called,
the swagger file `config/swagger.yaml` is regenerated.### Environment
Add to ENV `export GATE_IN_TITLE=Yo-ho-ho!` :+1:
ang open in browser `http://localhost:8080/` :tada:## Clean architecture
> [!IMPORTANT]
> Distribution of architectural entities by layers#### Entity
Path */domain*
#### Usecases
Path */usecases*
#### Interfaces
Path */service*
#### Infrastructure
Path */app* , */config* and core
## Config
The default configuration file:
- `config/config.yaml`Specify in the command line another file:
- `yourservice -config other.yaml`## Dependencies
github.com/claygod/tools v0.0.0-20211122181936-bab1329a2e3d
github.com/dsbasko/go-cfg v1.2.0
github.com/google/uuid v1.3.0
github.com/julienschmidt/httprouter v1.3.0
github.com/pborman/getopt v1.1.0
github.com/prometheus/client_golang v1.11.0
github.com/savaki/swag v0.0.0-20170722173931-3a75479e44a3
sigs.k8s.io/yaml v1.4.0github.com/BurntSushi/toml v1.3.2 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/caarlos0/env/v10 v10.0.0 // indirect
github.com/cespare/xxhash/v2 v2.1.1 // indirect
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.22.1 // indirect
github.com/golang/protobuf v1.4.3 // indirect
github.com/joho/godotenv v1.5.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.26.0 // indirect
github.com/prometheus/procfs v0.6.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
golang.org/x/crypto v0.19.0 // indirect
golang.org/x/net v0.21.0 // indirect
golang.org/x/sys v0.17.0 // indirect
golang.org/x/text v0.14.0 // indirect
google.golang.org/protobuf v1.26.0-rc.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect## ToDo
- [x] Use environment variables in configuration
- [x] Add support for metrics
- [x] Input validate
- [x] Swagger 2.0
- [ ] Use protocol gRPC## Conclusion
Microservice does not claim the laurels of the only true solution, but on occasion, I hope, will help you create your own micro-architecture of the service, becoming the prototype for future applications.
## Give us a star!
> [!TIP]
> If you like or are using this project to learn or start your solution, please give it a star. Thank you!## License
GNU GENERAL PUBLIC LICENSE Version 3
### Copyright
Copyright © 2017-2024 Eduard Sesigin. All rights reserved. Contacts: [email protected]