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

https://github.com/rxyalxrd/yadro_randomuser

Приложение представляет из себя простую web страницу с полем для ввода количества человек, которых необходимо загрузить с API, а также таблица с информацией обо всех людях.
https://github.com/rxyalxrd/yadro_randomuser

docker docker-compose fastapi python3 redis

Last synced: 3 months ago
JSON representation

Приложение представляет из себя простую web страницу с полем для ввода количества человек, которых необходимо загрузить с API, а также таблица с информацией обо всех людях.

Awesome Lists containing this project

README

          

# RandomUser Redis API

## Описание

Веб-приложение для взаимодействия с внешним API [randomuser.me](https://randomuser.me), загрузки случайных пользователей и отображения информации о них через веб-интерфейс. Все данные хранятся временно в Redis, что обеспечивает актуальность данных при каждом запросе и не требует постоянного хранилища.

## Стек технологий

* Python 3.10+
* FastAPI
* Redis (вместо постоянной базы данных)
* Bootstrap 5
* HTML / JS (Vanilla)

## Установка и запуск

1. Клонировать репозиторий:

```bash
git clone git@github.com:Rxyalxrd/YADRO_RandomUser.git
cd src
```

2. Установить зависимости:

```bash
make install
```

3. Убедитесь, что Redis запущен и доступен.

4. Запустить сервер:

```bash
make run
```

5. Перейти в браузере по адресу: [http://127.0.0.1:8000](http://127.0.0.1:8000)

## API эндпоинты

### Загрузить пользователей

**POST** `/users/load`

Загружает указанное количество случайных пользователей (до 1000) из randomuser.me в Redis.

```json
{
"limit": 1000
}
```

### Получение пользователей по страницам

**GET** `/users/{page}`

Возвращает пользователей с пагинацией (по умолчанию по 5 на страницу).

Пример ответа:

```json
{
"page": 1,
"per_page": 5,
"total": 1000,
"users": [ ... ]
}
```

### Получить пользователя по ID

**GET** `/homepage/{user_id}`

Возвращает одного пользователя по его порядковому номеру (от 1 до 1000).

### Получить случайного пользователя

**GET** `/homepage/random`

Возвращает случайного пользователя из Redis.

## Страницы

* `/` — Главная страница. Содержит форму загрузки пользователей и таблицу с пагинацией.
* `/homepage/{user_id}` — Страница пользователя по ID.
* `/homepage/random` — Страница со случайным пользователем.

## Особенности реализации

* Используется Redis как временное хранилище. При каждом вызове `/users/load` данные в Redis обновляются заново.
* Пагинация позволяет работать с большим количеством данных без полной загрузки всего списка.
* Bootstrap используется для стилизации таблицы и формы.

## Требования из задания и соответствие

1. **Таблица с нужными полями:** ✅
2. **Вся информация хранится в Redis:** ✅
3. **Использован Bootstrap:** ✅
4. **Начальная загрузка 1000 пользователей:** ✅
5. **Просмотр пользователя по ID:** ✅
6. **Случайный пользователь:** ✅
7. **Тесты отсутствуют:** ❌ (можно добавить pytest + httpx.asyncclient)

## Возможности для улучшения

* Добавление юнит- и интеграционных тестов.
* Кэширование случайного пользователя на короткое время.
* UI-индикация загрузки/ошибок.
* Фильтрация и поиск пользователей на фронтенде.
* Логирование
* Обработку исключений вынести в декоратор

---