Ego

Пет-проект, для реализации технологий

MIT License

Stars
8
Committers
1

Проект предназначен для ознакомления с новыми технологиями. Ключевой вещью является микросерверная архитектура, функционирует через 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 или терминал.
  1. Зарегестрируйте почту, логин и пароль(Получите 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]"
}'
  1. Закончите регистрацию в сервисе.
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