Logo

URL Shortener

Тестовое задание на FastAPI
Explore the docs »

Tech


View Demo · Report Bug · Request Feature

Оглавление
  1. Задание
  2. Стек технологий
  3. Установка
  4. Тестирование

Задание

Тестовое задание на позицию стажера/junior бекенд разработчика в юнит Авто

Источник

Нужно сделать HTTP сервис для сокращения URL наподобие Bitly и других сервисов.

UI не нужен, достаточно сделать JSON API сервис. Должна быть возможность:

  • сохранить короткое представление заданного URL
  • перейти по сохраненному ранее короткому представлению и получить redirect на соответствующий исходный URL

Требования:

  • Язык программирования: Go/Python/PHP/Java/JavaScript
  • Предоставить инструкцию по запуску приложения. В идеале (но не обязательно) – использовать контейнеризацию с возможностью запустить проект командой docker-compose up
  • Требований к используемым технологиям нет - можно использовать любую БД для персистентности
  • Код нужно выложить на github (просьба не делать форк этого репозитория, чтобы не плодить плагиат)

Усложнения:

  • Написаны тесты (постарайтесь достичь покрытия в 70% и больше)
  • Добавлена валидация URL с проверкой корректности ссылки
  • Добавлена возможность задавать кастомные ссылки, чтобы пользователь мог сделать их человекочитаемыми - http://bit.ly/avito-auto-be
  • Проведено нагрузочное тестирование с целью понять, какую нагрузку на чтение может выдержать наш сервис
  • Если вдруг будет желание, можно слепить простой UI и выложить сервис на бесплатный хостинг - Google Cloud, AWS и подобные.

(вернуться наверх)

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

  • icon Python 3.9
  • icon FastAPI
  • icon MySQL
  • icon Docker & Docker Compose
  • icon SQLAlchemy & Alembic
  • icon PyTest & HTTPX
  • icon GitHub Actions

(вернуться наверх)

Установка

  1. Клонируйте репозиторий
    git clone https://github.com/h1lton/url-shortener.git
    cd url-shortener
  2. Создайте файл .env
    cp .env.template .env
  3. Создайте образы и запустите контейнеры
    docker-compose up --build
    В первый раз это займет продолжительный промежуток времени.
  4. Когда увидите в консоли что uvicorn запущен, можете открывать документацию.

(вернуться наверх)

Тестирование

Что бы запустить тесты:

docker-compose -f docker-compose.test.yml up --build --abort-on-container-exit --exit-code-from tests

или

docker-compose up
docker-compose exec app pytest

Тесты так же запускаются при пуше в ветку main.

(вернуться наверх)