- Todo list microservices architecture application
This project demonstrates microservices architecture based application.
Main application features:
- gRPC APIs
- SSL encryption between client and backend
- users can login and register accounts
- JWT token authorization
- gateway API
- logged users can create, get, list, update and delete todo list entries
- services use MySQL databases
- services are running in Docker containers
Application consists of three services:
- Gateway API service - SSL encryption, JWT token verification, authorization and orchestration
- User service - registering users, managing user accounts, authentication and JWT token generation
- Todo service - creating, updating, deleting and querying todos
.
├── gateway - directory with gateway service
│ ├── inc
│ │ └── gateway - directory with header files
│ ├── src - directory with source code files
│ └── third_party - external dependencies (libraries)
│ └── jwt-cpp
├── protos - directory with gRPC interfaces
│ ├── todo - directory with gRPC interface for todo service
│ └── user - directory with gRPC interface for user service
├── test - directory with end2end tests
│ └── certs - directory with test certificates
├── todo - directory with source code and tests for todo service
│ ├── tests
│ │ └── integration - directory with integration tests for todo service
│ │ └── certs - directory with test certificates
│ └── todo - package with todo service code
└── user - directory with source code and tests for user service
├── tests
│ └── integration - directory with integration tests for user service
│ └── certs - directory with test certificates
└── user - package with user service code
git clone --recursive https://github.com/rsitko92/todo-app-microservices.git
- Docker
- Docker Compose
- PlantUML (if you want to generate diagrams)
Being in root directory of project run:
sudo protos/run.sh
Generated interfaces definitions will be placed in protos/.gen
directory. It is sufficient to generate they only one time.
Being in root directory of project run:
docs/diagrams/generate.sh
Generated images with diagrams will be placed in docs/diagrams/out
directory.
Before running any kind of tests (integration or end2end) generate the gRPC client and server interfaces from .proto service definitions files. See section Generating interfaces.
-
User service:
Being in root directory of project run:
sudo user/tests/integration/run.sh
-
Todo service:
Being in root directory of project run:
sudo todo/tests/integration/run.sh
Being in root directory of project run:
sudo test/run.sh
- Python3
- Docker
- gRPC Python
- SQLAlchemy
- PyJWT
- MariaDB (MySQL relational database management system)
- Python3
- Docker
- gRPC Python
- SQLAlchemy
- PyJWT
- MariaDB (MySQL relational database management system)
- C++
- Docker
- gRPC C++ with SSL
- jwt-cpp
- CMake
- Python3
- Docker
- gRPC Python
- PyJWT