Skip to content

wisderfin/TinyURL

Repository files navigation

TinyURL

Описание

TinyURL - простой сервис сокращения ссылок.

Использование

Подстановка переменых окружения:

Пример данных находиться в файле .env.example, вам остаёться только подставить свои значения. Впринципе данные в примере вполне сойдут, вы можете просто переименовать файл в .env

Развертывание :

docker-compose up --build -d

После развертывания будут доступны следующие адресса:

  1. localhost:8000/docs - OpenAPI(Swager) интерфейс для API
  2. localhost:8080 - Фронтенд часть

Разработка

Backend

Backend-часть проекта разделена на несколько частей:

  1. Развертывание БД и приминение миграций(Postgres)
  2. Compressor(FastAPI + pydantic)
  3. Redirect(FastAPI)
Postgres

Простая база данных развертываямая с параметрами из env-файла. Миграции применяються из каталога migrations/versions. Те в свою очередь были созданы из sqlalchemy-модейлей лежащих по путям app/backend/components/*/models.py (все настройки alembic лежат в alembic.ini и migrations/env.py). Для дальнейшей работы с БД создан генератор сессий в файле app/backend/base/database.py.

В ходе данного проета была создана всего одна таблица(links), содержащая:

  1. id
  2. short - ключ присваеваемый записи для подстановку в url-адрес для переадресации, состоит из цифр, латинских букв верхнего и нижнего регистра(минимум 8 символов)
  3. full - полная ссылка на перенаправляемый ресурс
  4. create_at - время создания ссылки
Compressor

На этом этапе был создан компонент app/backend/compressor/ отвечающий за сокращение ссылок и добавления из в БД. Включает следущие файлы:

  1. models.py - sqlalchemy-модель для таблицы links
  2. router.py - роутер FastAPI, содержащий endpoint /add принимающий AddLinkScheme и session из depends(явно сессию передавать не обезательно) и служащий для перенаправление данных в utils(add_link). Возвращает схему LinkScheme.
  3. schemes.py - содержит две схемы AddLinkScheme и LinkScheme
  4. services.py - содержит функцию определения short для новой ссылки
  5. utils.py - содержит функции обращающиеся к базе данных, в данном случаи написаны 2 функции add_link и get_latest_url(используемая преимущественно в services.py)
Redirect

На этом этапе был создан компонент app/backend/redirect/ отвечающий за получение полной ссылки из короткой включает следущие файлы:

  1. router.py - содержит endpoint /{short} . Возвращает либо ссылку либо перенаправления в зависимости от места вызова.
  2. utils.py - содержит функцию get_link_by_short

Frontend

Простая архитектура из html, css и js, без использования каких либо фреймворков. Запросы выполняються через axios, имееться сообщение об ошибке в случаи её наличия и кнопка копирования результата.

Из сложного - пришлось настроить CORS в FastAPI.

readme_src/good.png

readme_src/error.png

Docker

Для даного проекта было использовано 2 dockerfile и 1 docker-compose:

  1. dockerfile - файл для backend-части использующий python и устанавливающий зависимости
  2. dockerfile_frontend - файл для frontend-части использующий js и устанавливающий live-server
  3. docker-compose.yaml - загружает стороние образы и собирающий образы проекта:
    1. postgres - развёртывание БД
    2. alembic - приминение миграций
    3. fastapi - поднятие сервера
    4. frontend - запуск клиентской части
    5. networks:main - общая сеть для всех образов

About

Simple URL shortening service

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •