Skip to content

This is a backend service built on FastAPI that allows you to upload and download processed images.

Notifications You must be signed in to change notification settings

SovoN-Niko/images_server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Images_server

Это простой тестовый backend сервис написанный на базе фреймворка FastAPI, который реализует загрузку, скачивание изображений на сервер и применение фильтров (invert, canny)

Инструкция по установке зависимостей и запуску:

Проект разрабатывался в IDE Visual Studio Code под ОС Ubuntu 20.04.01 Для запуска и отладки необходимы следующие программные модули:

  • Python 3.12.2
  • PostgreSQL 12.18
  • Git 2.25.1 и выше

Убедитесь, что эти модули установлены прежде чем переходить к установке проекта и зависимостей.

Чтобы перенести проект на локальный компьютер склонируйте репозиторий из Github:

git clone https://github.com/SovoN-Niko/images_server

Настройка PostgreSQL

Создайте пользователя и базу данных для сервиса.

Для этого запустите интерактивный терминал PostgreSQL

sudo -u postgres psql

И выполните ряд команд:

CREATE USER developer;
ALTER USER developer WITH PASSWORD 'AIxOCnUtgh';
CREATE DATABASE image_service;
GRANT ALL ON DATABASE image_service TO developer;

Установка зависимостей Python

В скачанном репозитории перейдите в директорию backend:

cd backend

Создайте виртуальное окружение:

python -m venv .venv

и активируйте его:

source .venv/bin/activate 

Установите зависимости из requirements.txt:

sudo pip install -r requirements.txt 

Примените последнюю миграцию, чтобы база данных была в актуальном состоянии:

alembic upgrade head

Запуск

Чтобы запустить приложение на выполните команду в терминале:

uvicorn app.main:app --port 8080 --reload

Это запустит приложение на http://127.0.0.1:8080

Чтобы проверить работу программу вручную перейдите по ссылке http://127.0.0.1:8000/docs. Это позволит вводить GET и POST запросы, описанные в тестовом задании.

Endpoints

Сервис работает с двумя эндпоинтами описанными в images_server/backend/app/routers/image_api.py:

  • POST

Запрос является составным и состоит из параметра filter (принимает значения canny и invert) и multipart/form-data с файлом изображения.

Пример запроса:

curl -X 'POST' \
  'http://127.0.0.1:8080/img_api/upload?filter=canny' \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -F 'file=@example_1.jpg;type=image/jpeg'

Запрос отправляет изображение (example_1.jpg) на локальный сервер по адресу http://127.0.0.1:8000/img_api/upload, используя метод POST. Он включает параметр filter=canny для указания фильтра Canny, передает файл как multipart/form-data, и ожидает ответ в формате JSON.

Ответ на запрос (Успешный):

{ "detail": "Successfully update image!", "id": "fc2e74c5-04c6-4bfd-8d8f-816e49f780a8", "filename": "example_1.jpg", "filter": "canny", "modified_at": "2024-09-03T03:55:08.975885" }

Помимо стандартных статус кодов в случае ошибки в ответ на запрос может прийти: статус код "202" и {"detail":"File processing"} это сообщение говорит о том, что пользователь пытается повторно загрузить файл, который в данный момент находится в обработке.

  • GET

Запрос состоит из одного параметра "id", который должен содержать id загруженного ранее на сервер изображения в формате UUID4.

Пример запроса:

curl -X 'GET' \
  'http://127.0.0.1:8000/img_api/download?id=fc2e74c5-04c6-4bfd-8d8f-816e49f780a8' \
  -H 'accept: application/json'

Запрос передает параметр id, по которому в базе данных можно найти путь к загруженному ранее изображению.

В случае успешного запроса в ответ должно прийти изображение и статус код "200".

Если осуществляется попытка запроса файла изображения в момент его обработки фильтром, в ответ на запрос должно прийти: статус код "202" и {"detail":"File processing"}.

Если id, по которому пытаются получить файл отсутствует в базе данных, то в ответ на запрос должно прийти: статус код "404" и {"detail":"Image not found!"}

About

This is a backend service built on FastAPI that allows you to upload and download processed images.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published