- 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.shGenerated 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.shGenerated 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







