Skip to content

Lifo (stack) with Web interface (REST API) and Postgres

License

Notifications You must be signed in to change notification settings

EvilLord666/WebLiFo

Repository files navigation

WebLiFo

Web-интерфейс (REST API) для управления LIFO (Last In First Out - стэк), написанный на go. WebLiFo REST API оперирует ресурсом lifo - /api/lifo

1. Основные характеристики объектов можели данных lifo и item

  • наименование (название стэка) - поле name (string);
  • описание (краткая характеристика) - поле description (string)
  • размер (глубина) lifo в ячейках - size;
  • элементы стека - item тип данных (т.е. то что находится в ячейке LIFO) - []byte

2. Ограничения

  • мы не задаем ограничения элементов стэка по размеру, т.е. элементами стэка могут быть слайсы байт произвольной длины (размера);
  • данные будут храниться в таблицах БД (Postgres), мы предполагаем, что данные будут небольшими (не более нескольких кБ), поэтому мы храним их напрмую в колонке БД, в случае если предполагается, что размер данных большой, необходимо использовать STREAM;
  • для обеспечения возможности добавления извлечения элементов из стэка без необходимости индексировать все элементы они будут храниться в виде односвязного списка т.е. у каждого item будет колонка previuos_item_id (у верхнего будет NULL), поэтому при извлечении/добавлении нового элемента в стэк потребуется отредактировать только 1 элемент из таблицы items.

3. Описание API для управления стэками

  • GET /api/lifo - возвращает коллекцию метаинформации (без items) стэков (без элементов)
  • GET /api/lifo/{id} - возвращает метаинформацию по стэку по идентификатору {id}
  • GET /api/lifo/{id}/items - возвращает стэк со всеми его элементами
  • POST /api/lifo - создает новый пустой стэк;
  • PUT /api/lifo/{id} - редактирует метаинформацию стэка;
  • DELETE /api/lifo/{id} - удаляет стэк со всеми его элементами;
  • POST /api/lifo/flush - выполняет очистку стэка (удаляет его элементы);
  • POST /api/lifo/{id}/push - добавляет элемент в стэк с идентификатором {id};
  • POST /api/lifo/{id}/pop - извлекает элемент из стэка с идентификатором {id}.

4. Запуск в docker-container

  1. Запуск с предварительной сборкой (пересборкой образов)
docker-compose up --build
  1. Удаление ранее собранных образов
docker-compose down

Доступ к Web API можно осуществить по flhtce: localhost:8765