Проект предназначен для ознакомления с новыми технологиями. Ключевой вещью является микросерверная архитектура, функционирует через API Gateway, который в свою очередь занимается маршрутизацией запросов в микросервисы и берет на себя управление авторизацией. На данный момент реализовано 3 сервиса (Auth, Posts, Users). Авторизация реализована с использованием JWT токена, который содержит в payload id пользователя, с помощью которого связаны все сервисы. Каждый запрос, имеющий заголовок Authorization, проксируется через плагин Apache APISIX на сервис Auth и добавляет к основному запросу заголовок X-User-ID.
Кратко о каждом сервисе:
-
Auth microservice - сервис авторизации пользователей. Содержит в себе логику авторизации и аутентификации, выдает JWT токен, производит его рефреш и проверку. Хранит в себе пароль, логин и почту пользователя, так же через него и обновляется эта информация.
-
Users microservice - сервис для работы с пользователями. Содержит в себе логику завершения регистрации пользователя. После чего можно полноценно пользоваться этим сервисом, осуществлять подписки и отписки на других пользователей, устанавливать себе аватарку обновлять и удалять ее.
-
Posts microservice - сервис для работы с постами. Содержит в себе логику работы с постами пользователей. Поиск по id, поиск по ключевым словам, удаление и обновление. На данный момент работает только в текстовом формате.
-
FastAPI
-
SQLAlchemy/PostgreSQL
-
Minio/Aiobotocore
-
Elasticsearch (Kibana, Curator)
-
Docker/Docker compose
-
pytest (Unit-тесты)
-
mypy, black, isort, ruff
-
CI (pre-commit, GitHub Actions)
-
Apache APISIX
-
Микросервисы
-
DDD
bash startup.sh
Регистрация
ВАЖНО!
1. Вставьте актуальный адрес APISIX сервиса.
2. Осуществляйте запросы на данный момент через Postman или терминал.
- Зарегестрируйте почту, логин и пароль(Получите JWT токен и используйте его в заголовке Authorization).
curl -X 'POST' \
'http://example.com/auth/registration' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"username": "testusername",
"password": "testpassword",
"user_email": "[email protected]"
}'
- Закончите регистрацию в сервисе.
curl -X 'POST' \
'http://example.com/users/create_user' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <JWT Token>
-d '{
"first_name": "Test",
"last_name": "Test",
"gender": "male",
"birthday": "2023-07-18"
}'
Создайте свой первый пост
curl -X 'POST' \
'http://example.com/posts/create_post' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"text_content": "My test text post!"
}'
-
Сделать сервис для маршрутов в шлюзе, с плагином forward-auth
-
Натсроить добавление заголовка в запрос в OpenAPI для jwt
-
Сделать логирование
-
Добавить кеширование через Redis
-
Настроить nginx