Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

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

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