Skip to content

andmerk93/yacut

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Сервис YaCut

Описание проекта

Сервис YaCut - это сервис укорачивания ссылок и API к нему

Ключевые возможности сервиса:

  • генерация коротких ссылок и связь их с исходными длинными ссылками
  • переадресация на исходный адрес при обращении к коротким ссылкам

Пользовательский интерфейс сервиса — одна страница с формой. Эта форма состоит из двух полей:

  • обязательного для длинной исходной ссылки
  • необязательного для пользовательского варианта короткой ссылки (не должен превышать 16 символов)

Если пользователь предложит вариант короткой ссылки, который уже занят, то появляется соответствующее уведомление. Существующая в базе данных ссылка должна остаться неизменной.

Если пользователь не заполнит поле со своим вариантом короткой ссылки, то сервис должен сгенерировать её автоматически. Формат для ссылки по умолчанию — шесть случайных символов, в качестве которых можно использовать:

  • большие латинские буквы,
  • маленькие латинские буквы,
  • цифры в диапазоне от 0 до 9.

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

API для проекта

API проекта доступен всем желающим. Сервис обслуживает только два эндпоинта:

  • /api/id/ — POST-запрос на создание новой короткой ссылки;
  • /api/id/<short_id>/ — GET-запрос на получение оригинальной ссылки по указанному короткому идентификатору.

Примеры запросов к API, варианты ответов и ошибок приведены в спецификации openapi.yml

Примеры запросов

GET .../api/id/{short_id}/

200

{
  "url": "string"
}

404

{
  "message": "Указанный id не найден"
}

POST .../api/id/

{
  "url": "string",
  "custom_id": "string"
}

201

{
  "url": "string",
  "short_link": "string"
}

400

{
  "message": "Отсутствует тело запроса"
}

Шаблон наполнения .env файла

FLASK_APP=yacut
FLASK_ENV=development
DATABASE_URI=sqlite:///db.sqlite3
SECRET_KEY=SECRET

Требования:

  • Python 3
  • Flask 2
  • SQLAlchemy 1.4
  • Jinja2
  • WTForms
  • и их зависимости (описано в requirements.txt)

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

  • клонировать репозиторий на машину, с которой будет будет запускаться сервис
git clone https://github.com/andmerk93/yacut.git
  • На машине должен быть установлен Python актуальной версии (тестировалось на 3.8)
  • развернуть виртуальное окружение python в папке с проектом (yacut)
python3 -m venv venv
  • активировать виртуальное окружение для linux/unix
source ./venv/bin/activate 
  • для Windows, должно быть разрешено выполнение скриптов Powershell
venv\Scripts\activate
  • с запущенным виртуальным окружением нужно выполнить установку требуемых компонентов
pip install -r requirements.txt
  • затем, выполнить миграции
flask db upgrade
  • запустить проект
flask run --port=80

Проект будет доступен по https://localhost/

TODO

  • Расположить форму ввода в шаблоне посередине

Releases

No releases published

Packages

No packages published