Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dreek1337/ego
Пет-проект, для реализации технологий
https://github.com/dreek1337/ego
auth ci clean-architecture ddd docker fastapi gateway-api github-actions high-performance microservice microservices minio open-api postgresql replication-data rest-api s3-storage sqlalchemy swagger
Last synced: 11 days ago
JSON representation
Пет-проект, для реализации технологий
- Host: GitHub
- URL: https://github.com/dreek1337/ego
- Owner: dreek1337
- License: mit
- Created: 2023-05-07T09:04:31.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-07-18T19:14:02.000Z (over 1 year ago)
- Last Synced: 2024-11-07T08:06:18.299Z (11 days ago)
- Topics: auth, ci, clean-architecture, ddd, docker, fastapi, gateway-api, github-actions, high-performance, microservice, microservices, minio, open-api, postgresql, replication-data, rest-api, s3-storage, sqlalchemy, swagger
- Language: Python
- Homepage:
- Size: 539 KB
- Stars: 8
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
EGO
Архетиктура сервиса
![alt text](https://sun9-71.userapi.com/impg/BAO9NoMLWJkVN-cieiTrhuOIXQzp6LtvCC372g/tvNiEiPjCPs.jpg?size=1111x899&quality=96&sign=6ce5d0d87be548442dc9e87babb773ea&type=album)
Описание проекта
Проект предназначен для ознакомления с новыми технологиями. Ключевой вещью является микросерверная архитектура, функционирует через 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
```Swagger-UI
![alt text](https://sun9-79.userapi.com/impg/X_1zgW6V1j1SVRvsDahf2foHvxLbL8DFDeya-Q/ZfK7z4AdV24.jpg?size=1280x636&quality=96&sign=1ce2cd48110e66267e3c78831674f62f&type=album)
Endpoints
*Регистрация*
```
ВАЖНО!
1. Вставьте актуальный адрес APISIX сервиса.
2. Осуществляйте запросы на данный момент через Postman или терминал.
```1. Зарегестрируйте почту, логин и пароль(Получите JWT токен и используйте его в заголовке Authorization).
POST auth/registration
```
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]"
}'
```2. Закончите регистрацию в сервисе.
```
curl -X 'POST' \
'http://example.com/users/create_user' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer
-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!"
}'
```TODO
- Сделать сервис для маршрутов в шлюзе, с плагином forward-auth
- Натсроить добавление заголовка в запрос в OpenAPI для jwt
- Сделать логирование
- Добавить кеширование через Redis
- Настроить nginx